解析安装未获取 DeviceToken
Parse Installation not getting DeviceToken
我正尝试在 android 中使用解析推送通知,我在应用程序 class 中注册解析,如下所示:
@Override
public void onCreate() {
super.onCreate();
Parse.initialize(this, "***************", "***************");
}
我正在主订阅这样推送activity:
@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>
然而,大多数时候设备令牌 returns 为空,并且设备在解析仪表板中没有设备令牌,因此,我的设备没有收到推送通知。
奇怪的是有时它确实有效,我确实获得了 deviceToken 并且安装对象确实获得了推送,有人遇到过这种行为吗?
如果不添加任何东西,为什么要保存安装? ParseSDK 已经为您做到了。
您必须将有效的 "channel" 参数传递给 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
我猜你使用的是 1.9.3 版本。在 1.9.4 版本中,他们已经解决了这个问题。检查 release notes。
这个问题最终解决了,只是tag中manifest的tag中的Application name有一个简单的错误。
由于我在此处发布的代码是 "com.***" 没有人可以提供帮助,我深表歉意。
我遇到了这个问题,我通过修改我的 AndroidManifest 文件解决了它。
您似乎可以将解析配置为使用“解析推送网络”或GCM(Google 云消息).
Parse 将自己的推送网络用于希望避免依赖 Google Play 商店的应用程序,以及不支持 Play 商店的设备(如 Kindle)。
因此,重要的是要在其他地方设置以下内容以使用 GCM。
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
<permission android:name="YOUR_PACKAGE_NAME.permission.C2D_MESSAGE"
android:protectionLevel="signature" />
<uses-permission android:name="YOUR_PACKAGE_NAME.permission.C2D_MESSAGE" />
将上面声明中的 YOUR_PACKAGE_NAME 替换为您的应用程序包名称。此外,确保 com.parse.GcmBroadcastReceiver 和 com.parse.PushService 被声明为元素的子元素:
这对我有用,也许对你也有用。
将解析日志记录设置为详细有助于进一步调试:
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 可能会帮助其他人调试它。
我正尝试在 android 中使用解析推送通知,我在应用程序 class 中注册解析,如下所示:
@Override
public void onCreate() {
super.onCreate();
Parse.initialize(this, "***************", "***************");
}
我正在主订阅这样推送activity:
@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>
然而,大多数时候设备令牌 returns 为空,并且设备在解析仪表板中没有设备令牌,因此,我的设备没有收到推送通知。
奇怪的是有时它确实有效,我确实获得了 deviceToken 并且安装对象确实获得了推送,有人遇到过这种行为吗?
如果不添加任何东西,为什么要保存安装? ParseSDK 已经为您做到了。
您必须将有效的 "channel" 参数传递给 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
我猜你使用的是 1.9.3 版本。在 1.9.4 版本中,他们已经解决了这个问题。检查 release notes。
这个问题最终解决了,只是tag中manifest的tag中的Application name有一个简单的错误。 由于我在此处发布的代码是 "com.***" 没有人可以提供帮助,我深表歉意。
我遇到了这个问题,我通过修改我的 AndroidManifest 文件解决了它。
您似乎可以将解析配置为使用“解析推送网络”或GCM(Google 云消息).
Parse 将自己的推送网络用于希望避免依赖 Google Play 商店的应用程序,以及不支持 Play 商店的设备(如 Kindle)。 因此,重要的是要在其他地方设置以下内容以使用 GCM。
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
<permission android:name="YOUR_PACKAGE_NAME.permission.C2D_MESSAGE"
android:protectionLevel="signature" />
<uses-permission android:name="YOUR_PACKAGE_NAME.permission.C2D_MESSAGE" />
将上面声明中的 YOUR_PACKAGE_NAME 替换为您的应用程序包名称。此外,确保 com.parse.GcmBroadcastReceiver 和 com.parse.PushService 被声明为元素的子元素:
这对我有用,也许对你也有用。
将解析日志记录设置为详细有助于进一步调试:
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 可能会帮助其他人调试它。