gcmquickstart教程在每个应用启动时启动RegistrationServiceIntent,是否正确执行此操作并在每次运行时向InstanceID请求令牌(即使它是相同的)?如果是的话:有人可以解释原因吗?我不明白为什么有必要。
(初步问题:GCM token refresh and when to send the token to server)
答案 0 :(得分:0)
我有完全相同的问题,我在他们的github存储库上打开了一个问题,找到一个更正式的答案:https://github.com/googlesamples/google-services/issues/256
与此同时,我将我的令牌存储在SharedPreferences中,并且仅在此令牌不存在时才启动服务。一切都按预期工作。
public class MainActivity extends BaseActivity
@Override
protected void onCreate(Bundle savedInstanceState) {
if (sharedPreferences.getString(Constants.GCM_TOKEN, "").equals("")) {
// Start IntentService to register this application with GCM.
Intent intent = new Intent(this, RegistrationIntentService.class);
startService(intent);
}
}
请记住将令牌存储在RegistrationIntentService
sharedPreferences.edit().putString(Constants.GCM_TOKEN, token).apply();
答案 1 :(得分:-1)
您必须将GCM连接状态存储在例如共享首选项中。您的应用程序午餐时,您可以检查状态并采取相应措施。例如:
boolean sentToken = sp.getBoolean(Extras.SENT_TOKEN_TO_SERVER, false);
if (!sentToken) {
Intent intent = new Intent(getActivity(), RegistrationIntentService.class);
getActivity().startService(intent);
}
上面你会看到我正在检查该应用程序是否已启动该服务一次。
您可以在服务中存储sentToken状态。