Firebase 推送通知与 PhoneGap Build 使用 cordova-plugin-fcm

Posted

技术标签:

【中文标题】Firebase 推送通知与 PhoneGap Build 使用 cordova-plugin-fcm【英文标题】:Firebase Push notifications with PhoneGap Build using cordova-plugin-fcm 【发布时间】:2016-09-28 18:12:46 【问题描述】:

我需要在我正在开发的 PhoneGap Build 应用中实现推送通知。

我没有找到太多关于使用新的 Google 服务 Firebase Cloud Messaging (FCM) 的文档,但由于它应该是我们现在必须使用的,所以我搜索了一个可以让我的生活更轻松的 API。

我找到了:https://www.npmjs.com/package/cordova-plugin-firebase

所以我添加到我的 config.xml 中:

<plugin name="cordova-plugin-fcm" source="npm" />

然后将我从https://console.firebase.google.com/ 创建的 google-services.json 放入我压缩后上传到 Phonegap Build 的文件夹的根目录中。

但我收到以下错误:

Execution failed for task ':processReleaseGoogleServices'.
> File google-services.json is missing. The Google Services Plugin cannot function without it. 
  Searched Location: 
  /project/src/release/google-services.json
  /project/google-services.json

我在根目录中创建了“项目”文件夹并将文件放在那里,但这也不起作用。

目前我的应用文件夹如下所示:

\css
\img
\js
\res (icons and splashscreens)
index.html
config.xml
google-services.json

如果有人知道我必须将该文件放在哪里或有任何其他方式来实现这一点,即使使用其他 API,我将不胜感激。 我从来没有使用过Phonegap CLI,我一直在使用Phonegap Build。

【问题讨论】:

【参考方案1】:

Cordova 前段时间引入了resource-file 标签,它也适用于Phonegap Build。

您可以使用它而不是分叉插件来复制 google-services.jsonGoogleService-Info.plist 文件

将 放在项目的根目录中,并在 config.xml 中使用 resource-file 标签,如下所示:

如果使用 cordova-android 7 或更新版本:

<platform name="android">
  <resource-file src="google-services.json" target="app/google-services.json" />
</platform>

旧版本

<platform name="android">
  <resource-file src="google-services.json" target="google-services.json" />
</platform>

ios

<platform name="ios">
  <resource-file src="GoogleService-Info.plist" />
</platform>

您也可以将其放在www 文件夹中,在这种情况下,在我的示例中,在src 字段中的文件名之前添加www/

https://cordova.apache.org/docs/en/7.x/config_ref/index.html#resource-file

【讨论】:

【参考方案2】:

文件需要在www文件夹旁边,问题是Phonegap Build只允许你上传该文件夹的内容,所以你不能上传文件。

幸运的是,您可以做一些事情; Build 直接从 npm 安装插件,插件可以在整个项目中工作,所以你需要一个插件来为你复制文件 [google-services.json, GoogleService-Info.plist]。

大部分工作已经完成:cordova-plugin-fcm-config。

此插件复制项目根文件夹和 Xcode 项目中所需的 FCM 配置。它与伟大的 cordova-plugin-fcm 插件结合使用。

它不是为此目的而构建的,但效果很好。

虽然增加了复杂性;由于您无法上传插件(您只能在config.xml 中添加对它的引用),并且此插件需要您自己的应用配置文件,您必须:

    将插件克隆/分叉到您自己的存储库中。 替换配置文件。 上传到 Build 可以找到的地方。

你在哪里上传?这可能很棘手。基础设施是围绕插件用于通用目的并且可以在每个项目 xml 中配置的想法构建的,因此 npm 是有意义的。但在这种情况下,您的插件将包含非常具体的项目数据,因此在我看来,上传到 npm 会污染命名空间。

我不了解你,但我有一个付费帐户,所以我将插件发布在我自己的存储库中并作为私人插件提交。这是我推荐的。

【讨论】:

非常感谢,效果很好!好吧,至少我能够编译它,现在我必须看看 cordova-plugin-fcm 插件是否真的有效。非常感谢! 仅供参考,您还可以克隆项目并将其免费托管在 bitbucket 的个人存储库中。然后在你的配置文件中使用 username:password@bitbucket.org/username/…> 感谢您的回答。两个跟进:1)为什么 cordova-plugin-fcm 不只包含复制功能? 2)有没有办法以相同的方式解决配置文件问题(以某种方式从www文件夹中复制)? 谢谢@Guy,这是一个非常好的技巧。也许甚至值得一个完整的答案?【参考方案3】:

对我来说,我必须进入 .xcodeproj 文件并将主界面从 MainViewController.xib 更改为 CDVLaunchScreen.storyboard

重建并且它起作用了。我的应用是用 Ionic 构建的,我在 Ionic Creator 中启动它。

【讨论】:

以上是关于Firebase 推送通知与 PhoneGap Build 使用 cordova-plugin-fcm的主要内容,如果未能解决你的问题,请参考以下文章

当应用程序打开或应用程序处于后台时,Phonegap Firebase 推送通知不会触发事件侦听器

在Phonegap中推送通知?

如何在firebase中处理推送通知

Cordova 中的后台 Firebase 推送通知

将 Parse 推送通知与 Phonegap 集成

Require.js 与 Phonegap 和 iO 推送通知