expo:如何根据发布渠道 expo 加载不同的 google-services-json

Dar*_*e77 5 push-notification firebase react-native firebase-cloud-messaging expo

我为每个releaseChannel都有一个不同的google-service.json文件(用于prod、stage、QA和dev的文件)

\n

有关更多详细信息,我想在不同的环境中实现推送通知。\ncuz 我不想在 QA 中发送测试通知并将通知发送给产品用户!

\n

这是android配置app.json

\n
"android": {\n      "googleServicesFile": "./google-services.json",\n      "adaptiveIcon": {\n        "foregroundImage": "./src/assets/adaptive-icon.png"\n      },\n      "permissions": [\n        "android.permission.CAMERA",\n        "android.permission.ACCESS_FINE_LOCATION",\n        "android.permission.WRITE_EXTERNAL_STORAGE",\n        "android.permission.READ_EXTERNAL_STORAGE",\n        "android.permission.ACTION_BOOT_COMPLETED",\n        "android.permission.RECORD_AUDIO",\n        "com.google.android.gms.permission.AD_ID"\n      ],\n      "package": "com.beyondbelievers.awal",\n      "versionCode": 1\n    },\xc3\x8f\n
Run Code Online (Sandbox Code Playgroud)\n

有什么方法可以在每个环境中加载不同的文件吗?

\n

Dar*_*e77 6

这个答案的灵感来自于一个老问题,你可以在这里查看, 在我搜索了整个互联网之后,我找到了一种方法,但是使用app.config.js

我将尝试通过以下步骤解释我如何实现我的目标:

{
    "qa": {
      ...
      "releaseChannel": "qa",
      "env": {
        "APP_VARIANT": "qa"
      }
      ...
    },
    "stage": {
      ...
      "releaseChannel": "stage",
      "env": {
        "APP_VARIANT": "stage"
      }
      ...
    },
    "prod": {
      ...
      "releaseChannel": "prod",
      "env": {
        "APP_VARIANT": "prod"
      }
      ...
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

"APP_VARIANT"变量包含 env 的类型,基于它我可以稍后检查哪个文件给我们。

  • 现在回到app.config.js添加以下行:

    // this will return the value of APP_VARIANT defined in eas.json
    const APP_RELEASE_CHANNEL = process.env.APP_VARIANT;
    
    // define the AndroidGoogleServicesFile variable to use instead of the normal string and assign a default value to it
    let AndroidGoogleServicesFile = "./google-services-dev.json";
    
    
    // now check the value of the APP_VARIANT and based on it assign the path of the google-services you wanna use
        if (APP_RELEASE_CHANNEL === "qa") {
          AndroidGoogleServicesFile = "./google-services-qa.json";
        } else if (APP_RELEASE_CHANNEL === "stage") {
          AndroidGoogleServicesFile = "./google-services-stage.json";
        } else if (APP_RELEASE_CHANNEL === "prod") {
          AndroidGoogleServicesFile = "./google-services-prod.json";
        }

Run Code Online (Sandbox Code Playgroud)
  • 现在您知道需要使用哪个文件了,剩下的一步是分配该文件,以便您的应用程序可以使用它
android: {
    ...
    googleServicesFile: AndroidGoogleServicesFile,
    ...
  },
Run Code Online (Sandbox Code Playgroud)

这就是我解决我的问题的方法,我希望这也能解决你的问题。

如果您不明白我欢迎更详细地解释