Skip to content Skip to sidebar Skip to footer

Android Gradle Product Flavors With Parse Push Notifications

I am trying to send Push notifications via Parse and integrating product flavors. When I implement product flavors, i am not able to receive Parse Push Notifications. Does anyone h

Solution 1:

I have just solved the exact same problem very easily with the Manifest Merger:

${applicationId}

Example:

<permissionandroid:name="${applicationId}.permission.C2D_MESSAGE"android:protectionLevel="signature" /><uses-permissionandroid:name="${applicationId}.permission.C2D_MESSAGE" /><application><receiverandroid:name="com.parse.GcmBroadcastReceiver"android:permission="com.google.android.c2dm.permission.SEND"><intent-filter><actionandroid:name="com.google.android.c2dm.intent.RECEIVE" /><actionandroid:name="com.google.android.c2dm.intent.REGISTRATION" /><categoryandroid:name="${applicationId}" /></intent-filter></receiver></application>

Solution 2:

NOTE: As has been observed, my solution is somewhat more complicated than the one by Morten Holmgaard below. Needless to say, had I known of the simpler solution I would have proposed that one. However, my answer does contain some relevant explanation and it also was the only - and only correct - answer for five weeks, so I will leave it up.

===========================================================================

What's the problem?

I think the reason you are not receiving any pushes is that in your AndroidManifest.xml you declare the following for Parse:

<permissionandroid:name="com.example.project.permission.C2D_MESSAGE"android:protectionLevel="signature" /><uses-permissionandroid:name="com.example.project.permission.C2D_MESSAGE" /><receiverandroid:name="com.parse.GcmBroadcastReceiver"android:permission="com.google.android.c2dm.permission.SEND"><intent-filter><actionandroid:name="com.google.android.c2dm.intent.RECEIVE" /><actionandroid:name="com.google.android.c2dm.intent.REGISTRATION" /><!--
          IMPORTANT: Change "com.parse.starter" to match your app's package name.
        --><categoryandroid:name="com.example.project" /></intent-filter></receiver>

The package names, however, are defined as

applicationId "com.example.project.free"

and

applicationId "com.example.project.paid"

So the package names don't match the declarations in your AndroidManifest.xml and therefore Parse is unable to receive pushes. Actually, if you look at your logcat output, you should be seeing a message from Parse that tells you exactly what is missing in your AndroidManifest.xml.

So, how to solve this?

This is a bit of a tricky situation but it can be done:

1.) Remove the two parts I quoted above from the AndroidManifest.xml in your main source set (src/main/AndroidManifest.xml).

2a.) Create an AndroidManifest.xml in your free source set (src/free/AndroidManifest.xml) and enter the following:

<?xml version="1.0" encoding="utf-8"?><manifestxmlns:android="http://schemas.android.com/apk/res/android"><permissionandroid:name="com.example.project.free.permission.C2D_MESSAGE"android:protectionLevel="signature" /><uses-permissionandroid:name="com.example.project.free.permission.C2D_MESSAGE" /><application><receiverandroid:name="com.parse.GcmBroadcastReceiver"android:permission="com.google.android.c2dm.permission.SEND"><intent-filter><actionandroid:name="com.google.android.c2dm.intent.RECEIVE" /><actionandroid:name="com.google.android.c2dm.intent.REGISTRATION" /><categoryandroid:name="com.example.project.free" /></intent-filter></receiver></application></manifest>

2b.) Do the same for the paid source set. Be sure to replace the package name correctly in the AndroidManifest.xml.

Why does this work?

Because gradle does not replace the src/main/AndroidManifest.xml with the src/free/AndroidManifest.xml but instead merges them into one. So if you just leave the declarations out of the main source set and put them in to free and paid you will get a correctly merged AndroidManifest.xml for each flavor.

Post a Comment for "Android Gradle Product Flavors With Parse Push Notifications"