【发布时间】:2019-04-12 08:53:30
【问题描述】:
测试 Cordova Firebase 插件:在 Android 上工作; iOS,没有这样的运气......
我已经在我的开发者帐户和我的 Mac 上创建了必要的 ID、证书和私钥,并在 Firebase 控制台中设置了“iOS”应用程序。 仅供参考:在 Firebase 的 Cloud Messaging 配置中,我使用的是 APN Auth Key 方法而不是开发证书,因为 Firebase 表明偏好 Auth Key 方法。
所以我创建了一个新的 Cordova 应用程序 - 想象中称为“pushnotificationsdemo”,以下是我用于创建应用程序、配置 FCM 并对其进行测试的步骤:
使用 Firebase 插件创建 Cordova 应用:
cordova —version
8.1.2 (cordova-lib@8.1.1)
cordova pushnotificationsdemo com.XXX.pushnotifications.com “Push Notifications Demo”
cd push*
cordova plugin add cordova-plugin-firebase
[将从 Firebase 控制台下载的“GoogleService-Info.plist”复制到新 Cordova 项目的根文件夹]
cordova platform add ios
*将cordova-fetch用于cordova-ios@~4.5.4
正在添加 ios 项目...
为 iOS 平台创建 Cordova 项目:
路径:平台/ios
包:com.foliagos.pushnotificationsdemo
名称:推送通知演示
使用 cordova-ios@4.5.5 创建的 iOS 项目
为 ios 安装“cordova-plugin-firebase”
在 config.xml 中发现插件“cordova-plugin-whitelist”。将其添加到项目中
为 ios 安装“cordova-plugin-whitelist”
将 cordova-plugin-whitelist 添加到 package.json
将“cordova-plugin-whitelist”的插件信息保存到 config.xml
在 iOS 上准备 Firebase
--保存标志或检测到自动保存
将 ios@~4.5.5 保存到 config.xml 文件中...*
在 Xcode(10.1 版)中打开 iOS 项目:
- 在“常规”中设置签名团队(以在我尝试使用 Cordova 命令行构建应用程序时停止 Code 65 错误)
我使用的是 Xcode10,所以在那里我还将构建类型设置为“旧”系统(因为 Cordova 8.1.2 与新的构建系统不兼容):
文件 |工作区设置
构建系统:“旧版构建系统”
因为我想看到很多调试输出,所以我也在 Xcode 中设置了这个:
- 产品 |方案 |编辑方案 |选项卡:Arguments —> Arguments Passed On Launch,添加:“-FIRAnalyticsDebugEnabled”
并将以下内容添加到“Resources”项目文件夹中的“Push Notifications Demo-Info.plist”文件中:
“UIBackgroundModes”
使用以下密钥:“远程通知”
我还在 Cordova 的 config.xml 中添加了以下首选项以关闭云备份:
<preferencename="BackupWebStorage"value="none"/>
现在我从命令行构建新的 Cordova 应用程序(使用旧的构建系统):
cordova build ios --buildFlag='-UseModernBuildSystem=0'
存档构建成功!
回到 Xcode,我构建了应用程序并将以下内容写入控制台:
11 月 8 日 17:50:54 推送通知演示 [414]:- [I-ACS036002] 分析屏幕报告已启用。调用 +[FIRAnalytics setScreenName:setScreenClass:] 设置屏幕名称或覆盖默认屏幕类名称。要禁用屏幕报告,请在 Info.plist 中将标志 FirebaseScreenReportingEnabled 设置为 NO(布尔值)
2018-11-08 17:50:54.312 推送通知演示[414:66091] DiskCookieStorage 将策略从 2 更改为 0,cookie 文件:file:///private/var/mobile/Containers/Data/Application/8AC0457B -0792-4A8F-8FFA-25655DB5DD8A/Library/Cookies/Cookies.binarycookies
2018-11-08 17:50:54.558 推送通知演示 [414:66091] Apache Cordova 本机平台版本 4.5.5 正在启动。
2018-11-08 17:50:54.558 推送通知演示 [414:66091] 多任务 -> 设备:是,应用程序:是
2018-11-08 17:50:54.691 推送通知演示[414:66091] 使用 UIWebView
2018-11-08 17:50:54.697 推送通知演示[414:66091] [CDVTimer][console] 0.401020ms
2018-11-08 17:50:54.698 推送通知演示[414:66091] [CDVTimer][handleopenurl] 0.479937ms
2018-11-08 17:50:54.707 推送通知演示[414:66091] [CDVTimer][intentandnavigationfilter] 8.823991ms
2018-11-08 17:50:54.708 推送通知演示[414:66091] [CDVTimer][gesturehandler] 0.429988ms
2018-11-08 17:50:54.708 推送通知演示 [414:66091] 启动 Firebase 插件
2018-11-08 17:50:54.709 推送通知演示[414:66091] [CDVTimer][firebaseplugin] 0.813961ms
2018-11-08 17:50:54.709 推送通知演示[414:66091] [CDVTimer][TotalPluginStartup] 13.291001ms
2018-11-08 17:50:54.739 推送通知演示 [414:66091] 找到 GoogleService-Info.plist,设置:[FIRApp configureWithOptions]
2018-11-08 17:50:54.802 推送通知演示 [414:66091] [Crashlytics] 版本 3.10.7 (130)
11 月 8 日 17:50:55 推送通知演示 [414]:5.7.0 - [Firebase/Analytics][I-ACS023007] Analytics v.50101000 开始
11 月 8 日 17:50:55 推送通知演示 [414]:5.7.0 - [Firebase/Messaging][I-FCM001000] FIRMessaging 远程通知代理已启用,将调动远程通知接收器处理程序。如果您希望手动集成 Firebase 消息传递,请将“FirebaseAppDelegateProxyEnabled”添加到您的 Info.plist,并将其设置为 NO。按照以下说明操作:
https://firebase.google.com/docs/cloud-messaging/ios/client#method_swizzling_in_firebase_messaging
以确保正确集成。
11 月 8 日 17:50:55 推送通知演示 [414]:5.7.0 - [Firebase/Messaging][I-FCM002023] 对象不响应 -messaging:didReceiveRegistrationToken:。请实现 -messaging:didReceiveRegistrationToken: 以提供 FCM 令牌。
11 月 8 日 17:50:55 推送通知演示 [414]:5.7.0 - [Firebase/Analytics][I-ACS023008] 要启用调试日志记录,请设置以下应用程序参数:-FIRAnalyticsDebugEnabled
2018-11-08 17:50:56.008 推送通知演示 [414:66091] 由于页面加载而重置插件。
2018-11-08 17:50:56.165 推送通知演示 [414:66091] 已连接到 FCM。
2018-11-08 17:50:56.169 推送通知演示[414:66091] InstanceID 令牌:e2Ds2K2cQbI:APA91bE…MqU
2018-11-08 17:50:56.358 推送通知演示[414:66091] 完成加载:file:///var/containers/Bundle/Application/39065AA6-1AEA-4EF5-A4D9-009185D6BE6D/Push% 20Notifications%20Demo.app/www/index.html
2018-11-08 17:50:56.373 Push Notifications Demo[414:66153] [Fabric] 未能下载设置错误 Domain=FABNetworkError Code=-5 "(null)" UserInfo={type=2, request_id= 7f2cefa10b4df773f0466752024ec30a,内容类型=应用程序/json;字符集=utf-8,状态码=403}
2018-11-08 17:50:56.537 推送通知演示[414:66091] 收到事件:设备就绪
应用程序正在连接的 iPhone(iOS 版本 9.3.5)上运行,并显示演示 Cordova 应用程序的“设备就绪”初始屏幕。
现在我应该能够向运行 Cordova 应用程序的 iPhone 发送推送通知了吗?为此,我转到 Firebase 控制台并发送一条云消息(我正在使用 APNs 身份验证密钥),我在“设备测试”选项中指定实例令牌(显示在前面的控制台输出中)发送它,然后我在 Xcode 控制台中得到以下输出:
2018-11-08 18:03:31.091 Push Notifications Demo[414:66091] {
"collapse_key" = "com.XXX.pushnotificationsdemo";
from = 293106682585;
notification = {
body = "Test notification to iOS device";
e = 1;
};
tap = 0;
}
太棒了!设备收到通知。但是我在设备本身上没有弹出通知。
注意:该应用尚未请求使用推送通知的权限(我在使用“fcm”插件进行测试时确实收到了此请求)
好的,这可能是因为应用程序在前台?所以我按下 iPhone 上的 Home 按钮将其置于后台,然后在 Xcode 控制台中得到这个:
2018-11-08 18:07:05.856 推送通知演示 [414:66091] 与 FCM 断开连接
不太好,设备现在已与 FCM 断开连接!
我将应用程序带回前台,瞧!控制台现在报告:
2018-11-08 18:08:26.581 推送通知演示 [414:66091] 已连接到 FCM。
2018-11-08 18:08:26.586 推送通知演示[414:66091] InstanceID 令牌:e2Ds2K2cQbI:APA91bE…MqU
所以事情进展不顺利!看来我的 Cordova 应用程序没有使用 APN 将通知推送到设备,而是直接使用 Firebase(假设:当应用程序在后台时 Firebase 无法处理,而 APN 可以,因此,没有使用 APN)
这是我尝试让 APN 通过cordova-plugin-firebase 工作的第二天(我也尝试过“fcm”插件,这也是空白),不用说 Cordova Android 版本成功了盒子。
有人对我做错了什么有任何想法吗?
我用来设置 Firebase 以用于 iOS 的说明:
【问题讨论】:
-
我也有同样的问题,你解决了吗?
标签: ios xcode firebase cordova push-notification