繁体   English   中英

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

[英]Cordova-Plugin-Firebase, iOS: device receives push notification but does not appear on device

测试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 for 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

--save标志或检测到自动保存

将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]无法下载设置错误域= FABNetworkError代码= -5“(空)” 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)

这是我第二天尝试使APN通过cordova-plugin-firebase工作(我也尝试过“ fcm”插件,并且也出现了空白),不用说Cordova Android版本可以直接使用。

有人对我做错了什么想法吗?


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

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

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

getDeviceToken() {
    if (this.platform.is('ios')) {
      this.firebase.grantPermission()
        .then((success) => {
          if (success) {
            this.doGetDeviceToken();
          }
        });
    } else {
      this.doGetDeviceToken();
    }
   }

doGetDeviceToken() {
    this.firebase.getToken()
      .then((token) => this.setToken(token))
      .catch((error) => this.handleError(error));
    this.firebase.onTokenRefresh()
      .subscribe((token) => this.setToken(token));
  }

如果以上两个步骤不能解决您的问题,请删除并尝试添加Firebase插件以及iOS平台。 它应该工作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM