Android解析推送通知和新GCM生成错误的设备令牌,解析推送通知不起作用

Android解析推送通知和新GCM生成错误的设备令牌,解析推送通知不起作用,android,parse-platform,google-cloud-messaging,Android,Parse Platform,Google Cloud Messaging,简介:在解析安装表中,当我使用新的GCM API时,未正确添加设备令牌。 现在,以下类型的设备令牌添加到Parse安装表中 DeviceToken:| ID | 1 |:crGctxOB068:APA91bFgPRehabJcm9CYdS948iqX2_ppLj02CtbzmEHR0cfbuPooq5F——HQVR9AH-EZ6MWMQON1至2注射DPRC3NMM3UKIPWJ1JHAXQ0IUG6MOHBM9U0AK2CRKZNKPY5 详细说明: 我使用了新的GCM api来获取注册id

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

DeviceToken:| ID | 1 |:crGctxOB068:APA91bFgPRehabJcm9CYdS948iqX2_ppLj02CtbzmEHR0cfbuPooq5F——HQVR9AH-EZ6MWMQON1至2注射DPRC3NMM3UKIPWJ1JHAXQ0IUG6MOHBM9U0AK2CRKZNKPY5


详细说明

我使用了新的GCM api来获取注册id。 我需要那regId内服

我使用了谷歌以下链接的代码:

我注意到一点。当我启动应用程序解析时,让设备正常运行。登录后,我使用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();
            }
        }
    });
通常情况下,当上述代码运行deviceToken被更改为上述令牌时,这似乎是错误的。所以我的推送通知不起作用。

我已经解决了这个问题

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

 InstanceID instanceID = InstanceID.getInstance(getApplicationContext());
               String token = instanceID.getToken(CommonUtils.SENDER_ID,
                       GoogleCloudMessaging.INSTANCE_ID_SCOPE, null);
从该代码获取令牌后,parse的deviceToken发生了更改。 因此,我没有使用上面的代码,而是使用下面的代码让deviceToken启动,解决了这个问题

ParseInstallation.getCurrentInstallation().getString("deviceToken");

当我的应用程序第一次运行时,当我检查安装表的deviceToken字段时,它看起来正常,您如何验证deviceToken是否已更改并且错误。登录后,当我将“用户”保存到安装时,deviceToken字段将更改为上述令牌。注:有时它的工作也很好。