iOS的Cordova-Plugin-Firebase:设备收到推送通知,但未显示在设备上

时间:2018-11-08 19:15:18

标签: ios xcode firebase cordova push-notification

测试Cordova Firebase插件:可在Android上运行; iOS,没有这种运气...

我已经在开发人员帐户和Mac上创建了必要的ID,证书和私钥,并在Firebase控制台中设置了“ iOS”应用。 仅供参考:在Firebase的Cloud Messaging配置中,我使用的是APN Auth Key方法,而不是dev证书,因为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中设置了它:

  • 产品|方案|编辑方案|选项卡:参数—>在启动时传递的参数,添加以下内容:“-FIRAnalyticsDebugEnabled”

并将以下内容添加到“资源”项目文件夹中的“推送通知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使用UIWebView推送通知演示[414:66091]

2018-11-08 17:50:54.697推送通知演示[414:66091] [CDVTimer] [控制台] 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 Messaging,请将“ 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推送通知演示[414:66153] [Fabric]无法下载设置错误Domain = FABNetworkError Code = -5“(null)” UserInfo = {type = 2,request_id = 7f2cefa10b4df773f0466752024ec30a,content_type = application / json; charset = utf-8,status_code = 403}

2018-11-08 17:50:56.537推送通知演示[414:66091]收到的事件:deviceready


该应用程序正在连接的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上的“主页”按钮,将其置于背景中,并在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(假设:当应用程序在后台且APN可以使用时,Firebase无法处理,因此,没有使用APN)

这是我第二天试图通过Cordova-plugin-firebase来使APN工作(我也尝试过“ fcm”插件,并且也出现了空白),不用说Cordova Android版本已经解决了的盒子。

有人对我在做什么错有任何想法吗?


我用来设置Firebase与iOS一起使用的说明:

https://medium.com/@felipepucinelli/how-to-add-push-notifications-in-your-cordova-application-using-firebase-69fac067e821

1 个答案:

答案 0 :(得分:0)

首先,在“ Xcode首选项设置”的“高级位置”下,将构建位置选择为“唯一”。这应该可以帮助您直接从Xcode进行构建。 其次,在FCM注册部分中,为iOS放置一个平台检查器,如果是,则在iOS中寻求通知的许可。这可以使用完成。

func bubbleTappedHandler(sender: UITapGestureRecognizer) {

    let touchPoint = sender.location(in: self.tableView)
    if let indexPath = tableView.indexPathForRow(at: touchPoint) {

        if indexPath == currentSelectedIndexPath {
            currentSelectedIndexPath = nil
            tableView.reloadRows(at: [indexPath], with: .automatic)
        } else {
            if (currentSelectedIndexPath != nil){
                if let prevSelectedIndexPath = currentSelectedIndexPath {
                    currentSelectedIndexPath = indexPath
                    tableView.reloadRows(at: [prevSelectedIndexPath, indexPath], with: .automatic)
                }
            } else {
                currentSelectedIndexPath = indexPath
                tableView.reloadRows(at: [indexPath], with: .automatic)
            }

        }

        DispatchQueue.main.asyncAfter(deadline: .now() + 0.1, execute: { [weak self] in
            let currentIndexPath = self?.currentSelectedIndexPath ?? indexPath
            self?.tableView.scrollToRow(at: currentIndexPath, at: .top, animated: false)
        })
    }
}

如果以上两个步骤仍无法解决您的问题,请删除并尝试添加Firebase插件以及iOS平台。应该可以。