Google Cloud Messaging register AUTHENTICATION_FAILED

后端 未结 3 464
萌比男神i
萌比男神i 2020-12-18 22:00

I want to try Google Cloud Messaging (GCM) service, and I am faced with a problem at the beginning.

I get an error AUTHENTICATION_FAILED while trying t

3条回答
  •  旧巷少年郎
    2020-12-18 22:49

    I ran into the same problem, and it doesn't seem like google is in any hurry to fix it.

    I didn't want to add the deprecated client helper gcm.jar to my app, so I coded a minimal solution that works on my Android 2.3.6 Nexus One phone that fails registration as in the question above

                try {
                    gcm = GoogleCloudMessaging.getInstance(context);
                    regID = gcm.register(SENDER_ID);
                    storeRegistrationId(regID);
                    msg = "Device registered, registration ID=" + regID;
    
                    sendRegistrationIdToBackend();
                } catch (IOException ex) {
                    msg = "Exception registering for GCM :" + ex.getMessage();
                    // If there is an error, don't just keep trying to register.
                    oldSchoolRegister();
                }
    

    The AUTHENTICATION_FAILED triggers the IOException in the code above

    private void oldSchoolRegister() {
        Intent intent = new Intent("com.google.android.c2dm.intent.REGISTER");
        intent.setPackage("com.google.android.gsf");
        setRegCallbackIntent(context, intent);
        intent.putExtra("sender", SENDER_ID);
        context.startService(intent);
    }
    
    private static synchronized void setRegCallbackIntent(Context context, Intent intent) {
        regCallback = PendingIntent.getBroadcast(context, 0, new Intent(), 0);
        intent.putExtra("app", regCallback);
    }
    
    public static synchronized void cancelRegCallbackIntent() {
        if (regCallback != null) {
            regCallback.cancel();
            regCallback = null;
        }
    }
    

    I added the above code to my app. They are simplified methods from the Client Helper gcm.jar (so you don't need to add the jar to your app)

    protected void onHandleIntent(Intent intent) {
        Bundle extras = intent.getExtras();
    
        if (extras != null && !extras.isEmpty()) {  // has effect of unparcelling Bundle
            GoogleCloudMessaging gcm = GoogleCloudMessaging.getInstance(this);
            String messageType = gcm.getMessageType(intent);
    
            if (messageType != null) {
                if (GoogleCloudMessaging.MESSAGE_TYPE_MESSAGE.equals(messageType)) {
                    showMessage(extras.getString("message")); // call your code
                    Logger.d(TAG, "Received message: " + message.alert + ": " + message.url);
                } else if (GoogleCloudMessaging.MESSAGE_TYPE_SEND_ERROR.equals(messageType)) {
                    Logger.e(TAG, "Send error: " + extras.toString());
                } else if (GoogleCloudMessaging.MESSAGE_TYPE_DELETED.equals(messageType)) {
                    Logger.e(TAG, "Deleted messages on server: " + extras.toString());
                }
            } else {
                String regID = extras.getString("registration_id");
                if (regID != null && !regID.isEmpty()) {
                    doRegistration(regID); // send to your server etc.
                    GCMSetup.storeRegistrationId(regID);
                    GCMSetup.cancelRegCallbackIntent();
                }
            }
        }
        // Release the wake lock provided by the WakefulBroadcastReceiver.
        GCMBroadcastReceiver.completeWakefulIntent(intent);
    }
    

    This code is in the intent service, and has a few lines to store the ID received from GCM. As you can see only about 20 extra lines of code compared to a basic implementation, and no additional dependencies! You only need to update your AndroidManifest.xml to make sure you can receive the REGISTRATION intent.

        
            
                
                
                
            
        
    

    I hope this helps until google gets their act together!

提交回复
热议问题