每个应用启动时GCM RegistrationIntentService getToken?

时间:2016-02-15 09:42:02

标签: android google-cloud-messaging

gcmquickstart教程在每个应用启动时启动RegistrationServiceIntent,是否正确执行此操作并在每次运行时向InstanceID请求令牌(即使它是相同的)?如果是的话:有人可以解释原因吗?我不明白为什么有必要。

(初步问题:GCM token refresh and when to send the token to server

2 个答案:

答案 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状态。