gpt4 book ai didi

google-analytics - 如何使用 userDeletionRequests :upsert? 从 Firebase 中删除用户分析数据

转载 作者:行者123 更新时间:2023-12-03 15:22:08 24 4
gpt4 key购买 nike

问题描述

我的 Android 应用通过 Google Analytics for Firebase 收集数据。出于隐私原因,如果用户选择这样做,他们必须能够从 Firebase 服务器上删除他们的数据。

该应用通过转发其 Firebase APP_INSTANCE_ID 来请求删除到我自己的服务器。该服务器已预先准备好凭据,来自我的个人 Google 帐户(通过 oauth2),用于管理 Firebase 项目。服务器使用 www.googleapis.com 进行身份验证,并且,使用提供的 APP_INSTANCE_ID , 调用 upsert。

正如 documentation 所指出的那样,通用 Google Analytics API 适合此任务。

在一些初始问题之后(b/c 我没有正确的身份验证范围,并且 Analytics API 没有正确启用),googleapis.com现在为每个 upsert 请求返回 HTTP 200。 (顺便说一句,即使您提供虚假的 APP_INSTANCE_ID ,它也会返回 200。)

这是来自 upsert 的示例响应,它没有显示任何问题:

{ kind: 'analytics#userDeletionRequest',
id:
{ type: 'APP_INSTANCE_ID',
userId: (REDACTED 32-char hexidecimal string) },
firebaseProjectId: (REDACTED),
deletionRequestTime: '2018-08-28T12:46:30.874Z' }

我知道 firebaseProjectId是正确的,因为如果我改变它,我会得到一个错误。我已验证 APP_INSTANCE_ID是正确的,并且稳定到它被 resetAnalyticsData() 重置的那一刻.

测试程序

为了测试删除,我使用以下过程填充了几个自定义事件的 Firebase(Nexus 5X 模拟器,没有 Google Play,没有配置 Google 帐户,但这不应该有任何区别):
  • 安装应用程序
  • 触发一些自定义事件 (FirebaseAnalytics.logEvent)
  • 观察 Firebase 控制台上出现的这些事件
  • (大约一分钟后:)进行 upsert 调用,观察 HTTP 200,并注意“deletionRequestTime”
  • 立即调用FirebaseAnalytics.resetAnalyticsData (清除设备上缓存的任何事件数据)
  • 卸载应用程序
  • 冲洗并重复 7 或 8 次

  • 但是,即使 24 小时后,100% 的 Firebase 事件仍然存在于事件表中。由于 upserts,Firebase 服务器上没有发生明显的状态变化。

    问题

    那么,我做错了什么?如何从 Google Analytics for Firebase 中成功删除用户数据?

    编辑

    这是我用来发出请求的代码(来自 node.js):

    const request = require( 'request' ); 

    ...

    _deletePersonalData( data )
    {
    return new Promise( (resolve, reject) => {
    request.post({
    url: 'https://www.googleapis.com/analytics/v3/userDeletion/userDeletionRequests:upsert',
    body: {
    kind: 'analytics#userDeletionRequest',
    id: {
    type: 'APP_INSTANCE_ID',
    userId: data.firebaseAppInstanceId
    },
    firebaseProjectId: (REDACTED)
    },
    headers: {
    Authorization: 'Bearer ' + iap.getCurAccessToken()
    },
    json: true
    }, (err, res, body) => {
    console.log( 'user-deletion POST complete' );
    console.log( 'Error ' + err );
    console.log( 'Body ', body );

    if( err )
    {
    reject( err );
    return;
    }

    if( body.error )
    {
    reject( new Error( 'The Google service returned an error: ' + body.error.message + ' (' + body.error.code + ')' ) );
    return;
    }

    resolve({ deletionRequestTime: body.deletionRequestTime });
    });
    });
    }

    这是一个示例请求正文:

    {
    kind: 'analytics#userDeletionRequest',
    id: {
    type: 'APP_INSTANCE_ID',
    userId: (REDACTED 32-char hexidecimal string)
    },
    firebaseProjectId: (REDACTED)
    }

    这是相同请求的控制台输出(相同的 userId 和所有内容):

    user-deletion POST complete
    Error: null
    Body: { kind: 'analytics#userDeletionRequest',
    id:
    { type: 'APP_INSTANCE_ID',
    userId: (REDACTED 32-char hexidecimal string) },
    firebaseProjectId: (REDACTED),
    deletionRequestTime: '2018-08-29T17:32:06.949Z' }

    最佳答案

    Firebase 支持刚刚回复我,我引用:

    Upsert method deletes any individual user data we have logged, but aggregate metrics are not recomputed. This means that you might not see any changes in the events tab in your Analytics console.



    所以,基本上我的错误是期望事件从控制台中消失。

    当然,这提出了一个问题,即如何确定 API 是否实际工作……但也许 HTTP 200 就足够了。

    关于google-analytics - 如何使用 userDeletionRequests :upsert? 从 Firebase 中删除用户分析数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52064698/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com