gre*_*e31 12 google-analytics google-analytics-api firebase-analytics
我的Android应用通过Google Analytics for Firebase收集数据.出于隐私原因,用户必须能够从Firebase服务器上擦除其数据,如果他们选择这样做的话.
该应用通过将其Firebase转发APP_INSTANCE_ID
到我自己的服务器来请求删除.此服务器已预先准备好我的个人Google帐户(通过oauth2)的凭据,用于管理Firebase项目.服务器使用www.googleapis.com
,并使用提供的身份验证APP_INSTANCE_ID
调用upsert.
如文档所述,通用Google AnalyticsAPI适用于此任务.
在一些初始问题(b/c我没有正确的auth范围,并且未正确启用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' }
Run Code Online (Sandbox Code Playgroud)
我知道这firebaseProjectId
是正确的,因为如果我改变它,我会收到错误.我已经验证了它APP_INSTANCE_ID
是正确的,并且一直稳定到重置之前resetAnalyticsData()
.
为了测试删除,我使用以下程序填充了Firebase的几个自定义事件(Nexus 5X模拟器,没有Google Play,没有配置Google帐户,但这不应该有任何区别):
FirebaseAnalytics.logEvent
)FirebaseAnalytics.resetAnalyticsData
(清除设备上缓存的任何事件数据)但是,即使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 });
});
});
}
Run Code Online (Sandbox Code Playgroud)
这是一个示例请求正文:
{
kind: 'analytics#userDeletionRequest',
id: {
type: 'APP_INSTANCE_ID',
userId: (REDACTED 32-char hexidecimal string)
},
firebaseProjectId: (REDACTED)
}
Run Code Online (Sandbox Code Playgroud)
这是同一个请求的控制台输出(相同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' }
Run Code Online (Sandbox Code Playgroud)
Firebase 支持刚刚回复我,我引用:
Upsert 方法会删除我们记录的任何单个用户数据,但不会重新计算聚合指标。这意味着您可能不会在 Analytics 控制台的事件选项卡中看到任何更改。
所以,基本上我的错误是期望事件从控制台中消失。
当然,这提出了一个问题:如何确定 API 是否真正工作……但也许 HTTP 200 就足够了。
归档时间: |
|
查看次数: |
964 次 |
最近记录: |