Ionic framework 如何使用ionic v3在一个项目中集成两个或多个google-services.json文件
我正在爱奥尼亚v3做一个项目。我需要为推送通知集成一个或多个fcm项目 说明: 项目名称为Ionic framework 如何使用ionic v3在一个项目中集成两个或多个google-services.json文件,ionic-framework,firebase-cloud-messaging,Ionic Framework,Firebase Cloud Messaging,我正在爱奥尼亚v3做一个项目。我需要为推送通知集成一个或多个fcm项目 说明: 项目名称为示例 包id为com.example.in 然后,我使用两个不同的用户帐户创建两个fcm项目,使用相同的包id和相同的项目名称 现在我需要在我的应用程序中集成这两个fcm项目。我该如何实现这一点呢?我今天花了一整天的时间来解决同样的挑战。我感到惊讶的是,这似乎是一个非常常见的挑战,但却没有在网络上得到解决(或者我在搜索中使用了错误的术语)。无论如何,这对我来说是有效的(在浏览器中测试): 免责声明:我只是
示例
包id为com.example.in
然后,我使用两个不同的用户帐户创建两个fcm项目,使用相同的包id和相同的项目名称
现在我需要在我的应用程序中集成这两个fcm项目。我该如何实现这一点呢?我今天花了一整天的时间来解决同样的挑战。我感到惊讶的是,这似乎是一个非常常见的挑战,但却没有在网络上得到解决(或者我在搜索中使用了错误的术语)。无论如何,这对我来说是有效的(在浏览器中测试):
免责声明:我只是为Android做的,你需要在我下面的步骤中添加iOS(我认为应该遵循相同的步骤)
build before.js
:
module.exports=函数(ctx){
控制台日志(ctx);
var fs=要求(“fs”);
var xmlConfig=“config.xml”
if(ctx.build.configuration=='production'){
var srcfile=“src/production/google services.json”;
var destfile=“google services.json”;
var srcconfifile=“src/production/config.xml”;
var destconfifile=“config.xml”;
log(“将“+srcfile+”复制到“+destfile”);
createReadStream(srcConfigfile).pipe(fs.createWriteStream(destConfigfile));
createReadStream(srcfile).pipe(fs.createWriteStream(destfile));
}否则{
log(“未设置目标环境变量。使用默认值”);
var srcfile=“src/development/google services.json”;
var destfile=“google services.json”;
var srcconfifile=“src/development/config.xml”;
var destconfifile=“config.xml”;
log(“将“+srcfile+”复制到“+destfile”);
createReadStream(srcConfigfile).pipe(fs.createWriteStream(destConfigfile));
createReadStream(srcfile).pipe(fs.createWriteStream(destfile));
}
}
今天我花了一整天的时间来解决同样的挑战。我感到惊讶的是,这似乎是一个非常常见的挑战,但却没有在网络上得到解决(或者我在搜索中使用了错误的术语)。无论如何,这对我来说是有效的(在浏览器中测试):免责声明:我只是为Android做的,你需要在我下面的步骤中添加iOS(我认为应该遵循相同的步骤)
build before.js
:
module.exports=函数(ctx){
控制台日志(ctx);
var fs=要求(“fs”);
var xmlConfig=“config.xml”
if(ctx.build.configuration=='production'){
var srcfile=“src/production/google services.json”;
var destfile=“google services.json”;
var srcconfifile=“src/production/config.xml”;
var destconfifile=“config.xml”;
log(“将“+srcfile+”复制到“+destfile”);
createReadStream(srcConfigfile).pipe(fs.createWriteStream(destConfigfile));
createReadStream(srcfile).pipe(fs.createWriteStream(destfile));
}否则{
log(“未设置目标环境变量。使用默认值”);
var srcfile=“src/development/google services.json”;
var destfile=“google services.json”;
var srcconfifile=“src/development/config.xml”;
var destconfifile=“config.xml”;
log(“将“+srcfile+”复制到“+destfile”);
createReadStream(srcConfigfile).pipe(fs.createWriteStream(destConfigfile));
createReadStream(srcfile).pipe(fs.createWriteStream(destfile));
}
}
我也遇到了类似的问题,但需要在Ionic Appflow和本地配置上运行Google Plist。对于适用于Mono Repo、Appflow和多个环境的解决方案,请执行以下操作
创建一个包含您的环境的文件夹结构,对我们来说是
configs/develop
--> google-services.json & GoogleService-Info.plist
configs / qa
--> google-services.json & GoogleService-Info.plist
configs / staging
--> google-services.json & GoogleService-Info.plist
configs / production
--> google-services.json & GoogleService-Info.plist
创建一个pre-build-config.js脚本
#!/usr/bin/env node
var fs = require("fs");
const [, , ...args] = process.argv
const configArg = args;
if (configArg.toString() == 'develop') {
console.log('Pre-build - Configuring Android:', configArg);
var srcfileAndroid = 'configs/' + configArg + '/google-services.json';
var destfileAndroid = "projects/startup-wars-app/android/app/google-services.json";
console.log("copying " + srcfileAndroid + " to " + destfileAndroid);
fs.createReadStream(srcfileAndroid).pipe(fs.createWriteStream(destfileAndroid));
console.log('Pre-build - Configuring iOS:', configArg);
var srcfileiOS = 'configs/' + configArg + '/GoogleService-Info.plist';
var destfileiOS = "projects/startup-wars-app/ios/app/GoogleService-Info.plist";
console.log("copying " + srcfileiOS + " to " + destfileiOS);
fs.createReadStream(srcfileiOS).pipe(fs.createWriteStream(destfileiOS));
} else {
console.error("TARGET environment variable is not set. Cannot set Firebase Config with Arg:", configArg);
}
别忘了
chmod+x预构建config.js
在你的床上
/projects/startup-wars-app/ios/app/GoogleService-Info.plist
/projects/startup-wars-app/android/app/google-services.json
现在创建一个清理脚本,以删除移动到Ionic应用程序中的文件。如果缺少正确的文件,这将防止混淆,并在生成步骤中引发错误
#!/usr/bin/env node
var fs = require("fs");
var srcfileAndroid = "projects/startup-wars-app/android/app/google-services.json";
var srcfileiOS = "projects/startup-wars-app/ios/app/GoogleService-Info.plist";
console.log('After build cleanup of dynamic config files:');
try {
fs.unlinkSync(srcfileAndroid);
fs.unlinkSync(srcfileiOS);
} catch (err) {
console.error(err);
}
在Package.json中,使用npm钩子调用预构建和清理脚本
"prebuild:app:develop": "./pre-build-config.js develop",
"build:app:develop": "npm run check-imports && ng build --project startup-wars-app",
"postbuild:app:qa": "./after-build-cleanup.js",
就这样-这应该涵盖iOS和Android
注意:如果您不使用mono repo,路径将有所不同,但除此之外,路径完全相同。我也遇到过类似问题,但需要Google Plist在Ionic Appflow和本地配置上运行。对于适用于Mono Repo、Appflow和多个环境的解决方案,请执行以下操作 创建一个包含您的环境的文件夹结构,对我们来说是
configs/develop
--> google-services.json & GoogleService-Info.plist
configs / qa
--> google-services.json & GoogleService-Info.plist
configs / staging
--> google-services.json & GoogleService-Info.plist
configs / production
--> google-services.json & GoogleService-Info.plist
创建一个pre-build-config.js脚本
#!/usr/bin/env node
var fs = require("fs");
const [, , ...args] = process.argv
const configArg = args;
if (configArg.toString() == 'develop') {
console.log('Pre-build - Configuring Android:', configArg);
var srcfileAndroid = 'configs/' + configArg + '/google-services.json';
var destfileAndroid = "projects/startup-wars-app/android/app/google-services.json";
console.log("copying " + srcfileAndroid + " to " + destfileAndroid);
fs.createReadStream(srcfileAndroid).pipe(fs.createWriteStream(destfileAndroid));
console.log('Pre-build - Configuring iOS:', configArg);
var srcfileiOS = 'configs/' + configArg + '/GoogleService-Info.plist';
var destfileiOS = "projects/startup-wars-app/ios/app/GoogleService-Info.plist";
console.log("copying " + srcfileiOS + " to " + destfileiOS);
fs.createReadStream(srcfileiOS).pipe(fs.createWriteStream(destfileiOS));
} else {
console.error("TARGET environment variable is not set. Cannot set Firebase Config with Arg:", configArg);
}
别忘了
chmod+x预构建config.js
在你的床上
/projects/startup-wars-app/ios/app/GoogleService-Info.plist
/projects/startup-wars-app/android/app/google-services.json
现在创建一个清理脚本,以删除移动到Ionic应用程序中的文件。如果缺少正确的文件,这将防止混淆,并在生成步骤中引发错误
#!/usr/bin/env node
var fs = require("fs");
var srcfileAndroid = "projects/startup-wars-app/android/app/google-services.json";
var srcfileiOS = "projects/startup-wars-app/ios/app/GoogleService-Info.plist";
console.log('After build cleanup of dynamic config files:');
try {
fs.unlinkSync(srcfileAndroid);
fs.unlinkSync(srcfileiOS);
} catch (err) {
console.error(err);
}
在Package.json中,使用npm钩子调用预构建和清理脚本
"prebuild:app:develop": "./pre-build-config.js develop",
"build:app:develop": "npm run check-imports && ng build --project startup-wars-app",
"postbuild:app:qa": "./after-build-cleanup.js",
就这样-这应该涵盖iOS和Android
注意:如果不使用mono回购,路径将不同,