【发布时间】: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 帐户,但这应该没有任何区别):
- 安装应用程序
- 触发一些自定义事件 (
FirebaseAnalytics.logEvent) - 观察那些出现在 Firebase 控制台上的事件
- (大约一分钟后:)进行 upsert 调用,观察 HTTP 200,并注意“deletionRequestTime”
- 立即调用
FirebaseAnalytics.resetAnalyticsData(清除设备上缓存的所有事件数据) - 卸载应用程序
- 冲洗并重复 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