解析安装没有获取DeviceToken

时间:2015-07-16 13:58:05

标签: android parse-platform push-notification push android-notifications

我试图在android中使用解析推送通知,我在Application类中注册解析如下:

@Override
public void onCreate() {
    super.onCreate();
    Parse.initialize(this, "***************", "***************");
}

我在主要活动中订阅这样的推送:

@Override
    protected void onCreate(Bundle savedInstanceState) {

    ParsePush.subscribeInBackground("", new SaveCallback() {
        @Override
        public void done(ParseException e) {
            if (e == null) {

                        ParseInstallation.getCurrentInstallation().saveInBackground(new SaveCallback() {
                            @Override
                            public void done(ParseException e) {


                                if (e == null) {
                                    String deviceToken = (String) ParseInstallation.getCurrentInstallation().get("deviceToken");
                                    Log.e("MainActivity", "device toekn " + deviceToken);

                                } else {
                                    Log.e("MainActivity", "failed to subscribe for push " + e.getLocalizedMessage());
                                }
                            }
                        });

            } else {
                Log.e("MainActivity", "failed to subscribe for push", e);
            }
        }
    });



    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
}

这是我的清单部分,适用于解析:

  <service android:name="com.parse.PushService" />
    <receiver android:name="com.parse.ParseBroadcastReceiver">
        <intent-filter>
            <action android:name="android.intent.action.BOOT_COMPLETED" />
            <action android:name="android.intent.action.USER_PRESENT" />
        </intent-filter>
    </receiver>
    <receiver android:name="com.parse.ParsePushBroadcastReceiver"
        android:exported="false">
        <intent-filter>
            <action android:name="com.parse.push.intent.RECEIVE" />
            <action android:name="com.parse.push.intent.DELETE" />
            <action android:name="com.parse.push.intent.OPEN" />
        </intent-filter>
    </receiver>
    <receiver android:name="com.parse.GcmBroadcastReceiver"
        android:permission="com.google.android.c2dm.permission.SEND">
        <intent-filter>
            <action android:name="com.google.android.c2dm.intent.RECEIVE" />
            <action android:name="com.google.android.c2dm.intent.REGISTRATION" />

            <!--
              IMPORTANT: Change "com.parse.starter" to match your app's package name.
            -->
            <category android:name="com.****" />
        </intent-filter>
    </receiver>

但是,设备令牌大多数时间都返回null,并且设备在解析仪表板中没有设备令牌,因此,我的设备没有获得推送通知。

奇怪的是,有时它确实有效,我确实得到了deviceToken,安装对象确实得到了推动,有没有人遇到过这种行为?

5 个答案:

答案 0 :(得分:2)

这个问题最终得到解决,标签中清单标签中的应用程序名称出现了一个简单的错误。 因为我在这里发布的代码是“com。***”,没有人可以提供帮助,我道歉。

答案 1 :(得分:2)

我遇到了这个问题,我通过修改 AndroidManifest 文件解决了这个问题。

您似乎可以将解析配置为使用“解析推送网络”或 GCM(Google云端留言)

Parse将自己的推送网络用于希望避免依赖Google Play商店的应用,以及没有Play商店支持的设备(如Kindles)。 因此,将其他内容设置为使用GCM非常重要。

## hide .php extension
# To externally redirect /dir/foo.php to /dir/foo
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s([^.]+)\.php [NC]
RewriteRule ^ %1 [R,L,NC]

## To internally redirect /dir/foo to /dir/foo.php
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^ %{REQUEST_URI}.php [L]

将上述声明中的YOUR_PACKAGE_NAME替换为您的应用程序包名称。另外,请确保将com.parse.GcmBroadcastReceiver和com.parse.PushService声明为元素的子元素:

这对我有用,它可能对你有用。

Read this to get a full understanding

答案 2 :(得分:1)

我猜您使用的是1.9.3版本。在1.9.4版本中,他们已经解决了这个问题。检查release notes

答案 3 :(得分:1)

将解析日志记录设置为详细信息以帮助进一步调试可能很有用:

Parse.setLogLevel(Parse.LOG_LEVEL_VERBOSE);

我注意到我在清单中使用了错误的“sender_id”:

<meta-data android:name="com.parse.push.gcm_sender_id"
        android:value="id:123456789"/>

我正在使用我自己的GCM,你没有在这里做...但LOG_LEVEL_VERBOSE可能会帮助其他人调试它。

答案 4 :(得分:-1)

如果您没有添加任何内容,为什么要保存安装? ParseSDK已经为你做到了。

您必须传递有效的&#34;频道&#34;参数到subscribeInBackground: 这是解析用来推送的频道;如果没有它你就不会得到任何推动。 https://parse.com/docs/android/api/com/parse/ParsePush.html#subscribeInBackground(java.lang.String,%20com.parse.SaveCallback)

此外,请确保您已在清单中添加了所需的标记,以便解析推送工作正常 - 以及所需的内容,如下所示:

https://parse.com/docs/android/guide#push-notifications-receiving-pushes