未在特定(或某些)设备上调用GCM onMessageReceived()

时间:2016-02-16 14:08:15

标签: java android android-studio notifications google-cloud-messaging

我正在使用 Google Cloud Messaging 在我的Android应用程序中实现推送通知。 在大多数设备上一切都运行良好,但是当我在三星Galaxy S Dous GT-S7562(Android 4.0.4,API 15)上测试应用程序时,当我发送通知时,它并没有t调用 onMessageReceived()方法。

由于一切在其他设备上正常运行,我非常确定我的代码的功能。 我使用以下代码检查 GooglePlayServices 的可用性,并返回 true

private boolean checkPlayServices() {
    GoogleApiAvailability apiAvailability = GoogleApiAvailability.getInstance();
    int resultCode = apiAvailability.isGooglePlayServicesAvailable(this);
    if (resultCode != ConnectionResult.SUCCESS) {
        if (apiAvailability.isUserResolvableError(resultCode)) {
            apiAvailability.getErrorDialog(this, resultCode, PLAY_SERVICES_RESOLUTION_REQUEST)
                    .show();
        } else {
            Log.i(TAG, "This device is not supported.");
            finish();
        }
        return false;
    }
    return true;
}

虽然 RegistrationIntentService()会将设备的令牌发送到我的服务器,并且还会通过我的服务器响应" 成功"进行GCM调用,应用程序没有调用 onMessageRecieved()方法,因为我将日志放在它的开头。

我还有什么需要检查来调试问题吗?

我感谢你的帮助。

2 个答案:

答案 0 :(得分:0)

检查脚本是否包含有效负载中的通知

请参阅以下链接

https://developers.google.com/cloud-messaging/concept-options#notifications_and_data_messages

答案 1 :(得分:0)

这是一个具体案例。首先,需要检查此链接后的注册令牌。 通过curl检查注册令牌:请参阅此link

# api_key=YOUR_API_KEY
# curl --header "Authorization: key=$api_key" \
   --header Content-Type:"application/json" \
   https://gcm-http.googleapis.com/gcm/send \
   -d "{\"registration_ids\":[\"ABC\"]}"

“如果您想确认注册令牌的有效性,您可以通过更换" ABC"使用注册令牌。“

我认为在检查卷曲结果后调查更好。 您也可以参考此site

此外,最好检查设备的通知设置。

我希望这会有所帮助。