7

我在 Google Play 中有一个应用程序,下载量为 5000。

在这 5000 个中,有 900 个未能在我的服务器上存储 GCM 注册 ID。

我担心有 18% 的失败率,并且正在努力找出为什么会发生这种情况。将 ID 传递到我的服务器并存储绝对不是问题,所以我认为这一定是注册失败。有没有人在他们的项目中遇到过这样的事情?代码如下:

// 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;
    }
}
4

4 回答 4

4

我刚刚处理了一个可能与您的问题相同的问题。Android 低于 4.1 的设备无法在 GCM 中注册。这是我来自 android-gcm 谷歌组的帖子:

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
于 2013-03-19T00:41:28.947 回答
2

有些事情会使 GCM 不起作用,例如:

未同步的谷歌帐户。

在 Android 3.2+ 中,当用户“强制停止”应用程序时,gcm 也不起作用。

于 2013-03-07T16:34:11.910 回答
1

你在处理GCM注册失败的情况吗?如果您使用 GCMIntentService,请确保您正在实施以下内容:

@Override
protected void onError(Context context, String regid) {
   // Handle error condition.
}
于 2013-05-09T15:14:23.613 回答
0

我有同样的问题,有些设备没有注册,我检查了我的清单,这是包裹名称的问题,仔细检查

于 2013-07-04T09:04:27.343 回答