2013-03-07 18 views
7

Google Playに5000ダウンロードのアプリがあります。Android GCM一部の端末が登録されていない

これらのうち、900人が自分のサーバーにGCM登録IDを保存できませんでした。

私は18%の故障率を心配しており、なぜこれが起こっているのかを調べるのに苦労しています。私のサーバーにIDを渡して保存することは間違いではないので、登録が失敗しているはずです。誰もがプロジェクトのようなものを見つけましたか?コード以下の通り:syncronizedされていない

のGoogleアカウント:

// 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

。等しくない( "")。 regId.trim()。length()> 0 – drulabs

+2

または '.isEmpty() ' – 323go

+1

GoogleのGCMデモで.equals(" ")を使用して回答を評価してください。さらに、これは4100デバイス用で、900用ではないでしょうか? – TommyGuns21

答えて

2

のようなGCMはない作品を行いますいくつかのものがあります。

Android 3.2以降では、ユーザーがアプリケーションを強制停止するとgcmも機能しません。

+1

あなたの答えをありがとう、GoogleアカウントはGoogle Playからアプリをダウンロードするのに必要なときに同期されます。強制停止に関しては、これが18%のユーザーにとって問題であれば驚くでしょう。 – TommyGuns21

+0

これは私に起こったいくつかの問題です。ユーザは同期化されたaccを変更して、今は確かではないかもしれませんが、 "Registration ID"を変更すると、Web Servでもそれを変更する必要があります。そして、あなたは新しいユーザーではないかもしれないと考えてください。 –

4

私はあなたのものと同じになる可能性がある問題を処理しました。 Android 4.1未満のデバイスはGCMに登録できませんでした。ここにandroid-gcm googleグループの投稿があります:

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

GCM登録が失敗する状況を処理していますか?あなたがGCMIntentService、あなたは以下を実施していることを確認してください使用している場合:

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

を私は同じ問題を抱えていた、いくつかのデバイスが登録didntの、私は私のmanisfestをチェックし、それは、パッケージのチェックの名前の問題でしたそれは慎重に

関連する問題