1

我正在尝试通过 StackMob 在现有的 Android 应用程序上实现推送通知。我已经浏览了他们的教程和开发中心,试图找到解决我的问题的方法,但我做不到。在我的应用程序的 BaseActivity 中,我有我的发件人 ID(由于显而易见的原因,实际 ID 替换为 #):

public static String SENDER_ID = "############";

来自 Google API 控制台。我也有 init 函数(同样,在这段代码中替换了 PUBLIC 和 PRIVATE 键):

StackMobAndroid.init(this.getApplicationContext(), StackMob.OAuthVersion.One, 0, "<PUBLIC KEY FROM STACKMOB DASHBOARD>", "<PRIVATE KEY FROM STACKMOB DASHBOARD>");

据我了解,我还需要注册任何设备以接收通知,它位于 init 下方:

try {
    final String regId = GCMRegistrar.getRegistrationId(this);
    if (regId.equals("")) {
        registerForPush();
    } else {
        Log.e("BaseActivity", "User already registered for push notifications");
    }
} catch (UnsupportedOperationException e) {
    Log.e("BaseActivity", "This device doesn't support gcm. Push will not work");
}

private void registerForPush() {
    GCMRegistrar.register(this, SENDER_ID);
}

当我运行我的应用程序时,我进入Registering app com.example.android of senders ############了 LogCat,因此我的设备已注册以获取推送通知。但是当我尝试从 StackMob 仪表板发送推送通知并检查来自该推送的日志时,我看到

Failed to send message {"alert":"deadbeef"} because there is no C2DM ClientLogin token for version=0

有人可以解释该日志消息实际上告诉我什么吗?

4

1 回答 1

0

Android 推送有两个版本:旧的 C2DM 和新的 GCM。您可以为其中任何一个注册令牌,StackMob 将使用适当的凭据发送消息。C2DM 已被弃用,因此所有 SDK 默认将令牌注册为 GCM,这就是您使用 sender_id 配置的推送指令和所有这些。

您的代币不知何故被意外注册为 C2DM。当我们去推送时,我们看到您那里没有凭据并打印该消息。解决方案是通过推送控制台删除令牌并再次将其注册为 GCM。 https://dashboard.stackmob.com/data/console

真正的问题是您最初是如何注册 C2DM 令牌的。如果任何 StackMob 工具或演示没有默认 GCM 并且 C2DM 没有明确标记为旧版,请告诉我。

于 2013-06-24T16:46:13.340 回答