Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

No intent receiver set Urban AirShip

I do receive the push messages but whenever I click on them inside the notificationbar this logcat appears and the notification dissapears...

This is my logcat output:

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

Here is my manifest structure:

        <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>

This here is my 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();
}
}

And this is my 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;
    }
}
}
}
like image 409
user754730 Avatar asked Jun 07 '13 08:06

user754730


People also ask

Does airship use FCM?

Firebase Cloud Messaging (FCM) is the transport method that Airship supports for Android devices that have access to the Google Play store.

What is airship SDK?

Airship's SDKs expose messaging and data-gathering functionality on your client devices, and our APIs support messaging mediums that can't use an SDK. Airship has SDKs for iOS, Android/Amazon, Windows, and Web platforms. The APIs correspond to Airship's engagement (messaging) and real-time event stream products.


1 Answers

The problem was, I was missing the following line inside my MyApplication.java file:

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

All the rest was correct. It's now working perfectly.

like image 110
user754730 Avatar answered Sep 23 '22 18:09

user754730