Ionic framework 如何使用ionic v3在一个项目中集成两个或多个google-services.json文件

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项目。我该如何实现这一点呢?我今天花了一整天的时间来解决同样的挑战。我感到惊讶的是,这似乎是一个非常常见的挑战,但却没有在网络上得到解决(或者我在搜索中使用了错误的术语)。无论如何,这对我来说是有效的(在浏览器中测试): 免责声明:我只是

我正在爱奥尼亚v3做一个项目。我需要为推送通知集成一个或多个fcm项目

说明:

项目名称为
示例

包id为
com.example.in

然后,我使用两个不同的用户帐户创建两个fcm项目,使用相同的包id和相同的项目名称


现在我需要在我的应用程序中集成这两个fcm项目。我该如何实现这一点呢?

我今天花了一整天的时间来解决同样的挑战。我感到惊讶的是,这似乎是一个非常常见的挑战,但却没有在网络上得到解决(或者我在搜索中使用了错误的术语)。无论如何,这对我来说是有效的(在浏览器中测试):

免责声明:我只是为Android做的,你需要在我下面的步骤中添加iOS(我认为应该遵循相同的步骤)


  • 在项目中创建以下文件和目录(这些是源文件,其中两个Firebase项目的配置都是硬编码的。由于包名不同,需要替换config.xml):

  • 利用ionic钩子,创建包含以下脚本的文件
    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(我认为应该遵循相同的步骤)


  • 在项目中创建以下文件和目录(这些是源文件,其中两个Firebase项目的配置都是硬编码的。由于包名不同,需要替换config.xml):

  • 利用ionic钩子,创建包含以下脚本的文件
    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回购,路径将不同,