【问题标题】:How do I delete user analytics data from Firebase using userDeletionRequests:upsert?如何使用 userDeletionRequests:upsert 从 Firebase 中删除用户分析数据?
【发布时间】:2018-08-28 19:03:55
【问题描述】:

问题描述

我的 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() 重置之前稳定。

测试程序

为了测试删除,我使用以下过程填充了几个自定义事件(Nexus 5X 模拟器、未配置 Google Play、未配置 Google 帐户,但这应该没有任何区别):

  1. 安装应用程序
  2. 触发一些自定义事件 (FirebaseAnalytics.logEvent)
  3. 观察那些出现在 Firebase 控制台上的事件
  4. (大约一分钟后:)进行 upsert 调用,观察 HTTP 200,并注意“deletionRequestTime”
  5. 立即调用FirebaseAnalytics.resetAnalyticsData(清除设备上缓存的所有事件数据)
  6. 卸载应用程序
  7. 冲洗并重复 7 或 8 次

但是,即使 24 小时后,100% 的 Firebase 事件仍然存在于事件表中。由于 upsert,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 支持以获取更多帮助。也请通过不满意的 API 提供请求 - firebase.google.com/support/contact/?category=troubleshooting
  • FWIW,我的经历是相似的 - 请求最终奏效了,但是在发生任何事情之前花了很多时间(几天)。
  • 仅供参考,我目前正在等待 Firebase 支持的回复。而且,迄今为止没有发现任何缺失。
  • 请编辑您的问题并包含您提出的请求。我需要的不仅仅是回应。
  • @DalmTo 已按要求编辑,如有遗漏请告诉我

标签: google-analytics google-analytics-api firebase-analytics


【解决方案1】:

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

Upsert 方法会删除我们记录的任何个人用户数据,但不会重新计算聚合指标。这意味着您可能不会在分析控制台的事件选项卡中看到任何更改。

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-09-23
    • 2019-12-28
    • 1970-01-01
    • 1970-01-01
    • 2020-01-17
    • 2019-10-19
    • 1970-01-01
    相关资源
    最近更新 更多