3

У меня есть приложение для Android с push-уведомлениями, настроенными с использованием Urban Airship. Уведомления работают нормально, пока мое приложение открыто, но мне нужно получать уведомления, когда мое приложение закрыто. Я огляделся, но не нашел того, что работает. Я почти уверен, что проблема в моем манифесте, так что вот оно.Уведомления не появляются, когда приложение закрыто.

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="za.co.foo.android.financials" 
    android:versionCode="1" 
    android:versionName="1.0" > 

    <uses-sdk android:minSdkVersion="11" /> 

    <uses-permission android:name="android.permission.INTERNET" /> 
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
    <uses-permission android:name="android.permission.WRITE_INTERNAL_STORAGE" /> 

    <!-- Permissions for Urban Airship --> 
    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/> <!-- Not sure if required for C2DM --> 
    <uses-permission android:name="android.permission.VIBRATE"/> 
    <uses-permission android:name="android.permission.BROADCAST_STICKY" /> 

    <!-- Only this application can receive the messages and registration result --> 
    <permission android:name="za.co.foo.android.financials.permission.C2D_MESSAGE" android:protectionLevel="signature" /> 
    <uses-permission android:name="za.co.foo.android.financials.permission.C2D_MESSAGE" /> 

    <!-- This app has permission to register and receive message --> 
    <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" /> 

    <application 
     android:icon="@drawable/icon" 
     android:label="@string/app_name" > 
     <activity 
      android:name=".InvestorRelations" 
      android:label="@string/app_name" 
      android:screenOrientation="landscape" 
      android:theme="@android:style/Theme.Holo.NoActionBar"> 

      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 
       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 

     <!-- For Urban Airship --> 
     <receiver android:name="com.urbanairship.CoreReceiver"> 
     </receiver> 

     <receiver android:name="com.urbanairship.push.c2dm.C2DMPushReceiver" 
       android:permission="com.google.android.c2dm.permission.SEND" 
       android:enabled="true"> 
      <!-- Receive the actual message --> 
      <intent-filter> 
       <action android:name="com.google.android.c2dm.intent.RECEIVE" /> 
       <category android:name="za.co.foo.android.financials" /> 
      </intent-filter> 
      <!-- Receive the registration id --> 
      <intent-filter> 
       <action android:name="com.google.android.c2dm.intent.REGISTRATION" /> 
       <category android:name="za.co.foo.android.financials" /> 
      </intent-filter> 
     </receiver> 

     <receiver android:name="za.co.foo.android.financials.IntentReceiver" /> 

     <service android:name="com.urbanairship.push.PushService" /> 

    </application> 

</manifest> 

Вот мой IntentReceiver

public class IntentReceiver extends BroadcastReceiver { 

    private static final String logTag = "IR Intent Receiver"; 

    @Override 
     public void onReceive(Context context, Intent intent) { 
     Log.i(logTag, "Received intent: " + intent.toString()); 
     String action = intent.getAction(); 

     if (action.equals(PushManager.ACTION_PUSH_RECEIVED)) { 
      int id = intent.getIntExtra(PushManager.EXTRA_NOTIFICATION_ID, 0); 

      Log.i(logTag, "Received push notification. Alert: " 
        + intent.getStringExtra(PushManager.EXTRA_ALERT) 
        + " [NotificationID="+id+"]"); 

      logPushExtras(intent); 

     } else if (action.equals(PushManager.ACTION_NOTIFICATION_OPENED)) { 
      Log.i(logTag, "User clicked notification. Message: " + intent.getStringExtra(PushManager.EXTRA_ALERT)); 

      logPushExtras(intent); 

      Intent launch = new Intent(Intent.ACTION_MAIN); 
      launch.setClass(UAirship.shared().getApplicationContext(), InvestorRelations.class); 
      launch.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
      launch.putExtra("FromNotification", true); 

      UAirship.shared().getApplicationContext().startActivity(launch); 

     } else if (action.equals(PushManager.ACTION_REGISTRATION_FINISHED)) { 
      Log.i(logTag, "Registration complete. APID:" + intent.getStringExtra(PushManager.EXTRA_APID) 
        + ". Valid: " + intent.getBooleanExtra(PushManager.EXTRA_REGISTRATION_VALID, false)); 
     } 

    } 

    public void logPushExtras(intent) { 
     //Does some logging stuff 
    } 
} 

Любая помощь будет большим

Редактировать

В комплекте весь манифест только мое название компании изменено на "Foo".

Редактировать

Как оказалось, мое приложение делает получение уведомлений в закрытом состоянии, но не после того, как сила-близко. Реализовано после прочтения this вопрос.

+0

Когда вы получаете push-сообщение, когда ваше приложение неактивно, как вы хотите показать свое уведомление? Вы хотите использовать уведомление по Android (строка состояния)? – Shrikant

+0

Да. В настоящий момент на панели уведомлений отображается push-сообщение. Я просто хочу, чтобы он выполнял то же самое, когда мое приложение не было открыто –

+0

Вы получаете их, когда они активны? (эй. push-сообщения доставляются)? –

ответ

2

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

Я думаю, что фактическая проблема - это нечто вроде того, что BroadcastReceiver убивается, когда приложение закрыто, но я не уверен.

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

1

Ваш пакет проектов действительно называется «mypackage»? и т. д. в этом пакете? Потому что похоже, что все «myPackage» должны быть переработаны с помощью «com.urbanairship»

+0

Нет, это не так называется «myPackage». То есть удалить конфиденциальную информацию из вопроса. Из этого урока: https://docs.urbanairship.com/display/DOCS/Getting+Started%3A+Android%3A+C2DM+Push Я заменил все «com.urbanairship.push.sample» своим именем пакета как это, кажется, то, что требуется –

+0

Ну, если вы думаете, что ваш packagename действительно чувствителен к теме, то я боюсь, что не могу вам помочь. Так как я не могу найти головы или хвосты в вашем XML-файле, так как некоторые вещи называются «com.urbanairship» и некоторые «mypackage», как я могу узнать, какой из них набрал неверный код и что правильно? и как знать, что они действительно соответствуют вашему пакету. Я много разбираюсь с этим в c2dm, и это очень большая проблема. –

+0

Отредактировал вопрос, чтобы включить весь манифест и скрыть меньше информации о пакете –

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