typescript 如何在Svelte中实施符合GTAG GDPR的Google Analytics

5jdjgkvh  于 2023-03-31  发布在  TypeScript
关注(0)|答案(1)|浏览(104)

所以我最近真的在努力解决一个问题,我认为你们大多数苗条的开发人员迟早都会遇到这个问题-特别是如果你想在欧盟推出生产应用程序。
现在我不会进入GDPR的复杂性,残酷的简化,你需要有你的网站访问者的同意,如果你想在那里的机器上放置cookie并使用他们的数据.此外,企业主希望分析传入的访问者的指标,仍然是最强大的工具来做到这一点是谷歌分析(它是免费的,以及不需要托管等).
那么,您将如何以符合GDPR的方式实现GTAG及其设置的cookie。

3qpi33ja

3qpi33ja1#

首先是GTAG实现:我创建了一个简单的svelte Modal组件,它使用cookie来存储用户的数据首选项,并包含GTAG代码。对于手动cookie首选项放置,我使用npm包“svelte-local-storage-store”并使用它创建了一个存储。

<script lang="ts">
    import { preferences } from '$lib/userStore';
    import { page } from '$app/stores';
    import { PUBLIC_GAMID } from '$env/static/public';

    if (typeof gtag !== 'undefined') {
        gtag('config', PUBLIC_GAMID, {
            page_title: document.title,
            page_path: $page.url.pathname
        });
    }
    function consentGranted() {
    console.log("AD Cookies placed");
        gtag('consent', 'update', {
            ad_storage: 'granted',
      analytics_storage: 'granted'
        });
    }

    function acceptGdpr() {
    console.log("GDPR accepted");
    
        preferences.set({ acceptAllCookies: true });
    consentGranted();
    }
</script>

{#if $preferences.acceptAllCookies == false}
    <input type="checkbox" id="my-modal-6" class="modal-toggle" />
    <div class="modal modal-bottom sm:modal-middle modal-open">
        <div class="modal-box">
            <h3 class="font-bold text-lg">Cookie and GDPR Consent</h3>
            <p class="py-4">
                You've been selected for a chance to get one year of subscription to use Wikipedia for free!
            </p>
            <button on:click={acceptGdpr} class="modal-action">
                <label for="my-modal-6" class="btn">Yay!</label>
            </button>
        </div>
    </div>
{/if}

<svelte:head>
    <script async src="https://www.googletagmanager.com/gtag/js?id=MEASUREMENT_ID">
    </script>
    <script>
        window.dataLayer = window.dataLayer || [];

        function gtag() {
            dataLayer.push(arguments);
        }
        gtag('consent', 'default', {
            ad_storage: 'denied',
            analytics_storage: 'denied'
        });
        gtag('js', new Date());
        gtag('config', 'MEASUREMENT_ID');
    </script>
</svelte:head>

因此,在代码中,我们首先检查gtag是否未定义,这似乎是一个常见的bug,被认为是最佳实践。之后定义了两个函数,一个用于本地偏好cookie,另一个用于更新gtag参数,以便放置正确的cookie。重要的是,这里的对象包含字段ad_storage和analytics_storage,通过将它们的值更改为granted,cookie将被放置在用户的机器上。之后,只有当我们没有用户偏好时,才会显示模态组件的标记。svelte:head部分也很重要。据我所知,svelte:head将随后的代码直接注入到文档头中。在此标记中所做的基本上是您在Google Analytics页面上获得的Google提供的代码。通过设置的关键修改,我们可以在您的Google Analytics页面上添加新的代码。

gtag('consent', 'default', {
            ad_storage: 'denied',
            analytics_storage: 'denied'
        });

这改变了脚本的方式,没有cookie被放置,这是非常重要的,因为我们只被允许放置cookie后,我们已经得到同意。还有更多的参数,可以在这里设置,但这些是最重要的。参考这个API参考
当然,这只是一个非常基本的版本,你可以让它更精细,但从这个基础上的定制不应该是一个麻烦.我希望这对你有帮助!GTAG基本实现代码的灵感来自JoyOfCode,顺便说一下,他有很棒的视频苗条-所以非常感谢他太!
作为资源,我使用https://developers.google.com/tag-platform/devguides/consent#gtag.js_1

相关问题