gpt4 book ai didi

android - GCM token 什么时候到期,InstanceID 是什么?

转载 作者:IT老高 更新时间:2023-10-28 22:14:25 25 4
gpt4 key购买 nike

由于 GCM 不断更新,我搜索过的大部分资源似乎都已过时或不清楚。基本上,我对 token 和 ID 何时到期感到困惑。 (作为引用,我正在使用 Android。)

据我了解(如果我错了,请纠正我),我的服务器有一个 API key 和一个发件人 ID。使用发件人 ID,我可以让我的客户通过本地存储在我的客户端上的 InstanceID 请求 token 。我已经有点困惑了。 InstanceID 是在我的应用上线时分配的?它会改变吗?当应用程序升级或卸载并重新安装(或设备恢复)时怎么办?通过调用 InstanceID.getInstance,我将始终检索相同的 InstanceID,还是它最终会过期并给我一个新的?通过调用 getID() 存储您检索的字符串是否有任何值(value)?文档似乎表明您在调用 getID() 时实际上检索了一个新的 InstanceID,因此这使事情变得更加复杂。 (仅供引用,我指的是:https://developers.google.com/instance-id/)

使用 InstanceID,我的客户端可以从 GCM 服务器请求 token ,然后将其发送到我的应用服务器。我的应用服务器存储了这个 Token,并可以使用它向 GCM 服务器发送消息,然后 GCM 服务器将消息发送到设备。我相信,设备使用存储的 InstanceID 来实际接收这些消息。那么拥有一个扩展 GcmListenerService 的类将允许我使用 onMessageReceived 接收这些消息吗?我不需要做任何特别的事情(除了在 AndroidManifest 中定义它)?我不必实际告诉它使用 InstanceID?它只是神奇地知道?

这些 ID 和 token 什么时候到期?它们会过期吗?我将 token 作为字符串存储在服务器上,但如果其中任何一个过期,我怎么知道它们已经过期?我总是可以生成一个新的 InstanceID 和 Token,这看起来很容易,但是旧的是否保持 Activity 状态?如何从服务器上删除旧 token ?似乎有一种简单的方法可以在 iOS 端使用 APNS 执行此操作,您可以在其中检索所有过期 token 的列表,然后将它们从数据库中删除。

最佳答案

当我更新我的 GCM 实现时,我发现自己问了大部分这些问题。在搞砸了几天之后,这是我对您的问题的看法。

From what I understand (and please correct me if I'm wrong), my server has an API Key and a Sender ID. Using the Sender ID I can have my client request a Token via the InstanceID stored locally on my client.

这是正确的。

The InstanceID is assigned the moment my app goes online?

它似乎是在您的应用启动后立即分配的,即使设备无法访问互联网。

Does it ever change? What about when the app upgrades or is uninstalled and reinstalled (or the device is restored)? By calling InstanceID.getInstance will I always retrieve the same InstanceID, or will it eventually expire and give me a new one?

根据InstanceID documentation :

Instance ID is stable but may become invalid, if:

  • App deletes Instance ID
  • Device is factory reset
  • User uninstalls the app
  • User clears app data

If Instance ID has become invalid, the app can call getId() to request a new Instance ID.

我已经测试了卸载应用并清除数据,结果表明以上所有内容都是正确的。

Is there any value to storing the string you retrieve by calling getID()?

看起来 API 会为您将其存储在应用的本地存储中。

Using the InstanceID, my client can request a Token from the GCM servers, which it then sends to my app server. My app server stores this Token, and can use this to send messages to the GCM servers, which will then send the message to the device. The device uses the stored InstanceID to actually receive these messages, I believe. So having a class that extends GcmListenerService will allow me to receive these messages with onMessageReceived? I don't have to do anything special (other than defining it in the AndroidManifest)? I don't have to actually tell it to use the InstanceID? It just magically knows?

据我所知,在之前的实现中没有任何类型的 InstanceId,而且它看起来也没有在这个实现中明确使用。如果是,它会在 GcmReceiver 中被调用。或 GcmListenerService .

When do these ID's and Tokens expire? Do they expire?

我已经解决了 ID 的过期问题,我们可以在 Android InstanceID implementation guide 中找到有关 token 过期的信息。 :

The Instance ID service initiates callbacks periodically (for example, every 6 months), requesting that your app refreshes its tokens. It may also initiate callbacks when:

  • There are security issues; for example, SSL or platform issues.
  • Device information is no longer valid; for example, backup and restore.
  • The Instance ID service is otherwise affected.

指南说子类InstanceIDListenerService并覆盖 onTokenRefresh() 来处理这些场景。

I store the Token as a string on the server, but if at any point one of these expires, how do I know they have expired?

guide for implementing GCM on your server表示 GCM 服务器将向您的服务器响应一些有关您用于尝试发送推送通知的 token 的信息。

I can always generate a new InstanceID and Token, that much seems easy, but then do the old ones stay active?

我的测试表明是的,确实如此。

How do I wipe the old tokens from the server? There seems to be an easy way to do this with APNS on the iOS side of things, where you can retrieve a list of all the expired tokens and just wipe them from your database.

我仍在研究这个问题,如果我能解决问题,我会更新。

关于android - GCM token 什么时候到期,InstanceID 是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31061354/

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