Не удалось получить push-уведомление в Android с помощью Parse

В консоли Parse он показывает отчет о доставке как успешный, но onPushReceive вообще не вызван. Что мне здесь не хватает? Любая помощь будет оценена по достоинству.

Ниже мой код. Код манифеста:

<receiver android:name="com.google.android.gms.gcm.GcmReceiver" android:permission="com.google.android.c2dm.permission.SEND"> <intent-filter> <action android:name="com.google.android.c2dm.intent.RECEIVE" /> <category android:name="com.appname" /> </intent-filter> </receiver> <service android:name="com.parse.PushService" /> <receiver android:name="com.appname.PushReceiver" android:permission="com.google.android.c2dm.permission.SEND" android:exported="false"> <intent-filter> <action android:name="com.parse.push.intent.RECEIVE" /> <action android:name="com.parse.push.intent.OPEN" /> <action android:name="com.parse.push.intent.DELETE" /> </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.appname" /> </intent-filter> </receiver> 

Класс PushReceiver:

 public class PushReceiver extends ParsePushBroadcastReceiver { @Override protected void onPushReceive(Context context, Intent intent) { super.onPushReceive(context, intent); Log.v("Push Receive called...", ""); if (intent == null) return; try { JSONObject json = new JSONObject(intent.getExtras().getString("com.parse.Data")); } catch (JSONException e) { e.printStackTrace(); } } } 

Solutions Collecting From Web of "Не удалось получить push-уведомление в Android с помощью Parse"

Добавить разрешение:

 <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE"/> 

Проверьте приемник:

 <receiver android:name="com.appname.PushReceiver" android:exported="false"> <intent-filter> <action android:name="com.appname.INTERCEPT"/> </intent-filter> </receiver> 

В дополнение к разрешениям

Есть несколько вещей, которые заставляют Parse неправильно отправлять push-уведомление. Parse не делает большой работы по детализации их, но из того, что я испытал с Parse, я могу попытаться пролить свет на вещи, которые не всегда так очевидны.

Если вы проверяете панель управления Parse и можете видеть свой регистратор устройства, это хорошо. Однако вам необходимо убедиться, что на этом устройстве зарегистрировано устройство Token. Если этого не произойдет, я могу почти гарантировать, что если вы проверите вкладку «Нажимаете», вы увидите, что уровень успеха этого нажатия был 0% или неудачным.

Убедитесь, что deviceToken зарегистрирован. Помимо простого инициализации Parse, убедитесь, что имя пакета вашего приложения совпадает с именем, которое вы используете для связи с вашим манифестом Android. Если это не так, это, безусловно, причина не получения толчков.

Интеллизирующий анализ

  private void initializeParse() { Parse.enableLocalDatastore(this); Parse.initialize(this); ParseInstallation.getCurrentInstallation().saveInBackground(); Log.d(LOG_TAG, "Initializing parse with app id: " + getString(R.string.parse_app_id) + " client_key: " + getString(R.string.parse_client_key)); } 

Прослушивание толчков

 public class ParsePluginReceiver extends ParsePushBroadcastReceiver { private static final String TAG = "ParsePluginReceiver"; private static final String RECEIVED_IN_FOREGROUND = "receivedInForeground"; private static int badgeCount = 0; public static final String FORWARD_EXTRA = "FORWARD_ACTIVITY"; @Override protected void onPushReceive(Context context, Intent intent) { JSONObject pushData = getPushData(intent); if (pushData != null) { Log.d(TAG, "JSON Payload: " + pushData.toString()); super.onPushReceive(context, intent); } } protected void onPushOpen(Context context, Intent intent) { JSONObject pushData = getPushData(intent); Log.d(TAG, "JSON Payload: " + pushData.toString()); if (pushData != null) { try { super.onPushOpen(context, intent); } catch (Exception ex) { } } } 

В качестве ссылки Parse Sdk находится здесь: https://parse.com/docs/android/guide

Параметр Side Note Parse должен быть устаревшим в начале следующего года.

Убедитесь, что у вас есть все разрешения:

  <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.WAKE_LOCK" /> <uses-permission android:name="android.permission.VIBRATE" /> <uses-permission android:name="android.permission.GET_ACCOUNTS" /> <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" /> <permission android:protectionLevel="signature" android:name="your_package_name.permission.C2D_MESSAGE" /> <uses-permission android:name="your_package_name.permission.C2D_MESSAGE" /> 

И вам нужно добавить все это в свой манифест:

 <service android:name="com.parse.PushService" /> <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" /> <category android:name="your_package_name" /> </intent-filter> </receiver> 

Просто подскажите, переходите к чему-то вроде Firebase. Разбор закрывается.

Вот разрешения, которые вы должны иметь в своем манифесте:

 <!-- Push Permissions --> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.WAKE_LOCK" /> <uses-permission android:name="android.permission.VIBRATE" /> <uses-permission android:name="android.permission.GET_ACCOUNTS" /> <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" /> <permission android:protectionLevel="signature" android:name="your_package_name.permission.C2D_MESSAGE" /> <uses-permission android:name="your_package_name.permission.C2D_MESSAGE" /> 

Вот еще один материал, который вы должны определить в своем манифесте:

 <service android:name="com.parse.PushService" /> <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" /> <category android:name="your_package_name" /> </intent-filter> </receiver> 

Грейд-зависимости:

 compile 'com.parse.bolts:bolts-android:1.+' compile 'com.parse:parse-android:1.+' 

С помощью этой конфигурации манифеста я могу успешно получать нажатия от синтаксиса.

Проверка объекта установки с помощью токена устройства. (Возможно, вы должны установить senderID)

Ниже кажется устаревшим. Теперь я не могу найти где-нибудь из parse docs. Попробуйте добавить следующие разрешения

 <uses-permission android:name="android.permission.WAKE_LOCK" /> <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" /> <permission android:name="com.appname.permission.C2D_MESSAGE" android:protectionLevel="signature" /> <uses-permission android:name="com.appname.permission.C2D_MESSAGE" /> 

Это необходимые разрешения для старой версии sdk (возможно, старше 1.10).

============== Новая деталь ====

Я нашел код образца push на github. https://github.com/ParsePlatform/PushTutorial/tree/master/Android

Ниже приведен проект, который использует 1.11.0 sdk (1.13.0 тоже может работать). https://dl.dropboxusercontent.com/u/82261293/Appname.zip

По моему опыту, некоторые устройства имеют шанс, что без токена устройства. Вы должны проверить, что оно было сохранено.

Парс будет полностью удален.

Я получил почту от разбора, что они уйдут на пенсию. Так почему вы делаете эти ошибки, срок действия которых истек. Попробуйте использовать gsm или сокет, который легче.