2013-03-07 9 views
7

Mam aplikację w Google Play z 5000 pobrań.Android GCM Niektóre urządzenia nie rejestrujące się

Z tych 5000, 900 nie udało się zapisać identyfikatora rejestracji GCM na moim serwerze.

Obawiam się, że wskaźnik 18% niepowodzenia i staram się dowiedzieć, dlaczego tak się dzieje. To zdecydowanie nie jest problem z przekazaniem Id do mojego serwera i przechowywaniem, więc zakładam, że musi to być awaria rejestracji. Czy ktoś ma coś takiego w swoich projektach? Kod jak poniżej:

// Fired every time the app is booted in Main Activity 
private void setupGCM() 
{ 
    String gcmRegId = GCMRegistrar.getRegistrationId(this); 
    if (gcmRegId.equals("")) 
    { 
     GCMRegistrar.register(this, AppProperties.GCM_SENDER_ID); 
    } else 
    { 
     // This is well tested and is not the issue 
     ServerUtils.sUpdatePushToken(this, gcmRegId); 
    } 
} 

// GCMIntentService Class onRegistered 
@Override 
protected void onRegistered(Context context, String registrationId) 
{ 
    mContext = context; 
    if (!registrationId.equals("")) 
    { 
     AppProperties.GCM_REGISTRATION_ID = registrationId; 
     new UpdateGCMRegistrationIdAsync().execute(); 
    } else 
    { 
     GCMRegistrar.setRegisteredOnServer(context, false); 
    } 
} 

// GCMIntentService Class My Async class for updating Reg Id 
private class UpdateGCMRegistrationIdAsync extends AsyncTask<Integer, Integer, Void> 
{ 
    @Override 
    protected Void doInBackground(Integer... params) 
    {   
     ServerUtils.sUpdatePushToken(mContext, AppProperties.GCM_REGISTRATION_ID); 
     return null; 
    } 
} 
+0

.equals ("") nie jest zalecane. spróbuj regId.trim(). length()> 0 – drulabs

+2

lub '.isEmpty()' – 323go

+1

Doceń swoją odpowiedź, jednak jest to udokumentowane przez google w demo GCM z .equals (""). Plus czy to działałoby na 4100 urządzeń, a nie na 900? – TommyGuns21

Odpowiedz

2

Są pewne rzeczy, które sprawia, że ​​GCM nie prace, takie jak:

A kont Google, które nie są zsynchronizowane.

W systemie Android 3.2+, gdy użytkownik "wymusza zatrzymanie" aplikacji, gcm też nie działa.

+1

Dzięki za odpowiedź konto Google zostanie zsynchronizowane, ponieważ jest potrzebne do pobrania aplikacji z Google Play. Jeśli chodzi o zatrzymanie siły, zdziwiłbym się, gdyby był to problem dla 18% użytkowników. – TommyGuns21

+0

To są niektóre problemy, które mi się przydarzyły, użytkownik może zmienić zsynchronizowane acc i nie jest pewien, ale zmienia "Identyfikator rejestracji", trzeba to zmienić również w web serverze. I powinieneś wziąć pod uwagę to, że 900 może nie są nowymi użytkownikami. –

4

Właśnie rozwiązałem problem, który może okazać się taki sam jak twój. Urządzenia z Androidem niższym niż 4.1 nie mogły zarejestrować się w GCM. Oto mój post z android-gcm grupy dyskusyjne:

Ok, got it solved. Thanks to J.Carlos Navea and Mark Murphy in this thread: 
https://groups.google.com/forum/?fromgroups=#!searchin/android-gcm/onRegister/android-gcm/CqMRN4gVRpY/AGphcX1AuhgJ 

The issue was the <category> tag in the receiver declaration. It is required for anything less than 4.1 
Use your package name there. Additionally, check to make sure that the <permission> and <uses-permission> 
tags use the same string/name. I was getting away with that one as well on 4.1 
1

Czy obchodzenia się z sytuacją, w której nie przejdzie rejestracji GCM? Jeśli używasz GCMIntentService, upewnij się, że wdrożenie następujących czynności:

@Override 
protected void onError(Context context, String regid) { 
    // Handle error condition. 
} 
0

miałem ten sam problem, niektóre urządzenia nie zrobił zarejestrowany, sprawdziłem moje manisfest i to był problem z nazwą pakietu check to ostrożnie

Powiązane problemy