NOTE: As noted, my decision is somewhat more complicated than that of Morten Holmgaard below. Of course, if I knew of a simpler solution, I would suggest this. However, my answer contains some relevant explanation, and it was also the only and only correct answer for five weeks, so I will leave it.
==================================================== ===========================
What is the problem?
I think the reason you don't get any clicks is because in your AndroidManifest.xml you declare the following for Parse:
<permission android:name="com.example.project.permission.C2D_MESSAGE" android:protectionLevel="signature" /> <uses-permission android:name="com.example.project.permission.C2D_MESSAGE" /> <receiver android:name="com.parse.GcmBroadcastReceiver" 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="com.example.project" /> </intent-filter> </receiver>
Package names, however, are defined as
applicationId "com.example.project.free"
and
applicationId "com.example.project.paid"
Thus, the package names do not match the declarations in your AndroidManifest.xml, and therefore Parse cannot receive a click. In fact, if you look at your logcat output, you should see a message from Parse that tells you exactly what is missing in your AndroidManifest.xml.
So how to solve this?
This is a bit complicated situation, but it can be done:
1.) Remove the two parts that I quoted above from AndroidManifest.xml in the original main set ( src/main/AndroidManifest.xml ).
2a.) Create AndroidManifest.xml in the original free set ( src/free/AndroidManifest.xml ) and enter the following:
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android"> <permission android:name="com.example.project.free.permission.C2D_MESSAGE" android:protectionLevel="signature" /> <uses-permission android:name="com.example.project.free.permission.C2D_MESSAGE" /> <application> <receiver android:name="com.parse.GcmBroadcastReceiver" 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="com.example.project.free" /> </intent-filter> </receiver> </application> </manifest>
2b.) Do the same for the paid initial set. Be sure to replace the package name correctly in AndroidManifest.xml.
Why does it work?
Since gradle does not replace src/main/AndroidManifest.xml with src/free/AndroidManifest.xml , but instead merges them into one. Therefore, if you simply leave the ads from the main source set and place them in free and paid , you will get correctly combined AndroidManifest.xml for each flavor.