Google analytics 如何使用userDeletionRequests:upsert从Firebase中删除用户分析数据? 问题描述
我的Android应用程序通过Google Analytics for Firebase收集数据。出于隐私原因,用户必须能够从Firebase服务器上擦除数据,如果他们选择这样做的话 该应用程序通过将其FirebaseGoogle analytics 如何使用userDeletionRequests:upsert从Firebase中删除用户分析数据? 问题描述,google-analytics,google-analytics-api,firebase-analytics,Google Analytics,Google Analytics Api,Firebase Analytics,我的Android应用程序通过Google Analytics for Firebase收集数据。出于隐私原因,用户必须能够从Firebase服务器上擦除数据,如果他们选择这样做的话 该应用程序通过将其Firebaseapp\u实例\u ID转发到我自己的服务器来请求删除。这个服务器已经提前准备好了凭据,来自我的个人Google帐户(通过oauth2),用于管理Firebase项目。服务器通过www.googleapis.com进行身份验证,并使用提供的APP\u INSTANCE\u ID,调
app\u实例\u ID
转发到我自己的服务器来请求删除。这个服务器已经提前准备好了凭据,来自我的个人Google帐户(通过oauth2),用于管理Firebase项目。服务器通过www.googleapis.com
进行身份验证,并使用提供的APP\u INSTANCE\u ID
,调用upsert
如前所述,通用Google Analytics API适用于此任务
在出现一些初始问题(b/c我没有正确的身份验证范围,并且分析API没有正确启用)之后,googleapis.com
现在为每个upsert请求返回HTTP 200。(顺便说一句,即使您提供了一个伪造的APP\u实例\u 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\u INSTANCE\u ID
是正确的,并且在使用resetAnalyticsData()
重置之前是稳定的
试验程序
为了测试删除,我使用以下过程(Nexus 5X emulator,没有Google Play,没有配置Google帐户,但这不会有任何区别),用几个自定义事件填充Firebase:
FirebaseAnalytics.logEvent
)FirebaseAnalytics.resetAnalyticsData
(清除设备上缓存的任何事件数据)const request=require('request');
...
_删除个人数据(数据)
{
返回新承诺((解决,拒绝)=>{
请求.post({
网址:'https://www.googleapis.com/analytics/v3/userDeletion/userDeletionRequests:upsert',
正文:{
种类:“分析#用户删除请求”,
id:{
键入:“应用程序\实例\ ID”,
userId:data.firebaseAppInstanceId
},
firebaseProjectId:(已编辑)
},
标题:{
授权:“持有者”+iap.getCurAccessToken()
},
json:true
},(err,res,body)=>{
log('user deletation POST complete');
console.log('Error'+err);
console.log('Body',Body);
如果(错误)
{
拒绝(错误);
返回;
}
if(body.error)
{
拒绝(新错误('谷歌服务返回错误:'+body.Error.message+'('+body.Error.code+')));
返回;
}
解析({deletionRequestTime:body.deletionRequestTime});
});
});
}
下面是一个请求主体示例:
{
种类:“分析#用户删除请求”,
身份证:{
键入:“应用程序\实例\ ID”,
userId:(已编辑的32字符十六进制字符串)
},
firebaseProjectId:(已编辑)
}
这里是针对相同请求的控制台输出(相同的userId
和所有内容):
用户删除帖子完成
错误:null
正文:{kind:'analytics#userDeletionRequest',
身份证件:
{类型:'APP_INSTANCE_ID',
userId:(已编辑的32字符十六进制字符串)},
firebaseProjectId:(已编辑),
删除请求时间:'2018-08-29T17:32:06.949Z'}
Firebase支持刚刚回复我,我引用:
Upsert方法删除我们记录的任何单个用户数据,但不会重新计算聚合度量。这意味着您可能在分析控制台的事件选项卡中看不到任何更改
所以,基本上我的错误是期望事件从控制台中消失
当然,这就提出了一个问题,即如何确定API实际上正在工作。。。但也许HTTP 200就足够了。这应该是有效的。您需要重新联系Firebase支持以获得更多帮助。还请通过颠覆API(FWIW)提供请求,我的经历与此类似-请求最终成功,但在发生任何事情之前花了很长时间(几天)。仅供参考,我目前正在等待Firebase支持部门的回复。并且,到目前为止未发现任何删除。请编辑您的问题并包括您提出的请求。我需要的不仅仅是回复。@DalmTo按要求编辑,如果我遗漏了什么,请告诉我