0

这是我在主要活动中调用的两种方法,分别在 onStart() 和 onStop() 中。

private void registerForMessages()
{
    Intent registrationIntent = new Intent("com.google.android.c2dm.intent.REGISTER");
    registrationIntent.putExtra("app", PendingIntent.getBroadcast(this, 0, new Intent(), 0));
    registrationIntent.putExtra("sender", "my project id");
    startService(registrationIntent);
}

private void unRegisterForMessages()
{
    Intent unregIntent = new Intent("com.google.android.c2dm.intent.UNREGISTER");
    unregIntent.putExtra("app", PendingIntent.getBroadcast(this, 0, new Intent(), 0));
    startService(unregIntent);
}

其中“我的项目 ID”是我的 12 位项目编号,在 google api 控制台中启用了适用于 android 的谷歌云消息传递。两次调用这些,我得到以下日志:

08-10 15:07:19.370: D/GCM(791): [C2DMRegistrar.143] Send register result  null 0 0

我已经按照我看到的为其他人设置的方式设置了清单文件。无论如何,我的接收器类永远不会被调用,注册中的错误似乎在那里停止。有谁知道错误消息甚至告诉我什么?什么样的事情可能导致此错误?

尝试在 android 官方指南上查找它有点令人困惑,因为其中一些可能是指不推荐使用的方法,而一些说明相互矛盾 - 有些人说这样做,其他人希望你使用注册方法它。

4

2 回答 2

0

看看使用 Google Cloud Messaging (GCM)、PHP 和 MySQL 的 Android 推送通知 http://www.androidhive.info/2012/10/android-push-notifications-using-google-cloud-messaging-gcm-php-和-mysql/

根据 google 的文档“Google Cloud Messaging for Android (GCM) 是一项服务,可帮助开发人员将数据从服务器发送到他们在 Android 设备上的 Android 应用程序”。使用此服务,您可以在新数据可用时向您的应用程序发送数据,而不是及时向服务器发出请求。在您的 Android 应用程序中集成 GCM 可增强用户体验并节省大量电池电量。

可以帮助你..

于 2013-08-10T18:34:53.233 回答
0

其实没关系。我认为这样做的方法实际上必须被弃用或其他东西。这有效:

        gcm = GoogleCloudMessaging.getInstance(this);
    Thread thread = new Thread()
    {
        @Override
        public void run() 
        {
            try
            {
            Log.d("IM", "registration thread happening");
            String regid = gcm.register("project number");
            Log.d("IM", "id: " + regid);
            }
            catch (IOException e)
            {
                Log.d("IM register", "io exception: ");
                e.printStackTrace();
            }
        }
    };

    thread.start();

它给了我一个 IOException ,直到我也将它卡在它自己的线程中,但现在似乎工作正常。我认为官方指南可能需要更新。

于 2013-08-11T02:59:18.467 回答