我已使用https://developers.google.com的指南在我的项目中实施了GCM。
我采取的步骤是:
用于接收设备令牌:
- >扩展GCMRegistrationIntentService
的类IntentService
,它是从我的mainActivity开始的。
- >在这项服务中我使用过:
InstanceID instanceID = InstanceID.getInstance(getApplicationContext());
token = instanceID.getToken(AppConstants.SENDER_ID, GoogleCloudMessaging.INSTANCE_ID_SCOPE, null);
我已成功收到令牌。
我的主要活动中的LocalBroadcastListener获取在步骤1中生成的令牌并将其存储在共享首选项中(也将其发送到我的消息服务器)。
类GCMTokenRefreshListenerService
扩展InstanceIDListenerService
以获取令牌,以防旧日期过期。
- >在此,我在GCMRegistrationIntentService
onTokenRefresh()
醇>
现在我的问题是:
我使用以下方式从终端运行服务:
./adb shell am startservice -a com.google.android.gms.iid.InstanceID --es "CMD" "RST" -n package.name/service.name.
每次给我新的令牌。如何在共享首选项中保存此新生成的令牌?
当我从此服务收到新令牌时,由于我的令牌已更改,因此我不会收到通知。我将不得不打开我的应用程序以更新令牌。如何更新此令牌?
答案 0 :(得分:3)
你不必打电话给GCMTokenRefreshListenerService
,只要你的令牌被刷新,它就会由android系统自动调用。
实例ID为您的应用实例提供唯一ID。您可以找到有关它的更多信息here。
首先,您不必运行您的服务,正如我之前所说,每次刷新令牌时都会自动调用它。要将令牌发送到您的服务器,您应该拨打单独的服务说RegistrationService
。要在SharedPreference
中保存令牌,您可以在收到令牌后从RegistrationService
执行此操作。
您的GcmListenerService
收到通知后,只有当您的服务器通过推送通知向您发送了一些数据时,才会调用此服务。每当您的令牌被更改/刷新时,您都会使用onTokenRefresh()
方法接听电话。您应该让服务器知道这个新令牌,以便使用RegistrationService
正确接收通知。而且,您无需打开应用即可获得刷新的令牌。
不,您不必打电话或启动推送通知所需的任何服务,您只需在清单中正确指定服务,所有操作都将由android系统处理