开发者问题收集

如何在 Android 上实现 Ionic io 推送通知

2016-06-16
762

我在使用 ionic.io 和 phonegap-plugin-push 实现推送通知时遇到了问题。 这是我的开发环境::

our system information:

Cordova CLI: 6.2.0
Gulp version: CLI version 3.9.1
Gulp local: 
Ionic Framework Version: 1.3.1
Ionic CLI Version: 1.7.15
Ionic App Lib Version: 0.7.2
OS: Distributor ID: LinuxMint Description: Linux Mint 17.1 Rebecca 
Node Version: v0.12.2

Installed platforms:
android 5.1.1

Testing Device:
Samsung Galaxy Core Prime LTE Android 4.4.4 (rooted)

因此,我按照 www dot devdactic dot com/ionic-push-notifications-guide/ 上的教程操作,并尝试使用插件实现推送通知

ionic add ionic-platform-web-client
ionic plugin add phonegap-plugin-push --variable SENDER_ID="1234567890"

现在,我能够在浏览器中运行开发或演示推送通知。但是,当我尝试实现真正的推送通知并在设备上进行测试时,它不起作用。当应用程序启动时,它会按照教程中的预期成功生成设备令牌。但是,当我使用令牌发送推送通知的 CURL 或 Postman http 请求时,我会得到一个 json 响应,就像我成功收到 dev_push 通知(HTTP 状态 201)一样,但我从未在设备上收到实际的推送通知。我仔细检查了所有内容,例如确保 dev_push 设置为 false,我甚至从头开始尝试了 3 次教程,以及 ionic 文档中的教程。在所有情况下,我都成功生成了一个开发令牌,并且我的 cURL 请求给出了肯定的响应,但设备上没有收到任何内容。

我的代码::

app.js:

angular.module('starter', ['ionic'])

.run(function($ionicPlatform) {
  $ionicPlatform.ready(function() {

    var push = new Ionic.Push({
      "debug": true
    });

    push.register(function(token) {
      console.log("Device token:",token.token);
      push.saveToken(token);  // persist the token in the Ionic Platform
    });

    if(window.cordova && window.cordova.plugins.Keyboard) {
      // Hide the accessory bar by default (remove this to show the accessory bar above the keyboard
      // for form inputs)
      cordova.plugins.Keyboard.hideKeyboardAccessoryBar(true);

      // Don't remove this line unless you know what you are doing. It stops the viewport
      // from snapping when text inputs are focused. Ionic handles this internally for
      // a much nicer keyboard experience.
      cordova.plugins.Keyboard.disableScroll(true);
    }
    if(window.StatusBar) {
      StatusBar.styleDefault();
    }
  });
})

index.html ---> http://pastebin.com/p9zwYXiQ

config.xml、package.json、postman 请求和响应 ---> http://pastebin.com/YT2Kn64W

2个回答

令人惊讶的是,我在 Android 上成功实现了这个功能!Ionic 糟糕的过时文档在这里真的帮不上什么忙。我最终创建了一个新应用,将 www 文件夹迁移到新文件夹,只是为了避免麻烦。然后,除了执行以下操作之外,请确保您按照 ionic 在文档中所说的操作:

从 Google Firebase 控制台创建一个新的 Firebase 帐户,是的,文档中从未提及过这一点。首次定义项目时,请确保包名称与 ionic 项目根目录中 config.xml 中定义的包名称相同。Firebase 将为您提供一个新的项目 ID(SENDER_ID)和一个 api 密钥。

在 app.js 推送启动代码中更新 SENDER_ID。

非常重要!!:Firebase 将引导您完成如何更新 gradle 项目,它们是 10 秒的变化,如果您不添加它们,您将不会收到通知!

project_root -->平台 --> android --> build.gradle:

// under buildscript { ... dependencies { ..
// paste this:
classpath 'com.google.gms:google-services:3.0.0'
// at the bottom of the file paste this
apply plugin: 'com.google.gms.google-services'

确保将这些行粘贴到正确的位置

在终端中运行 - 在此处使用您的新 SENDER_ID

cordova plugin add phonegap-plugin-push --variable SENDER_ID=SENDER_ID --save

app 更新 API 密钥 --> 证书 - 仅适用于 android!!

运行命令: // 重建 ionic 平台文件

ionic build android

从您的真实设备运行应用程序,-c -l 用于终端中的 liveReaload 和日志控制台

ionic run android --device -l -c

祝你好运。

KQI
2016-09-13

我一直在尝试,但不幸的是,我从来没有让它工作过。我在工作中浪费了整整一周的时间。幸运的是,我找到了一种行之有效且非常易于使用的替代方案。使用 OneSignal 推送通知:

https://documentation.onesignal.com/docs/phonegap-sdk-setup

Charis The Programmer
2016-06-21