Reputation: 7756
What I want to achieve: upon receiving PushWoosh notification, check the payload and direct user to specific activity accordingly.
I'm following an example in PushWoosh FAQ section regarding
Using Custom Push Broadcast Receiver in Android
However, I'm unable to receive any push inside my custom push..
Here's the AndroidManifest.xml
:
<receiver
android:name="com.google.android.gcm.GCMBroadcastReceiver"
android:exported="true"
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" />
<category android:name="${applicationId}" />
</intent-filter>
</receiver>
<receiver android:name=".receivers.PWBroadcastReceiver">
<intent-filter>
<action android:name="${applicationId}.com.arellomobile.android.push.REGISTER_BROAD_CAST_ACTION"/>
</intent-filter>
</receiver>
<service android:name="com.arellomobile.android.push.PushGCMIntentService" />
This is my custom broadcast receiver:
public class PWBroadcastReceiver extends BroadcastReceiver {
private static final String TAG = "PWBroadcastReceiver";
@Override
public void onReceive(Context context, Intent intent) {
if (intent == null)
return;
// Let Pushwoosh SDK to pre-handling push (Pushwoosh track stats, opens rich pages, etc.).
// It will return Bundle with a push notification data
Bundle pushBundle = PushManager.preHandlePush(context, intent);
if (pushBundle == null)
return;
// Get push bundle as JSON object
JSONObject dataObject = PushManager.bundleToJSON(pushBundle);
// Get default launcher intent for clarity
Intent launchIntent = context.getPackageManager().getLaunchIntentForPackage(context.getPackageName());
launchIntent.addCategory("android.intent.category.LAUNCHER");
launchIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);
// Put push notifications payload in Intent
launchIntent.putExtras(pushBundle);
launchIntent.putExtra(PushManager.PUSH_RECEIVE_EVENT, dataObject.toString());
// Start activity!
context.startActivity(launchIntent);
// Let Pushwoosh SDK post-handle push (track stats, etc.)
PushManager.postHandlePush(context, intent);
}
}
Upvotes: 1
Views: 908
Reputation: 2121
Remote intent filter from PWBroadcastReceiver, you don't need it.
I don't see any meta tags in your AndroidManifest.xml
You need to add receiver name to meta-data tag to AndroidManifest.xml, otherwise SDK doesn't know where to route push notification.
<receiver android:name=".receivers.PWBroadcastReceiver" />
<meta-data android:name="PW_NOTIFICATION_RECEIVER" android:value=".receivers.PWBroadcastReceiver"/>
UPDATE: Note that the
PW_NOTIFICATION_RECEIVER
expectpackage + [path to your notification receiver class]
.. If you use an application_id (com.myapp.staging) different from original package name (com.myapp), this may cause problem.. and the fix is to use the original package instead of application id
Upvotes: 1