Android 上使用 Firebase Cloud 的 Adob​​e Phonegap 推送通知

Adobe Phonegap Push Notifications with Firebase Cloud on Android

自 2018 年以来,标准的 Phonegap 推送通知示例项目不再有效。 我正在努力寻找一种向应用程序发送推送通知的实用方法。 到目前为止,我已经完成了以下工作:

  1. 设置 Adob​​e Phonegap 推送通知示例项目
  2. 设置一个 Firebase 云帐户并创建一个项目并添加一个 Android 应用到它。
  3. 已下载 google-services.json
  4. 安装了 phonegap-plugin-push(1.8.0 显然任何超过 2.0 的东西都有问题),并包括我的发件人 ID
  5. 已安装 cordova-android-support-gradle-release、cordova-android-play-services-gradle-release 和 cordova-android-firebase-gradle-release
  6. 修改了index.js,使发送者ID不再在PushNotification.initAndroid对象中发送(显然不再需要)
  7. 修改了 index.js 以便 pushServiceURL 包含在 PushNotification.init 浏览器对象中(显然这是在浏览器中进行测试所必需的)
  8. 在 Firebase 云中设置并发布推送消息活动,以在应用打开时触发

我正在使用 Android 8.1.0。我已经安装了 Adob​​e Phonegap Developer App

结果: 我 运行 Phonegap 在 CLI 中服务。 我在 CLI 中看到以下内容:

Updating manifest.json with push properties…
[phonegap] starting app server...
[phonegap] listening on 192.168.1.57:3000
[phonegap]
[phonegap] ctrl-c to stop the server
[phonegap]
Updating manifest.json with push properties…
Manifest updated with push sender ID
Manifest updated with push sender ID
[phonegap] 200 /socket.io/?EIO=3&transport=polling&t=MbsZP-M
[phonegap] 200 /socket.io/? 
EIO=3&transport=polling&t=MbsZSMw&sid=Wyc9htsKdIkXHCtKAAAA
[phonegap] 200 /__api__/update
[phonegap] 200 /__api__/update
[phonegap] 200 /__api__/update
[phonegap] 200 /socket.io/socket.io.js

...到目前为止一切看起来都不错。我在我的 Android 设备上加载 Phonegap Developer App 并连接,我看到:

[phonegap] [console.warn] Content Security Policy has been modified to be: 
<meta http-equiv="Content-Security-Policy" content="default-src * 'unsafe-inline' gap: ws: https://ssl.gstatic.com;style-src 'self' 'unsafe-inline' data: blob:;media-src *;img-src * 'self' data: content:;script-src * 'unsafe-inline' 'unsafe-eval' data: blob:;">
[phonegap] [console.warn] Content Security Policy has been added: <meta http-equiv="Content-Security-Policy" content="default-src * gap: ws: https://ssl.gstatic.com;img-src * 'self' data: content:;style-src 'self' 'unsafe-inline' data: blob:;script-src * 'unsafe-inline' 'unsafe-eval' data: blob:;">
[phonegap] 200 /__api__/appzip
[phonegap] 200 /socket.io/socket.io.js
[phonegap] 200 /socket.io/?EIO=3&transport=polling&t=MbsaRlk
[phonegap] 200 /socket.io/?EIO=3&transport=polling&t=MbsaRmS&sid=R8RzNxpm8Z-XkKNtAAAD
[phonegap] [console.log] Received Device Ready Event
[phonegap] [console.log] calling setup push
[phonegap] [console.log] calling push init
[phonegap] [console.log] after init
[phonegap] [console.log] Device Push ID:
[phonegap] dijoTzuKUVd:APA91dERSwx0ZeKAg2nqeOCTJnXkeuBqQQQrJgGi4c0m5I_G30IjF6IiHex8Muazj-QlNVmemqPf0dQQgvF0u5eJPMQ-VTTagpGVnQvgqZUEUSlzKnAabrw4kz0W45RnrsbJNKAbFZbh
[phonegap] [console.log] registration event: dijoTzuKUVd:APA91dERSwx0ZeKAg2nqeOCTJnXkeuBqQQQrJgGi4c0m5I_G30IjF6IiHex8Muazj-QlNVmemqPf0dQQgvF0u5eJPMQ-VTTagpGVnQvgqZUEUSlzKnAabrw4kz0W45RnrsbJNKAbFZbh

...同样,一切看起来都很好,屏幕上的消息显示 "registered"。所以一切看起来都很好,除了没有收到消息。并且没有控制台日志通知我任何消息尝试。

我还尝试使用 Firebase 实例 ID 添加测试设备。根据我的代码,我假设 "dijoTzuKUVd:APA91dERSwx0ZeKAg2nqeOCTJnXkeuBqQQQrJgGi4c0m5I_G30IjF6IiHex8Muazj-QlNVmemqPf0dQQgvF0u5eJPMQ-VTTagpGVnQvgqZUEUSlzKnAabrw4kz0W45RnrsbJNKAbFZbh" 是测试设备?所以我添加了它,但 Firebase 说它是 "invalid format"。然后我只尝试了 Firebase 接受的冒号 ("dijoTzuKUVd") 之前的代码(但不知道这是否正确)并尝试再次发送消息。但是还是没有。

有人知道我错过了什么吗?

除此之外,当我在任何浏览器中 运行 应用程序时,我收到 JS 错误:

Uncaught Error: Service Workers are not supported on your browser.
at new PushNotification (push.js:89)
at Object.init (push.js:366)
at Object.setupPush (index.js:42)
at Channel.onDeviceReady (index.js:38)
at Channel.fire (cordova.js:798)
at cordova.js:229

...所以我也无法在浏览器上测试它。

感谢任何帮助。

如果我的回答看起来很愚蠢但有疑问,请原谅...

你的phoneID不是

dijoTzuKUVd

但是

dijoTzuKUVd:APA91dERSwx0ZeKAg2nqeOCTJnXkeuBqQQQrJgGi4c0m5I_G30IjF6IiHex8Muazj-QlNVmemqPf0dQgvF0u5eJPMQ-VTTagpGGVnQvgqZUEUSlzKnAabrw4kz0W45RnrsbJNKAbFZbh

您的通知服务必须通过 FCM 向此 ID 发送通知。

我不知道你是如何发送通知的,但我知道在我开发这些通知的过程中,当我从 Firebase 界面发送通知时遇到了未收到的问题。

从 C# 服务发送时,相同的接收代码有效

Adobe Phonegap 在通过本地服务器进行测试时不再支持通知。

我最终使用 phonegap-plugin-push 库从 FCM 接收推送通知。

https://github.com/phonegap/phonegap-plugin-push