使用Ionic框架实现推送通知

10

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

Ionic Push

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

  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 Plugin Push

我猜这个插件是Ionic Push在后台使用的。但是,我无法弄清楚如何使用它。我找到的教程和文档已过时,并引用了一个废弃的版本(https://github.com/phonegap-build/PushPlugin.git)。即使ngCordova也引用了这个废弃的版本(http://ngcordova.com/docs/plugins/pushNotifications/)。ngCordova建议使用Ionic Push。我找不到一个完整的示例展示如何在ionic中使用https://github.com/phonegap/phonegap-plugin-push

问题3:如何在Ionic中设置Cordova Phonegap Plugin Push?


1
这篇教程可以帮助你,对于我来说很有效。https://devdactic.com/ionic-push-notifications/ 和 https://devdactic.com/android-push-notifications/ - Mohan Gopi
1
这个教程对我也有用。但是它们没有涉及到iOS,而这正是我遇到问题的地方。 - Arivan Bastos
https://github.com/RigelM/ionic_push/blob/master/Notification.txt - user6356207
3个回答

1

1

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

实际上,我认为GitHub插件页面上的示例非常好,所以我会引用它们。如果您有任何进一步的问题,请随时评论,我会详细说明。

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

要实际发送推送消息,我使用node-gcm(Android)和apnagent(iOS)服务器端。至少对于Android,插件页面上也有一些很好的示例。


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

1

我使用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( function(token) { thiss.saveToken(token); }, function(error) { console.log(error); } ); window.FirebasePlugin.onNotificationOpen( function(notification) {
    //alert("Yeahh!"); }, function(error) { //alert("Error"); } );

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

  9. 将我的应用程序添加到Firebase中,包括iOS/Android平台。
  10. 在Firebase项目设置的“Cloud Messaging”部分添加了APS证书。
  11. 下载了GoogleService-Info.plist和google-service.json,并将它们放置在我的应用根目录中。
  12. 构建应用程序。
  13. iOS only:在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,我的ionic Android版本可以发送和接收通知,我的iOS版本可以接收通知但无法发送。只想澄清一些事情。您是将GoogleService-Info.plist和google-service.json都放在ionic项目的根目录下吗?还是分别放在它们各自的“platforms/ios”和“platforms/android”目录下? - Brad W
在根目录下,插件会在构建时将文件移动到正确的位置。你说你的应用程序可以接收但无法发送,是什么意思?当运行 PHP 脚本向设备发送推送消息时是否出现错误? - Arivan Bastos
谢谢。昨天我将其安装在我的XCode项目根目录中,然后构建将其放在了“platforms/ios”根目录下。这并没有解决问题。我将尝试将其安装在Ionic项目的根目录中。 - Brad W

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接