1

我的 GCM 应用程序为同一设备生成多个注册。我已经搜索过这个,但找不到任何解决方案。

这是我的主要活动::

public void onCreate(Bundle savedInstanceState) {
    GCMRegistrar.checkDevice(this);
    GCMRegistrar.checkManifest(this);
    final String regId = GCMRegistrar.getRegistrationId(this);
    if (regId.equals("")) {
      GCMRegistrar.register(this, "952039800261");
    } else {
      Log.v(TAG, "Already registered");

    }}

这是我的 onRegistered() 方法::

protected void onRegistered(Context arg0, final String regId) {

Intent registrationIntent = new Intent("com.google.android.c2dm.intent.REGISTER");
// sets the app name in the intent
registrationIntent.putExtra("app", PendingIntent.getBroadcast(this, 0, new Intent(), 0));
registrationIntent.putExtra("sender", senderId);
startService(registrationIntent);


   // Create a new HttpClient and Post Header
    HttpClient httpclient = new DefaultHttpClient();
    HttpPost httppost = new HttpPost("http://www.ludlowcastle.co.in/moksha/register.php");

    try {
        // Add your data
        List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
        nameValuePairs.add(new BasicNameValuePair("regId", regId));

        httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));

        // Execute HTTP Post Request
        HttpResponse response = httpclient.execute(httppost);

    } catch (ClientProtocolException e) {
        // TODO Auto-generated catch block
    } catch (IOException e) {
        // TODO Auto-generated catch block
    }

我的服务器上有大约 5K 个相同设备的注册 ID。

4

1 回答 1

0

您正在无限循环中注册。

我不使用GCMRegistrar该类,但我很确定它GCMRegistrar.register(this, "952039800261");与这些行相同:

Intent registrationIntent = new Intent("com.google.android.c2dm.intent.REGISTER");
// sets the app name in the intent
registrationIntent.putExtra("app", PendingIntent.getBroadcast(this, 0, new Intent(), 0));
registrationIntent.putExtra("sender", senderId);
startService(registrationIntent);

在我的应用程序中,这 4 行在onCreate我的主要活动的方法中,而不是在GCMRegistrar调用中。

onRegistered被调用时,这意味着注册已经成功并且你有一个注册id。由于您在此方法中要求重新注册,因此会向 Google 发送新的注册请求,然后在下次注册成功时再次调用此方法。我不确定您是否在每次通话中获得不同的注册 ID,或者您是否获得相同的注册 ID,但只需从中删除提到的 4 行即可onRegistered解决您的问题。

于 2013-03-17T15:25:48.090 回答