2012-11-09 12 views
7

Czytałem artykuły o GCM, które mogą odświeżać identyfikator rejestracji bez regularnego cyklu. Próbuję zbudować aplikację za pomocą powiadomienia push, ale nie jestem pewien, jak obchodzić się z takimi odświeżonymi identyfikatorami rejestracji.Żądanie identyfikatora rejestracji Google Cloud Messaging (GCM) przy każdym uruchomieniu aplikacji

Moja pierwsza strategia polega na żądaniu identyfikatora rejestracji przy każdym uruchomieniu aplikacji i wysyłaniu go do serwera aplikacji. Wygląda na to, że działa, ale brzmi nie tak ...

Czy to jest w porządku?

+0

możliwe duplikat [Handling zmiany identyfikator rejestracji w Google Cloud Messaging na Androidzie] (http://stackoverflow.com/questions/16838654/handling-registration-id-changes-in-google-cloud-messaging-on -android) – Eran

Odpowiedz

5

Zasadniczo, należy wykonać następujące czynności w swojej głównej działalności:

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"); 
    } 
} 

Następnie należy wysłać identyfikator rejestracji na serwerze aplikacji, ilekroć aplikacja odbiera com.google.android.c2dm.intent.REGISTRATION zamiaru z registration_id extra. Może się to zdarzyć, gdy Google okresowo aktualizuje identyfikator aplikacji.

Można to osiągnąć poprzez rozszerzenie com.google.android.gcm.GCMBaseIntentService z własnej implementacji, np .:

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. 
    } 
} 

Aby uzyskać więcej szczegółów, chciałbym (re) zapoznać się z dokumentacją dla writing the client side code i the Advanced Section of the GCM documentation.

Nadzieję, że pomaga!

1

Odświeżenie rejestracji nie jest uwzględnione w nowej bibliotece GCM.

Słowa Costin Manolache

do „okresowe” odświeżania nie stało, a odświeżanie Rejestracja nie jest wliczony w nowej biblioteki GCM.

Jedyną znaną przyczyną zmiany identyfikatora rejestracji jest stary błąd aplikacji , który zostanie automatycznie wyrejestrowany, jeśli otrzyma wiadomość o uaktualnieniu . Dopóki ten błąd nie zostanie naprawiony, aplikacje wciąż będą musiały zadzwonić pod numer register() po aktualizacji i jak dotąd identyfikator rejestracji może się zmienić w tym przypadku w . Wywołanie metody unregister() jawnie zazwyczaj zmienia także identyfikator rejestracji .

Propozycja/obejście polega na wygenerowaniu własnego losowego identyfikatora, na przykład zapisanego jako udostępniona preferencja. Przy każdej aktualizacji aplikacji możesz przesłać identyfikator i potencjalnie nowy identyfikator rejestracyjny na numer . Ten numer może również pomóc w śledzeniu i debugowaniu aktualizacji i rejestracji zmian po stronie serwera.

Powiązane problemy