2015-04-16 2 views
2

Я расширяю BaseIntentReceiver в новый класс PushIntentReceiver, предназначенный для выполнения различных действий от пар ключ/значение в объектах push-уведомлений.Android Urban Airship 6.0.1, не способный перехватывать действия push-уведомления

Хотя мои push-уведомления отображаются правильно, PushIntentReceiver никогда не вызывается. Поэтому щелчок на уведомлении, кажется, ничего не делает. Каждый метод имеет внутри него лог-тег, такой как

@Override 
protected void onBackgroundPushReceived(Context context, PushMessage message) { 
    Log.i(TAG, "Received background push message: " + message); 
} 

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

Почему это? Я включил соответствующие части моего AndroidManifest. Предыдущей версией UrbanAirship, которая была в этом приложении, была версия, в которой Amazon UA ​​была разделена с Android UA, когда вы, ребята, впервые создали Amazon UA. Поэтому я не знаю, был ли это Android UA 5.0 или 4.x, но мой перехват Push Notification через BroadcastReceivers действительно работал в этой старой версии библиотеки. Теперь все было реорганизовано в пути UA 5.1.x +, и я не могу заставить его работать.

Insight оценил

Это соответствующая часть моей AndroidManifest.xml

<!-- REQUIRED for Urban Airship --> 
    <service 
     android:name="com.urbanairship.push.PushService" 
     android:label="Push Notification Service" /> 

    <!-- Required for analytics --> 
    <service 
     android:name="com.urbanairship.analytics.EventService" 
     android:label="Event Service" /> 

    <!-- Required for Actions --> 
    <service android:name="com.urbanairship.actions.ActionService" /> 

    <!-- Required for Rich Push --> 
    <service android:name="com.urbanairship.richpush.RichPushUpdateService" /> 

    <!-- OPTIONAL for Urban Airship Location (for segments support) --> 
    <service 
     android:name="com.urbanairship.location.LocationService" 
     android:label="Segments Service" /> 

    <!-- This is required for persisting preferences related to push and location --> 
    <!-- MODIFICATION REQUIRED - Replace PACKAGE_NAME with your package name --> 
    <provider 
     android:name="com.urbanairship.UrbanAirshipProvider" 
     android:authorities="com.myapp.app.urbanairship.provider" 
     android:exported="true" 
     android:multiprocess="true" 
     android:permission="com.myapp.app.permission.UA_DATA" /> 

    <!-- OPTIONAL, if you want to receive push, push opened and registration completed intents --> 
    <!-- Replace the receiver below with your package and class name --> 
    <receiver 
     android:name="com.myapp.app.controllers.push.PushIntentReceiver" 
     android:exported="false"> 

     <intent-filter> 
      <action android:name="com.urbanairship.push.CHANNEL_UPDATED" /> 
      <action android:name="com.urbanairship.push.OPENED" /> 
      <action android:name="com.urbanairship.push.RECEIVED" /> 
      <action android:name="com.urbanairship.push.DISMISSED" /> 


      <category android:name="com.myapp.app" /> 
     </intent-filter> 
    </receiver> 

<receiver android:name="com.urbanairship.CoreReceiver" 
     android:exported="false"> 

     <intent-filter android:priority="-999"> 
      <action android:name="com.urbanairship.push.OPENED" /> 

      <!-- MODIFICATION REQUIRED - Use your package name as the category --> 
      <category android:name="com.myapp.app" /> 
     </intent-filter> 
    </receiver> 



    <!-- REQUIRED for PlayServiceUtils.handleAnyPlayServicesError to handle Google Play Services recoverable errors. --> 
    <activity 
     android:name="com.urbanairship.google.PlayServicesErrorActivity" 
     android:theme="@android:style/Theme.Translucent.NoTitleBar" /> 

    <!-- REQUIRED for GCM --> 
    <receiver 
     android:name="com.urbanairship.push.GCMPushReceiver" 
     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" /> 

      <!-- MODIFICATION REQUIRED - Use your package name as the category --> 
      <category android:name="com.myapp.app" /> 
     </intent-filter> 
    </receiver> 
    <!-- end Urban Airship tags --> 
+0

Все, кажется, для того, чтобы вы в курсе. Мне может потребоваться увидеть ваш PushIntentReceiver, полный манифест и, возможно, файл build.gradle, чтобы выяснить, что происходит не так. Вы можете отправить их на адрес [email protected], если хотите сохранить их конфиденциальными. Одна вещь, с которой я сталкиваюсь, - это переопределить onReceive, не обращаясь к реализации супер в PushIntentReceiver. Возможно, проверьте это. – ralepinski

+0

@ralepinski Я отправил это точное сообщение на [email protected] два дня назад – CQM

+0

@ralepinski Я не переопределяю onReceive вообще, это также не делается в примерах приложений для городского дирижабля https://github.com/urbanairship /android-samples/blob/master/RichPushSample/src/com/urbanairship/richpush/sample/PushReceiver.java – CQM

ответ

2

Проблемы, как это обычно происходит, когда намерение приемника расширяет базовый пристальный приемник, но переопределяет OnReceive без вызова до супер, пакет имя перепутано для категории, или приложение не объявляет и не использует разрешение «PACKAGE_NAME.UA_DATA». SDK теперь автоматически запускает активность запуска приложения по умолчанию, но если эта часть не работает, вам, скорее всего, нужно будет объявить разрешение.

В манифеста разделе AndroidManifest.xml добавить:

<permission android:name="com.myapp.app.permission.UA_DATA" android:protectionLevel="signature" /> 
<uses-permission android:name="com.myapp.app.permission.UA_DATA" /> 
+0

Хм, я не имею 'ProtectionLevel = "подпись"' ' – CQM

+0

<поставщик андроид: имя = "com.urbanairship.UrbanAirshipProvider" андроида: власти = "com.myapp.app.urbanairship.provider" андроид: exported = "true" android: multiprocess = "true" android: permission = "com.myapp.app.permission.UA_DATA" /> ' – CQM

+0

и это провайдер, я вижу, да, у меня не было этих тегов – CQM

Смежные вопросы