Device not receiving message from new Google Cloud Messaging (NEW GCM)

please help me i'm surfing on this topic and still going to this new gcm

my last project using gcm push at this link

XT **: //www.androidhive.info/2012/10/android-push-notifications-using-google-cloud-messaging-gcm-php-and-mysql/

but now the last GCM (C2DM) is deprecated, so we no longer use the GCMRegistrar

here, take a look at this h ** p: //developer.android.com/google/gcm/c2dm.html there is a claim "Android Cloud to Device Messaging (C2DM) is out of date. C2DM service will continue to be supported in the short term, but C2DM is not will accept new users and will not provide new quotas "

I use this link to study the concept

and for example, I use: https://code.google.com/p/gcm/source/browse/#git

I think I have completed all the necessary steps.

I link to my project on google play service lib

I also changed my sender id to my google project number

I also got RegID from GCM

but the problem is that whenever I click the submit button

he never shows me anything

from the google documentation example, he says that he should echo back to my device, but he never performs

i checked the documentation in the concept it says gcmbroadcastreceiver will receive any GCM message clicked on my device,

so I tried to enter "OnReceive" in this broadcaster, but it never shows anything

I also tried implementing the HTTP GCM Server using this documentation http://developer.android.com/google/gcm/http.html

I get an answer like this {"Multicast_id": 6256370624066466203, "success": 1, "failure": 0, "canonical_ids": 0, "Results": [{"message_id": "0: 1378114688323559% eab45603f9fd7ecd"}]}

but my magazine never shows anything

here is my translator

public class GcmBroadcastReceiver extends WakefulBroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { Log.v("HAHA BANGET","masuk ke broadcastReceiver"); // Explicitly specify that GcmIntentService will handle the intent. ComponentName comp = new ComponentName(context.getPackageName(), GcmIntentService.class.getName()); // Start the service, keeping the device awake while it is launching. startWakefulService(context, (intent.setComponent(comp))); setResultCode(Activity.RESULT_OK); } } 

and here is my intenservice

 public class GcmIntentService extends IntentService { public static final int NOTIFICATION_ID = 1; private NotificationManager mNotificationManager; NotificationCompat.Builder builder; public GcmIntentService() { super("7134XXXXX"); } public static final String TAG = "HAHA"; @Override protected void onHandleIntent(Intent intent) { Log.v(TAG,"MASUK INTENT NIH"); Bundle extras = intent.getExtras(); GoogleCloudMessaging gcm = GoogleCloudMessaging.getInstance(this); // The getMessageType() intent parameter must be the intent you received // in your BroadcastReceiver. String messageType = gcm.getMessageType(intent); if (!extras.isEmpty()) { // has effect of unparcelling Bundle /* * Filter messages based on message type. Since it is likely that GCM will be * extended in the future with new message types, just ignore any message types you're * not interested in, or that you don't recognize. */ if (GoogleCloudMessaging.MESSAGE_TYPE_SEND_ERROR.equals(messageType)) { sendNotification("Send error: " + extras.toString()); } else if (GoogleCloudMessaging.MESSAGE_TYPE_DELETED.equals(messageType)) { sendNotification("Deleted messages on server: " + extras.toString()); // If it a regular GCM message, do some work. } else if (GoogleCloudMessaging.MESSAGE_TYPE_MESSAGE.equals(messageType)) { // This loop represents the service doing some work. for (int i = 0; i < 5; i++) { Log.i(TAG, "Working... " + (i + 1) + "/5 @ " + SystemClock.elapsedRealtime()); try { Thread.sleep(5000); } catch (InterruptedException e) { } } Log.i(TAG, "Completed work @ " + SystemClock.elapsedRealtime()); // Post notification of received message. sendNotification("Received: " + extras.toString()); Log.i(TAG, "Received: " + extras.toString()); } } // Release the wake lock provided by the WakefulBroadcastReceiver. GcmBroadcastReceiver.completeWakefulIntent(intent); } // Put the message into a notification and post it. // This is just one simple example of what you might choose to do with // a GCM message. private void sendNotification(String msg) { mNotificationManager = (NotificationManager) this.getSystemService(Context.NOTIFICATION_SERVICE); PendingIntent contentIntent = PendingIntent.getActivity(this, 0, new Intent(this, PushBaruLagi.class), 0); NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this) .setSmallIcon(R.drawable.common_signin_btn_icon_dark) .setContentTitle("GCM Notification") .setStyle(new NotificationCompat.BigTextStyle() .bigText(msg)) .setContentText(msg); mBuilder.setContentIntent(contentIntent); mNotificationManager.notify(NOTIFICATION_ID, mBuilder.build()); } } 

and here is my manifest

 <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.GET_ACCOUNTS" /> <uses-permission android:name="android.permission.WAKE_LOCK" /> <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <permission android:name="com.coba.pushgcmbaru.permission.C2D_MESSAGE" android:protectionLevel="signature" /> <uses-permission android:name="com.coba.pushgcmbaru.permission.C2D_MESSAGE" /> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <receiver android:name="com.coba.pushgcmbaru.GcmBroadcastReceiver" android:permission="com.google.android.c2dm.permission.SEND" > <intent-filter> <action android:name="com.google.android.c2dm.intent.RECEIVE" /> <category android:name="com.coba.pushgcmbaru" /> </intent-filter> </receiver> <service android:name="com.coba.pushgcmbaru.GcmIntentService" /> <activity android:name="com.coba.pushgcmbaru.PushBaruLagi" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> 

I am using 2.2 FROYO

and I updated my Google Play services to the newest.

so guys if anyone can help me, thanks a lot :)

+3
source share
2 answers

Try this way

UPDATE: new implementation of the GCM API

1) create a class GcmIntentService.java

