【问题标题】:Push Notifications with Ionic Framework使用 Ionic 框架推送通知
【发布时间】:2016-08-10 19:08:18
【问题描述】:

我正在尝试使用 Ionic 实现推送通知,但我很困惑。到目前为止,我已经尝试了以下替代方案,但均未成功:

离子推送

似乎是最好的解决方案。它“模拟”浏览器中的通知,使测试变得容易。有两个版本:

  1. 1.0 版:文档位于http://docs.ionic.io/v1.0/docs/push-overview。该页面在底部显示一条警告,说要检查最新版本(2.0beta)。如果我保留在页面中并尝试按照说明进行操作,一切似乎都可以正常工作,但是如果我将推送发送到 https://push.ionic.io/api/v1/push 则没有消息到达。查看 firebug 我发现 $ionicPush 正在查询 2.0alpha API 而不是查询 1.0 API。

  2. 2.0 版:文档位于http://docs.ionic.io/docs/push-overview。它与 1.0 非常相似,并且在浏览器、Android(开发和生产)和 iOS 开发环境中运行良好。但是,我无法收到有关 IOS 生产的消息(将应用程序发布到商店后)。我努力寻找解决方案,但我发现一些答案说它是 alpha 版,不应该使用。

所以,如果版本 1.0 不存在(它使用 v2.0 API)并且 v2.0 是 alpha 并且不应该使用,我得出结论 Ionic Push 不能使用。

问题 1:是否可以使用 ionic push 向 iOS 和 Android 发送通知?

问题 2:使用 2.0 设置,我可以使用 Apns PHP 而不是 Ionic Push 发送消息吗?

Cordova Phonegap 插件推送

我猜这个插件是由 Ionic Push 在幕后使用的。但是,我不知道如何使用它。我发现的教程和文档已经过时,并且引用了一个已弃用的版本 (https://github.com/phonegap-build/PushPlugin.git)。甚至 ngCordova 也引用了这个已弃用的版本 (http://ngcordova.com/docs/plugins/pushNotifications/)。 ngCordova 也建议使用 Ionic Push。我找不到一个完整的例子来展示如何使用 https://github.com/phonegap/phonegap-plugin-push 和 ionic。

问题 3:如何使用 ionic 设置 Cordova Phonegap Plugin Push?

【问题讨论】:

标签: ionic-framework push-notification apple-push-notifications


【解决方案1】:

我还没有使用Ionic Push,所以我只能尝试回答你的第三个问题。

其实我觉得 GitHub 插件页面上的例子很好,所以我会参考这些。如果您还有任何问题,请随时发表评论,我会详细说明。

首先,将 example script 包含在 index.html 中的 deviceready 侦听器回调中,并使用您的设置初始化插件。在注册事件处理程序中,您可以通过 data.registrationId 获取当前用户的设备 ID,您可以将其保存在数据库中。

为了实际发送推送消息,我在服务器端使用node-gcm (Android) 和apnagent (iOS)。 plugin page 上也有一些至少适用于 Android 的好例子。

【讨论】:

  • 谢谢你。我尝试使用示例脚本,但收到“PushNotification undefined”错误。所以我认为有必要在我的 index.html 中包含“www/push.js”文件,但我不确定。你能举一个完整的例子吗?
  • @ArivanBastos 不,您不需要包含任何插件源,这是由 Cordova 自动完成的。您是否在 index.html 中包含 <script src="cordova.js"></script>
  • 是的,我做到了!但是在浏览器中运行应用程序时出现“未定义”错误。这是有道理的,因为推送通知在浏览器中不可用,但直到现在我在开发 ionic 应用程序时都没有遇到浏览器错误,即使使用本机组件也是如此。我将再次尝试该示例,谢谢!
  • @ArivanBastos 您是否使用document.addEventListener("deviceready", function () {}); 来监听事件?对我来说,在浏览器中运行时甚至不会调用它(而 $ionicPlatform.ready(function () {}); 会调用)。无论如何,在使用插件之前,您应该始终检查它是否可用。
【解决方案2】:

我已经为此苦苦挣扎了几天,直到我发现这个指南似乎真的很有用: https://github.com/yafraorg/yafra/wiki/Blog-Ionic-PushV5

希望这也可以帮助其他人!

这是cordovaPushv5的非官方文档,具体实现请看这里:https://github.com/driftyco/ng-cordova/blob/master/src/plugins/push_v5.js

【讨论】:

    【解决方案3】:

    我能够使用 Google Firebase 和 https://github.com/arnesson/cordova-plugin-firebase/ 在 IOS 和 Android 上使用 Ionic 1 发送/接收推送通知。 按照我的做法:

    1. 在 developer.apple.com 上创建了 DEV/PROD 配置文件。创建配置文件时检查了我的开发人员/团队证书。
    2. 在 developer.apple.com 上创建了 DEV/PROD APS 证书。
    3. 在开发机器上安装了开发者/团队证书。
    4. 在开发机器上安装了 DEV/PROD APS 证书。
    5. 在开发机器上安装了配置文件。
    6. 使用“cordova plugin add cordova-plugin-firebase@0.1.14”安装插件。
    7. 向我的应用添加代码:

      window.FirebasePlugin.grantPermission(); window.FirebasePlugin.getInstanceId( 功能(令牌){ thiss.saveToken(token); }, 功能(错误){ 控制台日志(错误); } );

      window.FirebasePlugin.onNotificationOpen( 功能(通知){
      //警报(“是啊!”); }, 功能(错误){ //警报(“错误”); } );

    8. 创建了 Google GCM/Google Firebase 帐户。

    9. 将我的应用添加到 iOS/Android 平台的 Firebase。
    10. 在 firebase 项目设置的“云消息传递”部分添加了 APS 证书。
    11. 已下载 GoogleService-Info.plist e google-service.json 并将它们放在我的应用根文件夹中。
    12. 已构建应用程序。
    13. 仅限 IOS:在 XCode 中启用“推送通知”和“后台模式:接收通知”。

    要发送通知,我使用以下 php 脚本:

    $data = Array
    (
        [to] => <token>
        [priority] => high
        [notification] => Array
            (
                [title] => My Title
                [text] => Notification test
                [sound] => default
                [vibrate] => 1
                [badge] => 0
            )
    
    )
    
    $jsonData = json_encode($data);
    $ch     = curl_init("https://fcm.googleapis.com/fcm/send");
    $header = array(
      'Content-Type: application/json',
      "Authorization: key=".$gcmApiKey
    );
    
    curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
    curl_setopt( $ch,CURLOPT_SSL_VERIFYPEER, true );
    curl_setopt( $ch,CURLOPT_RETURNTRANSFER, true );
    
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $jsonData);
    
    $result = curl_exec($ch);
    curl_close($ch);
    
    echo $result;
    

    【讨论】:

    • 嗨@ArivanBastos 我有我的离子Android 构建发送和接收通知和我的iOS 构建接收通知但似乎无法发送。只是想澄清一点。您将 GoogleService-Info.plist 和 google-service.json 都放在 ionic 项目的根目录中?还是各自在各自的platforms/iosplatforms/android 中?
    • 在根目录中。该插件在构建时将文件移动到适当的位置。您的应用程序可以接收但无法发送是什么意思?运行 php 脚本向设备发送推送消息时是否出错?
    • 谢谢。我昨天将它安装在我的 XCode 项目的根目录中,并且昨天构建将它放在 platforms/ios 的根目录中。这并没有解决它。我将尝试我的 ionic 项目的根。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-08-19
    • 2017-01-27
    • 1970-01-01
    • 2020-04-04
    • 2017-06-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多