在Cordova中使用FCM

时间:2016-07-14 10:17:14

标签: android json cordova google-cloud-messaging firebase-cloud-messaging

我在Cordova项目中使用FCM。我在FCM Web控制台中创建了一个项目,并使用项目的包名google-services.json生成了com.mycompany.myapp文件。我不得不把这个文件放在两个地方才能成功编译:android项目根文件夹和'CordovaLib'子文件夹。问题是这两个副本中的每一个都应指定不同的包名:项目根文件夹的副本应指定com.mycompany.myappCordovaLib中的副本应指定com.apache.cordova。否则,项目将无法编译。

当我手动修改文件google-services.json中的包名称时,编译成功,但不会发送通知。

我的问题是:如何生成与Cordova一起使用的google-services.json文件?我应该在FCM控制台(com.mycompany.myappcom.mycompany.myapp)中指定哪个包名称?我可以生成适用于许多包的文件吗?

[编辑]

如果你需要知道,Cordova项目是从Sencha ExtJS6应用程序生成的,我使用“cordova-plugin-fcm”。在platforms\android文件夹中,有一个名为CordovaLib的文件夹,其中包含build.gradlesrc。如果我不将google-services.json复制到此位置,则项目将无法编译。此src文件夹中的类具有包名com.apache.cordova

1 个答案:

答案 0 :(得分:3)

正如对该问题的评论所表明的那样,解决方案是仅将google-services.json放在项目的根目录中。我将解释为什么我遇到这个问题,以便其他人可能不会犯同样的错误。

在Firebase控制台中创建项目和应用程序时,会出现一个包含以下说明的窗口:

  

将Firebase添加到您的Android应用

     

Gradle的Google服务插件会加载您刚刚下载的google-services.json文件。修改build.gradle文件以使用该插件。

     

1 - 项目级build.gradle(< project \> /build.gradle):

     

buildscript {

     

依赖项{

// Add this line

classpath 'com.google.gms:google-services:3.0.0'
     

}

     

}

     

2 - App-level build.gradle(< project> /< app-module> /build.gradle):

     

...

     

//添加到文件的底部

     

应用插件:' com.google.gms.google-services'

所以,我在子文件夹apply plugin ...的{​​{1}}文件中添加了build.gradle行(这是错误的,它应该放在同一个CordovaLib文件中项目根文件夹),它不会编译unles我在该文件夹中添加build.gradle。因此,错误的来源是不假思索地遵循上述说明。

结论:在Cordova生成的Android应用程序中,将两个修改放在项目根目录的google-services.json文件中,并将build.gradle仅放在根目录中。