 public class GcmIntentService extends IntentService { public GcmIntentService() { super("your project id here"); } @Override protected void onHandleIntent(Intent intent) { // handle message here } } 

2) create a class GcmBroadcastReceiver.java

 public class GcmBroadcastReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { ComponentName comp = new ComponentName(context.getPackageName(), GcmIntentService.class.getName()); context.startService((intent.setComponent(comp))); setResultCode(Activity.RESULT_OK); } } 

3) Mainfest.xml

pemissions for gcm

 <permission android:name="your.package.name.permission.C2D_MESSAGE" android:protectionLevel="signature" /> <uses-permission android:name="your.package.name.permission.C2D_MESSAGE" /> <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" /> <uses-permission android:name="android.permission.GET_ACCOUNTS" /> <uses-permission android:name="android.permission.WAKE_LOCK" /> <receiver android:name="your.package.name.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" /> <action android:name="com.google.android.c2dm.intent.GCM_RECEIVED_ACTION" /> <category android:name="your.package.name" /> </intent-filter> </receiver> <service android:name="your.package.name.GcmIntentService" android:enabled="true" /> 

---------------------- OLD API ----------------------- --- ----------------------

 public GcmIntentService() { super("72544799xxx"); //Pass GCM project id here } <receiver android:name="com.google.android.gcm.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" /> <action android:name="com.google.android.c2dm.intent.GCM_RECEIVED_ACTION" /> <category android:name="com.coba.pushgcmbaru" /> </intent-filter> </receiver> <service android:name="com.coba.pushgcmbaru.GCMIntentService" android:enabled="true" /> 

Create a GCMReceiver class and replace it with your GcmBroadcastReceiver

 import com.google.android.gcm.GCMBroadcastReceiver; /** * This Class Contains All Method Related To GCMReceiver. * * @author * */ public class GCMReceiver extends GCMBroadcastReceiver { @Override protected String getGCMIntentServiceClassName(Context context) { return GCMIntentService.class.getName(); } } 
+8
source
 // registration int status = GooglePlayServicesUtil.isGooglePlayServicesAvailable(this); if (status == ConnectionResult.SUCCESS) { final GoogleCloudMessaging gcm = GoogleCloudMessaging.getInstance(this); new Thread(new Runnable() { @Override public void run() { try { gcm.register( Constants.GCM_SENDER_ID ); // old style google cloud messaging register process ---------------------- // Intent intent = new Intent( "com.google.android.c2dm.intent.REGISTER" ); // intent.putExtra("app",PendingIntent.getBroadcast(this,0,new Intent(),0)); // intent.putExtra("sender", Constants.GCM_SENDER_ID ); // startService( intent ); // ------------------------------------------------------------------------ } catch ( IOException e ) { } catch ( Exception ex) { } } }).start(); } else if (status != ConnectionResult.SUCCESS) { if (GooglePlayServicesUtil.isUserRecoverableError(status)) { Toast.makeText(this, getString(R.string.error_gcm_installplayservices), Toast.LENGTH_SHORT).show(); finish(); } else { Toast.makeText(this, getString(R.string.error_gcm_devicenotsupported), Toast.LENGTH_SHORT).show(); finish(); } } // class for all responses public class PushNotificationReceiver extends WakefulBroadcastReceiver implements IntentClientHubInterface { @Override public void onReceive(Context context, Intent intent) { if( intent != null && "com.google.android.c2dm.intent.REGISTRATION".equals(intent.getAction())) { String registrationId = intent.getStringExtra("registration_id"); String error = intent.getStringExtra("error"); if( error == null && context != null) { Utils.saveRegistrationID( context, registrationId ); } } else if ( intent != null && "com.google.android.c2dm.intent.RECEIVE".equals(intent.getAction()) ) { // handle notification } } } // permissions <?xml version="1.0" encoding="utf-8"?> <manifest ... <permission android:name="YOUR.PROJECT.permission.C2D_MESSAGE" android:protectionLevel="signature" /> <uses-permission android:name="YOUR.PROJECT.permission.C2D_MESSAGE" /> <uses-permission android:name="com.google.android.c2dm.permission.SEND" /> <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" /> <uses-permission android:name="android.permission.WAKE_LOCK" /> <application ... <meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version" /> <receiver android:name=".PushNotificationReceiver" android:permission="com.google.android.c2dm.permission.SEND" > <intent-filter android:priority="100"> <action android:name="com.google.android.c2dm.intent.REGISTRATION" /> <action android:name="com.google.android.c2dm.intent.RECEIVE" /> <category android:name="YOUR.PROJECT" /> </intent-filter> </receiver> </application> </manifest> 
0
source

Source: https://habr.com/ru/post/1500228/


All Articles