4

我正在关注链接,但在向 GCM API 发送消息后,我的 Android 收到一条空消息(值设置为null)。

这是我的 Django 视图,将消息发送到 GCM API:

@csrf_exempt
def send_notification(request):
    message = {"name": "Kousik","email": "kousik.tict@gmail.com"}
    registration_ids = ['xxxxxxxxxxxxxxx','xxxxxxxxxxxxxxxxxx']
    post_data = {"data":message,"registration_ids":registration_ids}
    headers = {'Content-Type': 'application/json', 'Authorization':'key=xxxxxxxxx'}
    import requests    
    post_response = requests.post(url='https://android.googleapis.com/gcm/send', data=simplejson.dumps(post_data), headers=headers)
    to_json = {'status':str(post_response)}
    return HttpResponse(simplejson.dumps(to_json), mimetype='application/json')

但是,流量报告显示根本没有发送消息:

在此处输入图像描述

接收 GCM 消息的 Android 代码:

static final String EXTRA_MESSAGE = "message";
private final BroadcastReceiver mHandleMessageReceiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        Bundle bundle = intent.getExtras();
        for(String key: bundle.keySet()){
            Log.d("gen", key+" - "+bundle.get(key));
        }


        String newMessage = intent.getExtras().getString(EXTRA_MESSAGE);
        //newMessage comming NULL
        // Waking up mobile if it is sleeping
        WakeLocker.acquire(getApplicationContext());


        // Showing received message
        lblMessage.append(newMessage + "\n");           
        Toast.makeText(getApplicationContext(), "New Message: " + newMessage, Toast.LENGTH_LONG).show();

        // Releasing wake lock
        WakeLocker.release();
    }
};

我在这里放了一个断点,得到以下信息:

在此处输入图像描述

注意message哈希图中的值,它是null.

4

1 回答 1

2

这里有一些我可以说的:

  1. Google APIs 控制台不显示 GCM 统计信息,表明您不应期望在那里看到任何内容。

  2. 您的服务器不发送message密钥(它只发送nameand email,所以我不知道message调试器屏幕截图中为空的密钥是什么。

  3. 我不明白这一行:

private final BroadcastReceiver mHandleMessageReceiver = new BroadcastReceiver()

您不必实例化从 GCM 接收消息的 BroadcastReceiver。您应该在清单中声明它,如许多教程(包括官方 GCM 编程指南)中所示。

我的猜测是您在应用程序中本地调用 BroadcastReceiver,而您从服务器发送的消息没有到达应用程序。

您应该在问题中包含您的服务器从 Google 获得的响应,以便我们确定问题不在您的服务器端。您还应该包括您的清单。

这不完全是一个答案,但是评论太长了,我认为它可以为您指明解决问题的方向。

于 2013-11-11T13:46:43.530 回答