Push-уведомление с открытием Parse перед нажатием на уведомление

Так выглядит моя установка.

У LunchActivity есть код:

Parse.initialize(this, "MY_APP_ID", "MY_APP_KEY"); PushService.subscribe(this, "MyCity", HomeActivity.class); ParseInstallation.getCurrentInstallation().saveInBackground(); 

Класс HomeActivity – это простой класс активности, который открывает простой экран, используемый по умолчанию. Я также написал специальный приемник.

 public class CityPushReceiver extends BroadcastReceiver { private static final String TAG = "CityPushReceiver"; @Override public void onReceive(Context context, Intent intent) { try { JSONObject json = new JSONObject(intent.getExtras().getString( "com.parse.Data")); Integer event_id = Integer.parseInt((String) json.get("event_id")); Intent eventIntent = new Intent(context, EventResult.class); eventIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); eventIntent.putExtra("event_id", event_id); context.getApplicationContext().startActivity(eventIntent); } catch (JSONException e) { Log.d(TAG, "JSONException: " + e.getMessage()); } } } 

Файл манифеста имеет запись:

 <receiver android:name="com.myapp.CityPushReceiver" android:exported="false" > <intent-filter> <action android:name="com.myapp.CITY_NOTIFICATION" /> </intent-filter> </receiver> 

Я использую код Python для ввода уведомления:

 import json,httplib connection = httplib.HTTPSConnection('api.parse.com', 443) connection.connect() connection.request('POST', '/1/push', json.dumps({ "channels": [ "MyCity" ], "data": { "action": "com.myapp.CITY_NOTIFICATION", "alert": "New Event Notification", "event_id": "425" } }), { "X-Parse-Application-Id": "APP_ID", "X-Parse-REST-API-Key": "API_KEY", "Content-Type": "application/json" }) result = json.loads(connection.getresponse().read()) print result 

Эта настройка работает не так, как ожидалось. Я получаю уведомление на своем устройстве (я использую AVD для тестирования). Но он открывает ожидаемую активность EventResult даже если я не EventResult на уведомление в лотке. Это происходит, даже если я нахожусь на главном экране устройства, и приложение работает только в фоновом режиме. И когда я нажимаю на уведомление в лотке, он открывает класс HomeActivity который определяется как класс по умолчанию.

Ожидаемое поведение открывает EventResult только при нажатии на уведомление в лотке. Можете ли вы, ребята, сказать мне, что нужно изменить?

Я обнаружил, что контроль над созданием уведомлений был лучше всего на Android. Если вы не отправляете поле заголовка или предупреждения в push, то SDK parse.com android SDK не будет создавать уведомление, и вы можете создать его самостоятельно, когда произойдет нажатие.

Это был метод, который я использовал для создания уведомления:

 void CreateNotication(Context context, String title, String pushId) { PendingIntent contentIntent = PendingIntent.getActivity(context, 0, new Intent(context, MyClass.class), 0); NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(context) .setSmallIcon(R.drawable.icon) .setContentTitle(title) .setContentIntent(contentIntent); NotificationManager manager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); manager.notify(pushId, 1, mBuilder.build()); } 

Используйте следующее:

 public class Application extends android.app.Application { public Application() { } @Override public void onCreate() { super.onCreate(); Parse.initialize(this, "YOUR_APP_ID", "YOUR_CLIENT_KEY"); PushService.setDefaultPushCallback(this, MainActivity.class); } } 

//MainActivity.java – активность, которую нужно открыть при нажатии на уведомление.

В вашем файле манифеста добавьте это приложение.

 <application android:label="@string/app_name" android:name="com.parse.tutorials.pushnotifications.Application" android:theme="@style/AppTheme"> <activity android:label="@string/app_name" android:name="com.parse.tutorials.pushnotifications.MainActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> 

И добавьте эту строку в свой класс Activity, который нужно открыть, когда нажимается уведомление.

 ParseAnalytics.trackAppOpened(getIntent()); 

Ответ: LINK

Поэтому, честно говоря, все ответы, размещенные здесь, являются правильными в одном или другом сценарии, поэтому я, однако, буду рассматривать вещи в перспективе.

О моем конкретном вопросе, правильный способ взглянуть на это, если вы реализуете свой собственный широковещательный приемник, он будет вызываться всякий раз, когда вы получаете push и любой код внутри него, он будет выполнен. Чтобы убедиться, что вы видите уведомление, есть две важные вещи:

  1. Убедитесь, что вы используете оповещения при отправке push
  2. Или используйте приемник по умолчанию, предоставленный Parse. Т.е. в конфигурации просто скажите разбор, какую активность нужно вызвать, отправить push с предупреждением и позволить синтаксическому анализу обрабатывать остальную часть материала. Он покажет предупреждение, и он откроет конкретное действие, когда вы нажмете на предупреждение. Другой способ более сложный, и это – написать собственный приемник со всеми соображениями для предупреждения.

Многое зависит от того, как вы отправляете уведомление. Поэтому убедитесь, что предупреждения, данные, иногда действия указаны правильно.

Intereting Posts