Android解析推送通知和新GCM生成错误的设备令牌并解析推送通知无法正常工作

Kal*_*hel 6 android parse-platform google-cloud-messaging

简介:在解析安装表中,当我使用新的GCM API时,设备令牌未正确添加.现在跟随添加到Parse安装表中的设备令牌类型.

DeviceToken:| ID | 1 |:crGctxOB068:APA91bFgPRehabJcm9CYdS948iqX2_ppLj02CtbzmEHR0cfbuPooq5F - hqqvR9AH-Ez6MWMQON1Toc2DiNJTNdpRc3nmm3ukIpWJ1jHaXq0Iug6MoHbmKb9U0ak2CrKznkpKnPY5_Jp


详细说明:

我使用新的GCM api获取注册ID.我需要那个内部使用的regId.

我使用了谷歌的以下链接代码:谷歌云消息安卓.

我注意到了一点.什么时候我开始应用解析正确获取deviceToken.登录后,我使用mainActivity的onCreate中的以下代码更新"user"字段

 ParseACL acl = new ParseACL();
 acl.setPublicReadAccess(true);
 acl.setPublicWriteAccess(true);

 ParseInstallation installation =     ParseInstallation.getCurrentInstallation();
    installation.setACL(acl);

    if (ParseUser.getCurrentUser() != null) {
        installation.put("user", ParseUser.getCurrentUser());
    }
 installation.saveInBackground(new SaveCallback() {
        @Override
        public void done(ParseException e) {
            if (e == null) {
                Log.e("installation", "success");
                Log.i("parse", "token after save : " + ParseInstallation.getCurrentInstallation().getString("deviceToken"));
                ParsePush.subscribeInBackground("", new SaveCallback() {

                    @Override
                    public void done(ParseException e) {

                        if (e != null) {

                            Log.e("error: ", e.getLocalizedMessage());
                            e.printStackTrace();
                        } else {

                            Log.e("subscribed: ", "to broadcast channel");
                            Log.i("parse", "token after subscribe : " + ParseInstallation.getCurrentInstallation().getString("deviceToken"));
                        }
                    }
                });

            } else {
                Log.e("installation", "failed");
                e.printStackTrace();
            }
        }
    });
Run Code Online (Sandbox Code Playgroud)

通常当上面的代码运行时,deviceToken被改为上面提到的令牌似乎是错误的.所以我的推送通知不起作用.

Kal*_*hel 1

我已经解决了问题。

我需要将 GCM 设备令牌传递给其他 Web 服务,因此我使用以下代码从 GCM 获取令牌。

 InstanceID instanceID = InstanceID.getInstance(getApplicationContext());
               String token = instanceID.getToken(CommonUtils.SENDER_ID,
                       GoogleCloudMessaging.INSTANCE_ID_SCOPE, null);
Run Code Online (Sandbox Code Playgroud)

从此代码中获取令牌后,解析的 deviceToken 发生了变化。因此,我没有使用上面的代码,而是使用下面的代码来获取 deviceToken,它解决了问题。

ParseInstallation.getCurrentInstallation().getString("deviceToken");
Run Code Online (Sandbox Code Playgroud)