【问题标题】:Can't get device token using Cordova Push Notifications Plugin无法使用 Cordova 推送通知插件获取设备令牌
【发布时间】:2015-07-08 22:23:20
【问题描述】:

我正在使用 Ionic 框架构建一个推送通知应用程序,因此我尝试遵循这个示例应用程序:https://github.com/hollyschinsky/PushNotificationSample

问题在于,当我尝试在 Android 设备中运行示例时,它不会检索设备令牌。我将 register 函数中的 senderId 替换为我自己的 Google 应用程序中的 senderId,但它不起作用。

我做错了什么?

这是我正在使用的版本:

Ionic    --version 1.3.20
Cordova  --version 5.0.0
Phonegap --version 4.2.0-0.24.2
Android device: HTC One S
Android version: 4.1.1 HTC Sense 4+

我认为问题出在 notificationReceived 函数中:

// Register
$scope.register = function () {
    var config = null;

    if (ionic.Platform.isAndroid()) {
        config = {
            "senderID": "1034029444859" // REPLACE THIS WITH YOURS FROM GCM CONSOLE - also in the project URL like: https://console.developers.google.com/project/434205989073
        };
        //alert("El senderID es: " + senderID);
    }
    else if (ionic.Platform.isIOS()) {
        config = {
            "badge": "true",
            "sound": "true",
            "alert": "true"
        }
    }

    $cordovaPush.register(config).then(function (result) {
        console.log("Register success " + result);

        $cordovaToast.showShortCenter('Registered for push notifications ' + config.senderID);
        $scope.registerDisabled=true;
        // ** NOTE: Android regid result comes back in the pushNotificationReceived, only iOS returned here
        if (ionic.Platform.isIOS()) {
            $scope.regId = result;
            storeDeviceToken("ios");
        }
    }, function (err) {
        console.log("Register error " + err)
    });
}

// Notification Received
$scope.$on('$cordovaPush:notificationReceived', function (event, notification) {
    console.log(JSON.stringify([notification]));
    if (ionic.Platform.isAndroid()) {
        handleAndroid(notification);
    }
    else if (ionic.Platform.isIOS()) {
        handleIOS(notification);
        $scope.$apply(function () {
            $scope.notifications.push(JSON.stringify(notification.alert));
        })
    }
});

编辑:

事实证明,该应用确实检索了设备令牌,只是没有按应有的方式在屏幕上显示它。

我必须在通过 USB 和 ionic run android 连接的设备上运行应用程序,并查看应用程序如何使用 adb logcat 运行,然后我看到一行显示“registrationId = APA91b ...”这就是令牌.我按照教程中的说明使用 sendGCM.js 文件测试了通知,它可以正常工作。

但它仍然没有解释为什么它没有在索引页面中显示令牌或收到的通知。就像 Token 总是超出控制器的范围。

有什么帮助吗?

【问题讨论】:

  • 你能 console.log(JSON.stringify(result)) 吗?你得到了什么?
  • 我尝试使用 'ionic emulate android --livereload' 运行模拟器以查看 console.log 并显示“出现网络错误 (172.16.16.50:8100)”。有什么建议吗?
  • 嗯,我认为推送通知功能应该在真实设备而不是模拟器上进行测试。
  • @David 我也在这里找到了相同的点,但是您是如何检索 ID 并将其提交到您的服务器的?
  • @Emm 我将设备连接到 PC 并运行 adb logcat 进行调试。注册函数的结果就埋在那里。仅供参考,我放弃了这个示例,并根据文档中的示例(ngcordova.com/docs/plugins/pushNotifications)制作了自己的推送通知功能。推送通知在 Android 模拟器中确实有效,但在 iOS 模拟器中无效。

标签: android cordova push-notification ionic-framework cordova-plugins


【解决方案1】:

这是因为你没有正确设置推送通知。

您现在需要做的是删除成员开发者帐户中的所有现有证书并重新重建。如果您尝试调试它需要时间。

如果您想逐步了解如何使用 Cordova 推送插件创建推送通知,可以查看此处。

http://blog.revivalx.com/2014/08/29/implement-push-notifications-for-android-and-ios-phonegap-part-1/

http://blog.revivalx.com/2014/08/29/implement-push-notifications-for-android-and-ios-phonegap-part-2/

http://blog.revivalx.com/2014/11/14/implement-push-notifications-for-android-and-ios-phonegap-part-3/

很抱歉,因为太长,所以没有在此处发布所有步骤。欢迎随时提问。

【讨论】:

  • 我按照教程进行操作,但我不知道将 Sender keydevice registration id 放在 simplepush.php 文件中的哪个位置对于Android(我以前从未使用过PHP),我看不到这些示例如何抛出设备令牌以便您可以使用它。另外我还有第二个问题,当我使用ionic run android 时,它显示“启动成功”,但设备中没有任何反应。
【解决方案2】:

为了让推送通知起作用。你需要一个实际的设备。不推荐使用模拟器。连接您的 android/iOS 手机并进行操作。 ionic run android.

【讨论】:

  • 并且不要为推送通知设置实时重新加载。我猜它会遇到 CORS 问题。
  • 我说我在 HTC Android 设备上运行它,它没有显示 Token。如何使用实际设备而不是模拟器查看 console.log?
  • 连接设备时。在终端输入 adb logcat。您将获得设备日志。
  • 当我使用 ionic run android 时,它显示“LAUNCH SUCCESS”,但设备中没有任何反应。已经有一个问题,但没有有用的答案:stackoverflow.com/questions/25281711/…
猜你喜欢
  • 2016-05-08
  • 1970-01-01
  • 2012-02-06
  • 1970-01-01
  • 1970-01-01
  • 2010-11-23
  • 1970-01-01
  • 1970-01-01
  • 2011-12-30
相关资源
最近更新 更多