Check out the following solution. if still not working let me know. Add RECEIVE and REGISTRATION in two different intent filters
<receiver android:name="<.GCM BroadcastReceiver Name>" // Name of your BroadcastReceiver, define in code. android:exported="true" android:permission="com.google.android.c2dm.permission.SEND" > <intent-filter> <action android:name="com.google.android.c2dm.intent.RECEIVE" /> <category android:name="<Package Name>" /> </intent-filter> <intent-filter> <action android:name="com.google.android.c2dm.intent.REGISTRATION" /> <category android:name="<Package Name>" /> </intent-filter> </receiver> <service android:name="<.GCM IntentService Name>" /> // Name of your IntentService, define in code. <meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version" />
Add RECEIVE and REGISTRATION Intent to two different intent filters, as shown above, otherwise it will not work for some devices (for example, HTC).
source share