Android 解析推送通知无效 - "Outdated device"
Android Parse Push Notification not working - "Outdated device"
完成本教程后:
https://parse.com/apps/quickstart#parse_push/android/native/existing
还有这个:
http://www.androidhive.info/2015/06/android-push-notifications-using-parse-com/
阅读了 Whosebug 上的所有相关问题,我仍然不明白为什么 Parse 告诉我设备都已过时。
这是清单:
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.VIBRATE" />
<uses-feature android:name="android.hardware.camera" />
<uses-permission android:name="android.permission.FLASHLIGHT"/>
<uses-feature android:name="android.hardware.camera.flash" android:required="false" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.GET_TASKS"/>
<permission android:protectionLevel="signature"
android:name="com.myPackage.myApp.C2D_MESSAGE" />
<uses-permission android:name="com.myPackage.myApp.C2D_MESSAGE" />
...
<service android:name="com.parse.PushService"/>
<receiver android:name=".Receiver.CustomPushReceiver"
android:exported="false">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
<action android:name="android.intent.action.USER_PRESENT" />
<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"/>
<category android:name="com.myPackage.myApp"/>
</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>
<meta-data android:name="com.parse.push.gcm_sender_id"
android:value="id:myAppAndroidUser" />
应用程序如下所示:
// Parse config
Parse.enableLocalDatastore(this);
ParseCrashReporting.enable(this);
Parse.initialize(this, "[app key]", "[client key]");
ParseFacebookUtils.initialize(this);
ParseInstallation parseInstallation = ParseInstallation.getCurrentInstallation();
ArrayList<String> channels = new ArrayList<>();
channels.add("global");
PushService.setDefaultPushCallback(getApplicationContext(), MainActivity.class);
ParsePush.subscribeInBackground("", new SaveCallback() {
@Override
public void done(ParseException e) {
Log.d("Application", "Subscribed to ParsePush");
}
});
parseInstallation.put("channels", channels);
parseInstallation.saveInBackground();
我正在使用 Lollipop 和 Parse 1.9.3
我什至看到了日志语句 "Subscribed to ParsePush," 所以我一定很接近...
好的,我想我终于弄明白了,因为我收到了来自 Parse 的成功通过的通知(终于!)
我用这个替换了自定义接收器(这是其中一个教程的一部分):
<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>
不完全确定为什么会起作用,但我认为这就是它的作用。
完成本教程后: https://parse.com/apps/quickstart#parse_push/android/native/existing
还有这个: http://www.androidhive.info/2015/06/android-push-notifications-using-parse-com/
阅读了 Whosebug 上的所有相关问题,我仍然不明白为什么 Parse 告诉我设备都已过时。
这是清单:
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.VIBRATE" />
<uses-feature android:name="android.hardware.camera" />
<uses-permission android:name="android.permission.FLASHLIGHT"/>
<uses-feature android:name="android.hardware.camera.flash" android:required="false" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.GET_TASKS"/>
<permission android:protectionLevel="signature"
android:name="com.myPackage.myApp.C2D_MESSAGE" />
<uses-permission android:name="com.myPackage.myApp.C2D_MESSAGE" />
...
<service android:name="com.parse.PushService"/>
<receiver android:name=".Receiver.CustomPushReceiver"
android:exported="false">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
<action android:name="android.intent.action.USER_PRESENT" />
<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"/>
<category android:name="com.myPackage.myApp"/>
</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>
<meta-data android:name="com.parse.push.gcm_sender_id"
android:value="id:myAppAndroidUser" />
应用程序如下所示:
// Parse config
Parse.enableLocalDatastore(this);
ParseCrashReporting.enable(this);
Parse.initialize(this, "[app key]", "[client key]");
ParseFacebookUtils.initialize(this);
ParseInstallation parseInstallation = ParseInstallation.getCurrentInstallation();
ArrayList<String> channels = new ArrayList<>();
channels.add("global");
PushService.setDefaultPushCallback(getApplicationContext(), MainActivity.class);
ParsePush.subscribeInBackground("", new SaveCallback() {
@Override
public void done(ParseException e) {
Log.d("Application", "Subscribed to ParsePush");
}
});
parseInstallation.put("channels", channels);
parseInstallation.saveInBackground();
我正在使用 Lollipop 和 Parse 1.9.3
我什至看到了日志语句 "Subscribed to ParsePush," 所以我一定很接近...
好的,我想我终于弄明白了,因为我收到了来自 Parse 的成功通过的通知(终于!) 我用这个替换了自定义接收器(这是其中一个教程的一部分):
<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>
不完全确定为什么会起作用,但我认为这就是它的作用。