2012-11-09 8 views
7

Ho letto articoli su GCM può aggiornare l'ID di registrazione senza ciclo regolare. Sto cercando di creare un'app utilizzando la notifica push, ma non sono sicuro di come gestire tali ID di registrazione aggiornati.Richiesta di ID registrazione Google Cloud Messaging (GCM) ogni volta che l'applicazione inizia

La mia prima strategia richiede l'ID di registrazione ogni volta che l'app viene avviata e inviata al server dell'app. Sembra funzionante, ma suona in qualche modo sbagliato ...

Va bene fare così?

+0

possibile duplicazione di [Modifica ID registrazione ID in Google Cloud Messaging su Android] (http://stackoverflow.com/questions/16838654/handling-registration-id-changes-in-google-cloud-messaging-on -android) – Eran

risposta

5

In sostanza, si dovrebbe effettuare le seguenti operazioni nella vostra attività principale:

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.my_layout); 

    GCMRegistrar.checkDevice(this); 
    GCMRegistrar.checkManifest(this); 

    final String regId = GCMRegistrar.getRegistrationId(this); 

    if (regId.equals("")) { 
     GCMRegistrar.register(this, GCMIntentService.GCM_SENDER_ID); 
    } else { 
     Log.v(TAG, "Already registered"); 
    } 
} 

Successivamente è necessario inviare l'id di registrazione al server app, ogni volta l'applicazione riceve un com.google.android.c2dm.intent.REGISTRATION intenti con un registration_id supplementare. Ciò potrebbe accadere quando Google aggiorna periodicamente l'ID dell'app.

È possibile raggiungere questo estendendo com.google.android.gcm.GCMBaseIntentService con una propria implementazione, ad es .:

public class GCMIntentService extends GCMBaseIntentService { 

    // Also known as the "project id". 
    public static final String GCM_SENDER_ID = "XXXXXXXXXXXXX"; 

    private static final String TAG = "GCMIntentService"; 

    public GCMIntentService() { 
     super(GCM_SENDER_ID); 
    } 

    @Override 
    protected void onRegistered(Context context, String regId) { 
     // Send the regId to your server. 
    } 

    @Override 
    protected void onUnregistered(Context context, String regId) { 
     // Unregister the regId at your server. 
    } 

    @Override 
    protected void onMessage(Context context, Intent msg) { 
     // Handle the message. 
    } 

    @Override 
    protected void onError(Context context, String errorId) { 
     // Handle the error. 
    } 
} 

Per maggiori dettagli, vi (ri) leggere la documentazione per writing the client side code e the Advanced Section of the GCM documentation.

Spero che questo aiuti!

1

L'aggiornamento della registrazione non è incluso nella nuova libreria GCM.

Parole di Costin Manolache

L'aggiornamento 'periodico' mai successo, e l'aggiornamento di registrazione non è incluso nella nuova libreria GCM.

L'unica causa nota per la modifica dell'ID di registrazione è il vecchio bug delle app che non viene registrato automaticamente se ricevono un messaggio mentre viene aggiornato. Fino a quando questo bug non viene risolto, le app devono ancora chiamare register() dopo l'aggiornamento e fino a questo momento l'ID di registrazione potrebbe cambiare in in questo caso. Chiamare unregister() in modo esplicito di solito modifica anche l'ID di registrazione .

Il suggerimento/soluzione alternativa è generare il proprio identificativo casuale, ad esempio salvato come preferenza condivisa. Su ciascun aggiornamento dell'app è possibile caricare l'identificatore e il nuovo ID di registrazione . Questo può anche facilitare il tracciamento e il debug delle modifiche di aggiornamento e registrazione sul lato server.