Не установлен приемник Urban AirShip

Я получаю push-сообщения, но всякий раз, когда я нажимаю на них внутри панели уведомлений, этот логарифм появляется, и уведомление исчезает …

Это мой вывод logcat:

05-31 16:49:47.165: D/Test - UALib(20523): No intent receiver set, not sending ACTION_NOTIFICATION_OPENED 

Вот моя явная структура:

  <category android:name="com.test.push" /> </intent-filter> </receiver> <service android:name="com.urbanairship.push.PushService" android:label="Push Notification Service" /> <service android:name="com.urbanairship.push.PushWorkerService" android:label="Push Notification Worker Service" /> <service android:name="com.urbanairship.analytics.EventService" android:label="Event Service" /> <provider android:name="com.urbanairship.UrbanAirshipProvider" android:authorities="com.test.push.urbanairship.provider" android:exported="false" android:multiprocess="true" /> <activity android:name="com.test.push.MainActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name="com.test.push.SettingsActivity" android:label="@string/title_activity_settings" /> <activity android:name="com.test.push.ChooseClass" android:label="@string/app_name" /> </application> 

Это мой MyApplication.java:

 public class MyApplication extends Application { @Override public void onCreate() { AirshipConfigOptions options = AirshipConfigOptions .loadDefaultOptions(this); options.developmentAppKey = "1234567890"; options.developmentAppSecret = "1234567890"; options.productionAppKey = ""; options.productionAppSecret = ""; options.gcmSender = "1234567890"; options.transport = "gcm"; options.inProduction = false; UAirship.takeOff(this, options); PushManager.enablePush(); } } 

И это мой IntentReceiver.java:

 public class IntentReceiver extends BroadcastReceiver { @Override public void onReceive(Context aContext, Intent aIntent) { String action = aIntent.getAction(); if (action.equals(PushManager.ACTION_PUSH_RECEIVED)) { logPushExtras(aIntent); } else if (action.equals(PushManager.ACTION_NOTIFICATION_OPENED)) { logPushExtras(aIntent); Intent launch = new Intent(Intent.ACTION_MAIN); launch.setClass(UAirship.shared().getApplicationContext(), MainActivity.class); launch.putExtra("push_message", aIntent.getStringExtra(PushManager.EXTRA_ALERT)); launch.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); UAirship.shared().getApplicationContext().startActivity(launch); } else if (action.equals(PushManager.ACTION_REGISTRATION_FINISHED)) { Logger.info("device registrated, APID=" + aIntent.getStringExtra(PushManager.EXTRA_APID) + ", valid=" + aIntent.getBooleanExtra( PushManager.EXTRA_REGISTRATION_VALID, false)); } } private void logPushExtras(Intent intent) { Set<String> keys = intent.getExtras().keySet(); for (String key : keys) { List<String> ignoredKeys = (List<String>) Arrays.asList( "collapse_key", "from", PushManager.EXTRA_NOTIFICATION_ID, PushManager.EXTRA_PUSH_ID, PushManager.EXTRA_ALERT); if (ignoredKeys.contains(key)) { continue; } } } } 

Проблема заключалась в том, что в моем файле MyApplication.java отсутствовала следующая строка:

  PushManager.shared().setIntentReceiver(IntentReceiver.class); 

Все остальное было правильным. Теперь он работает отлично.

И мне не хватало указать атрибут android:name в моем файле манифеста –

 <application android:allowBackup="true" android:icon="@drawable/app_icon" android:label="@string/app_name" android:theme="@style/AppTheme" android:allowClearUserData="true" android:enabled="true" android:name=".MyMainApplication"> <activity> Some Activity </activity> </application>