我试图在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,安装对象确实得到了推动,有没有人遇到过这种行为?
答案 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声明为元素的子元素:
这对我有用,它可能对你有用。
答案 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