我的应用程序有多种口味。我应该如何设置这个服务器端?我的包名是:
com.example.app
(制作)
com.example.app.staging
(分期)
com.example.app.fake
(假)
这应该是firebase控制台中的3个独立项目吗?
答案 0 :(得分:24)
很大程度上,这取决于您希望项目的工作方式。您可以在同一控制台中设置所有三个,也可以设置为两个或更多不同的项目。这两个选项都有效。
同一项目的好处:
不同项目的好处:
如果使用多个项目,您可以利用build types支持,这将允许您为不同版本提供不同的google-services.json
文件。如果使用一个项目,相同的google-services.json
将适用于所有品种。
注意:正如CodyMace在评论中所说的那样 - 每次添加应用时都要记得重新下载JSON文件!
在任何一种情况下,您都可以采取一些措施来降低风险(例如,在您的数据库中使用dev / stage / prod / keys,并在下面有类似的结构),但对您来说有意义的主要是权衡。
如果您刚刚开始,我建议您在开发过程中从一个项目开始,一旦启动,请考虑将开发环境转移到单独的项目中。分期可以是两种方式。
答案 1 :(得分:3)
注意我还没有完全尝试这个,但是在此记录它是为了在我达到它之前不会丢失它。
实际上并没有强制使用gradle插件,这会强制您为所有风格和构建类型创建一个firebase项目。
这个文档记录很少,但可以在FirebaseApp的文档顶部找到提示,在https://firebase.google.com/docs/configure/处找到更多提示
或者,initializeApp(Context,FirebaseOptions)初始化默认的app实例。应该从Application调用此方法。如果在应用程序的主要过程之外使用它,这也是必要的。
因此,像往常一样抓取google-services.json
,然后从mobilesdk_app_id
和current_key
(api_key
下)获取,这应该是Google Analytics跟踪所需的全部内容。使用该信息在您的应用程序的Application
子类中运行以下内容,以获取您需要的变体:
FirebaseOptions options = new FirebaseOptions.Builder()
.setApplicationId("<mobilesdk_app_id>")
.setApiKey("<current_key>")
.build();
FirebaseApp.initializeApp(this, options);
答案 2 :(得分:0)
如果您想知道如何将 google-services.json 用于不同的 Firebase 后端。 首先将所有相关的 json 文件放在单独的文件夹中,例如:
...src/dev/google-services.json ...src/prod/google-services.json
当构建任务运行到根目录时,您需要根据应用级 gradle 文件中的风格将文件移动
像这样:
android{
...
def flavourName = getCurrentFlavor()
delete 'google-services.json'
clean
if (flavourName == "development") {
copy {
from 'src/dev/'
include '*.json'
into '.'
}
} else if (flavourName == "stagging") {
copy {
from 'src/dev/'
include '*.json'
into '.'
}
} else if (flavourName == "production") {
copy {
from 'src/prod/'
include '*.json'
into '.'
}
} else {
println("NA")
}
}
这里的 getCurrentFlavor() 定义为->
def getCurrentFlavor() {
Gradle gradle = getGradle()
String tskReqStr = gradle.getStartParameter().getTaskRequests().toString()
Pattern pattern
println tskReqStr
if (tskReqStr.contains("assemble"))
pattern = Pattern.compile("assemble(\\w+)(Release|Debug)")
else
pattern = Pattern.compile("generate(\\w+)(Release|Debug)")
Matcher matcher = pattern.matcher(tskReqStr)
if (matcher.find())
return matcher.group(1).toLowerCase()
else {
println "NO MATCH FOUND"
return ""
}
}