版本记录
版本号 | 时间 |
---|---|
V1.0 | 2021.01.03 星期日 |
前言
今天翻阅苹果的API文档,发现多了一个框架SwiftUI,这里我们就一起来看一下这个框架。感兴趣的看下面几篇文章。
1. SwiftUI框架详细解析 (一) —— 基本概览(一)
2. SwiftUI框架详细解析 (二) —— 基于SwiftUI的闪屏页的创建(一)
3. SwiftUI框架详细解析 (三) —— 基于SwiftUI的闪屏页的创建(二)
4. SwiftUI框架详细解析 (四) —— 使用SwiftUI进行苹果登录(一)
5. SwiftUI框架详细解析 (五) —— 使用SwiftUI进行苹果登录(二)
6. SwiftUI框架详细解析 (六) —— 基于SwiftUI的导航的实现(一)
7. SwiftUI框架详细解析 (七) —— 基于SwiftUI的导航的实现(二)
8. SwiftUI框架详细解析 (八) —— 基于SwiftUI的动画的实现(一)
9. SwiftUI框架详细解析 (九) —— 基于SwiftUI的动画的实现(二)
10. SwiftUI框架详细解析 (十) —— 基于SwiftUI构建各种自定义图表(一)
11. SwiftUI框架详细解析 (十一) —— 基于SwiftUI构建各种自定义图表(二)
12. SwiftUI框架详细解析 (十二) —— 基于SwiftUI创建Mind-Map UI(一)
13. SwiftUI框架详细解析 (十三) —— 基于SwiftUI创建Mind-Map UI(二)
14. SwiftUI框架详细解析 (十四) —— 基于Firebase Cloud Firestore的SwiftUI iOS程序的持久性添加(一)
15. SwiftUI框架详细解析 (十五) —— 基于Firebase Cloud Firestore的SwiftUI iOS程序的持久性添加(二)
16. SwiftUI框架详细解析 (十六) —— 基于SwiftUI简单App的Dependency Injection应用(一)
17. SwiftUI框架详细解析 (十七) —— 基于SwiftUI简单App的Dependency Injection应用(二)
开始
首先看下主要内容:
在本教程中,您将学习
Firebase Remote Config
教程。内容来自翻译。
接着看下写作环境
Swift 5, iOS 14, Xcode 12
接着就是正文啦。
还记得您发布应用程序的那段时间,它在各个方面都很完美吗?您再也不必触碰另一行代码了,因为您在第一时间就设法使所有内容正确无误?
成为成功的应用程序开发人员通常意味着经常更改您的应用程序。有时,这些更改是新功能或错误bug
。但有时,最有影响力的更新是对代码的单行更改,例如,调整文本行或在塔防游戏中使用强大的单元。
尽管很容易进行这些更改,但是发布它们仍然是一个为期数天的过程。如果您不必进行整个过程就可以进行一些调整,那会很好吗?
Firebase Remote Config
可为您提供这种功能。在整个教程中,您将使用PlanetTour
示例应用程序来学习如何更改文本,颜色和其他行为,而不必发布新版本!您将可以避免通过App Store
批准发布过程,并立即向您的用户进行一些小的更改。掌握了简单的调整后,您将学到更强大的功能,可以为不同的用户提供不同的内容集。
先决条件:本教程假定您已熟悉
CocoaPods
并已安装。如果您不这样做,请查看我们的CocoaPods tutorial。
打开入门项目应用程序。轻扫以查看不同的行星,然后轻按每个以获取一些(大多是准确的)额外信息。
您刚刚下载的应用是由PlanetTour Apps,Inc.
开发的,事情进展顺利,直到有一天,市场营销人员Greg
决定PlanetTour
应该改用绿色方案来庆祝Earth Day
。
这很容易解决-如果您查看AppConstants.swift
,可以更改appPrimaryColor
属性,这会影响许多文本标签的颜色。向用户推送此更改将涉及发布新版本,将其提交到App Store
,获得批准,然后希望所有用户在地球日之前下载它。地球日结束后,您必须再次执行整个过程以还原更改。
如果您只是可以从云中更改这些值,那岂不是很好吗?
Installing the Remote Config Library
要开始使用Remote Config
而不是AppConstants
中当前使用的硬编码值,您需要在Firebase Console
中创建一个项目,将其与PlanetTour
应用程序关联,然后安装Firebase Remote Config
库。
1. Creating a Project in Firebase Console
第一步是创建一个项目。去做这个:
- 1) 打开firebase.google.com/console
- 2) 单击Add project。
- 3) 将项目命名为
PlanetTour
,然后单击Continue
:
- 4) 接下来,请确保已选中Enable Google Analytics for this project,然后单击
Continue
:
- 5) 接下来,选择一个现有的
Google Analytics
(分析)帐户或创建一个帐户,然后单击Create project
:
您已经创建了项目! 现在,您必须将其与PlanetTour
应用程序关联。
2. Associating the Project with the PlanetTour App
创建项目后,您将被重定向到应用程序的主页。 要将项目与应用程序连接:
- 1) 通过单击
iOS logo
徽标添加iOS应用:
- 2) 添加项目的
bundle ID(即com.raywenderlich.PlanetTour)
和应用程序昵称(PlanetTour)
,但将App Store ID
字段保留为空白,然后单击Register App
:
- 3) 单击下载按钮以下载
GoogleServices-info.plist
文件:
- 4) 此时,您的浏览器将为您下载
GoogleServices-info.plist
文件。 将此文件拖到您的Xcode
项目中,如上Firebase
说明中的屏幕截图所示。 如果需要,请确保选择Copy Items if Needed
。 - 5) 在安装向导的其余几个步骤中,单击
Next
。 不用担心:接下来,您将逐步完成这些说明。 通过单击Continue to Console
完成向导:
- 6) 切换回
Xcode
并关闭PlanetTour
项目。
您现在快到了! 但是您仍然必须安装Remote Config Library
。
3. Installing the Firebase Remote Config Library
您需要启用您的应用程序才能在互联网上找到新的价值。 去做这个:
- 1) 打开终端窗口,然后导航到您的项目。 最简单的方法是键入
cd
末尾带有空格),然后等待提交命令。 然后打开Finder窗口并找到包含Xcode项目的文件夹。 将文件夹从Finder
拖放到Terminal
中。 文件夹的位置将被填充到Terminal
中的命令中。 在终端中按键盘上的Return
键以提交命令。 - 2) 键入
pod init
,然后按Return
键在项目文件夹中创建一个基本Podfile
。 - 3) 使用您喜欢的文本编辑器打开
Podfile
,并将其内容替换为以下内容,然后保存:
target 'PlanetTour' do
# Comment this line if you're not using Swift
# and don't want to use dynamic frameworks
use_frameworks!
platform :ios, '12.0'
# Pods for PlanetTour
pod 'Firebase/Core', '~> 7.0.0'
pod 'Firebase/RemoteConfig', '~> 7.0.0'
# Remove Xcode 12 warnings
post_install do |installer|
installer.pods_project.targets.each do |target|
target.build_configurations.each do |config|
config.build_settings.delete 'IPHONEOS_DEPLOYMENT_TARGET'
end
end
end
end
- 4) 在终端中运行
pod install
。 - 5) 使用
Xcode
打开新的PlanetTour.xcworkspace
。 (注意:您需要工作空间,而不是项目。)工作空间合并了Podfile
中指定的CocoaPods
中的代码。
注意:确保打开正确文件的一种简单方法是在终端中输入以下命令:
xed .
- 6) 使用项目导航器打开
AppDelegate.swift
。 在下面的导入UIKit
中添加以下内容:
import Firebase
接下来,在return
语句之前将以下实现添加到application(_:didFinishLaunchingWithOptions :)
:
FirebaseApp.configure()
此方法使用添加GoogleServices-info.plist
文件时为项目提供的常量来检查已安装的库并对其进行初始化。 Remote Config
库现在知道在Internet
上可以找到新值的位置。
再次构建并运行您的应用程序。 该应用程序的外观应与以前相同,只是您会在控制台输出中看到以前没有看到的调试信息。
恭喜你! 您已经安装了Remote Config
! 现在,您可以在本教程的其余部分中使用它。
How Remote Config Works
过于简化,Remote Config
的工作原理类似于云中的[String:Any?]
字典。 当您的应用启动时,它会从云中获取可能需要的所有新值,然后将其应用到您可能已指定为默认值的所有旧值之上。
使用Remote Config
的一般过程如下所示:
- 1) 为
Remote Config
提供默认值,以备将来更改。 - 2) 从云中获取任何新值。 您可以在设备上以缓存的保留模式找到它们。
- 3) “激活”那些获取的值。 发生这种情况时,它会将这些获取的值应用到您现有的默认值之上。
- 4) 查询
Remote Config
的值。 如果找到,Remote Config
将为您提供来自云的值,或者基于所提供密钥的默认值。
需要注意的一件事是,您获取的这些新值通常是您提供的默认值的子集。 您几乎可以在您的应用程序中使用任何硬编码的字符串,数字或布尔值,并将其连接起来以使用Remote Config
。 这使您可以灵活地在以后更改应用程序的许多方面,同时仍然保持实际的网络通话大小。
足够的理论。 是时候将其付诸实践了!
Using Remote Config
首先,在Xcode的Project
导航器中选择Utilities
文件夹。 右键单击以创建一个新文件。 选择Swift
文件。 将其命名为RCValues.swift
并在Xcode建议的默认文件夹中创建它。
将以下内容添加到文件末尾:
import Firebase
class RCValues {
static let sharedInstance = RCValues()
private init() {
loadDefaultValues()
}
func loadDefaultValues() {
let appDefaults: [String: Any?] = [
"appPrimaryColor": "#FBB03B"
]
RemoteConfig.remoteConfig().setDefaults(appDefaults as? [String: NSObject])
}
}
在这里,您将Singleton
模式用于RCValues
。 您将可以从项目中任何位置的sharedInstance
访问值。 在loadDefaultValues()
内部,您将一组键和值作为默认值传递给Remote Config
。 目前,您只提供一个值,但不用担心,以后会添加更多。
1. Fetching Values From the Cloud
接下来,您需要让Remote Config
从云中获取新值。 在类的右花括号之前,在loadDefaultValues()
下添加以下方法:
func activateDebugMode() {
let settings = RemoteConfigSettings()
// WARNING: Don't actually do this in production!
settings.minimumFetchInterval = 0
RemoteConfig.remoteConfig().configSettings = settings
}
默认情况下,Remote Config
将缓存从云中检索到的所有值大约12个小时。 客户端节流阀可确保您不会频繁ping
通该服务。 在生产应用中,这可能很好。 但是,当您进行开发时–或在线阅读Firebase Remote Config
教程时–这会使测试新值变得非常困难。 因此,您指定的minimumFetchInterval
为0
,以确保您永远不会使用缓存的数据。
添加以下方法以获取这些值:`
func fetchCloudValues() {
// 1
activateDebugMode()
// 2
RemoteConfig.remoteConfig().fetch { [weak self] _, error in
if let error = error {
print("Uh-oh. Got an error fetching remote values \(error)")
// In a real app, you would probably want to call the loading
// done callback anyway, and just proceed with the default values.
// I won't do that here, so we can call attention
// to the fact that Remote Config isn't loading.
return
}
// 3
RemoteConfig.remoteConfig().activate { _, _ in
print("Retrieved values from the cloud!")
}
}
}
这是该代码中发生的事情:
- 1) 通过启用调试模式,您可以告诉
Remote Config
绕过客户端的限制。出于开发目的或与10人团队进行测试,这很好。但是,如果您与数百万名支持者一起向公众发布此应用,那么您将很快达到服务器端的要求,并且Remote Config
将停止工作。这就是您首先使用客户端节流阀的全部原因。在真正启动该应用之前,请确保禁用调试模式,并将minimumFetchInterval
设置为更合理的值,例如43200
,这对您和我来说都是12个小时。 - 2) 如果在获取过程中
Remote Config
遇到错误,它将在应用获取的值之前退出。不要担心weak self
的警告。您将在本教程的后面部分添加代码以解决警告。 - 3) 如果从云端成功下载了值,则
Remote Config
将使用新值,而不是应用程序中硬编码的默认值。
将以下内容添加到init()
的末尾以调用新方法:
fetchCloudValues()
2. Running Your Code
打开AppDelegate.swift
并将以下内容添加到FirebaseApp.configure()
下的application(_:didFinishLaunchingWithOptions :)
中:
_ = RCValues.sharedInstance
下划线字符表示您不打算使用常量名称。 只需访问sharedInstance
的值,即可对其进行初始化并填充其默认值。
构建并运行您的应用程序,您将在调试控制台中看到以下行:
Retrieved values from the cloud!
Using Remote Config Values
现在,您正在下载这些值,请尝试将它们打印到控制台。 打开RCValues.swift
,然后将以下内容添加到fetchCloudValues()
中,紧接在“Retrieved values from the cloud”
行之后:
print("""
Our app's primary color is \
\(RemoteConfig.remoteConfig().configValue(forKey: "appPrimaryColor"))
""")
上面的代码将为您的appPrimaryColor
键获取适当的值。
构建并运行您的应用程序。 您应该看到这样的一行:
Our app's primary color is <FIRRemoteConfigValue: 0x61000003ece0>
嗯,这很有用,但是您希望有一个字符串值。
Remote Config
将值检索为RemoteConfigValue
对象。 您可以将它们视为基础数据的包装,这些数据在内部以UTF8
编码的字符串表示。 您几乎永远不会直接使用此对象。 相反,您将调用诸如numberValue
或boolValue
之类的帮助器方法来检索所需的实际值。
将您刚添加的行替换为:
let appPrimaryColorString = RemoteConfig.remoteConfig()
.configValue(forKey: "appPrimaryColor")
.stringValue ?? "undefined"
print("Our app's primary color is \(appPrimaryColorString)")
构建并运行您的应用程序。 这次您会看到:
Our app's primary color is #FBB03B
这还差不多。 Remote Config
为您提供了您之前提供的十六进制颜色代码的默认值。
1. Updating Values From the Cloud
现在您已从Remote Config
获取了正确的值,请尝试从云中提供新的值。
打开Firebase Console。 在左侧边栏中查看并展开Engage
部分。 单击Remote Config
选项:
单击Add a parameter
。 在表单中,输入key
为appPrimaryColor
,并输入Marketing
喜爱的新绿色#36C278
中的Greg
作为值。
单击Add Parameter
,然后单击两次Publish Changes
以更新更改。
构建并运行您的应用程序。
现在查看控制台中的内容:
Our app's primary color is #36C278
您正在从云中更新价值!
Changing Your App’s Look and Feel
现在,该挂断您的应用程序以使用此新值了。
首先,添加一个enum
来表示您的密钥。 使用原始字符串作为键名是灾难的根源,或者至少您会花一个下午的时间来寻找一个神秘的bug
,因为您键入了一个错误的键名。 通过使用枚举,Swift
可以在编译时而不是运行时捕获错误。
打开RCValues.swift
并在类定义上方添加以下内容:
enum ValueKey: String {
case appPrimaryColor
}
接下来,更新loadDefaultValues()
以使用此枚举而不是原始字符串:
let appDefaults: [String: Any?] = [
ValueKey.appPrimaryColor.rawValue : "#FBB03B"
]
接下来,将以下帮助方法添加到RCValues
中,该方法接受ValueKey
并基于Remote Config
中的字符串返回UIColor
:
func color(forKey key: ValueKey) -> UIColor {
let colorAsHexString = RemoteConfig.remoteConfig()[key.rawValue]
.stringValue ?? "#FFFFFF"
let convertedColor = UIColor(colorAsHexString)
return convertedColor
}
最后,使用旧的AppConstants
值更改应用程序中的位置,以改用此新的RCValues
帮助器方法。
在三个位置执行此操作:
- 1) 打开
ContainerViewController.swift
并在updateBanner()
中更改以下内容:
bannerView.backgroundColor = AppConstants.appPrimaryColor
为下面
bannerView.backgroundColor = RCValues.sharedInstance
.color(forKey: .appPrimaryColor)
- 2) 打开
GetNewsletterViewController.swift
并在updateSubmitButton()
中更改以下内容:
submitButton.backgroundColor = AppConstants.appPrimaryColor
为
submitButton.backgroundColor = RCValues.sharedInstance
.color(forKey: .appPrimaryColor)
- 3) 打开
PlanetDetailViewController.swift
并在updateLabelColors()
中更改以下内容:
nextLabel.textColor = AppConstants.appPrimaryColor
为
nextLabel.textColor = RCValues.sharedInstance.color(forKey: .appPrimaryColor)
要彻底,请打开AppConstants.swift
并删除以下内容:
static let appPrimaryColor = UIColor(rgba: "#FBB03B")
稍后再见,硬编码值...
现在,构建并运行您的应用程序。 您应该在整个应用程序中看到新的绿色:
1. Addressing the Timing of New Values
您什么时候应用这些新值没有太多控制权。 首次运行该应用程序时,您可能会在主菜单上看到默认的橙色,但是一旦从云中加载了新值,行星详细信息屏幕上就会显示新的绿色。
这会使您的用户感到困惑。 在这种情况下,您只需要更改一些标签颜色,但是如果您的应用在用户运行时更改了影响其行为的文本或值,则可能会造成困惑。
您可以通过多种方式处理此问题,但最简单的方法可能是创建加载屏幕。 在本教程中,已经为您进行了部分设置。
Hooking Up a Loading Screen
首先,使loading screen
成为应用程序的初始视图控制器。 打开Main.storyboard
并按住Control
键的同时从导航控制器到Waiting View Controller
-这是黑色背景的视图控制器,尽管在Storyboard
轮廓中执行此Control-拖动可能会更容易。 从弹出窗口中选择根视图控制器root view controller
,以使您的加载屏幕在应用加载时成为初始屏幕。
现在,添加逻辑,以在Remote Config
完成加载后过渡到主菜单。
打开RCValues.swift
,在sharedInstance
属性下面添加以下内容:
var loadingDoneCallback: (() -> Void)?
var fetchComplete = false
接下来,找到fetchCloudValues()
并在打印应用程序原色的行之后添加以下内容:
self?.fetchComplete = true
DispatchQueue.main.async {
self?.loadingDoneCallback?()
}
在这里,将fetchComplete
设置为true
,表示获取已完成。 最后,您调用可选的回调,以通知侦听器Remote Config
值已完成加载。 您可以使用此命令告诉加载屏幕自行关闭。
打开WaitingViewController.swift
并添加以下方法:
func startAppForReal() {
performSegue(withIdentifier: "loadingDoneSegue", sender: self)
}
接下来,将viewDidLoad()
替换为以下内容:
override func viewDidLoad() {
super.viewDidLoad()
if RCValues.sharedInstance.fetchComplete {
startAppForReal()
}
RCValues.sharedInstance.loadingDoneCallback = startAppForReal
}
在这里,您要使startAppForReal()
在所有值完成加载后由RCValues
方法调用。 您还添加了一张check
,以防RCValues
在等待屏幕完成加载之前设法完成网络通话。 这永远都不会发生,但是防御性地编写代码也不会造成伤害!
托德
(Todd)
的编码规则:在代码注释中添加“This should never happen”
,可以确保在某些时候确实会发生这种情况。
构建并运行。 您会看到等待屏幕一会儿,具体取决于您的网络速度,然后跳入应用程序的其余部分。 如果您在Firebase
控制台中更改应用原色的值并重新启动应用,则新颜色将正确显示在应用中的任何位置。 请记住在Firebase
控制台中单击Publish Changes
。
Hook Up the Rest of Your App
现在,您已经将一个值从AppConstants
转换为RCValues
,现在可以转换其余的值了! 在本部分中,您将在幕后看到如何连接应用程序。 您还将看到如何组织Remote Config
的支持代码,以后可以将其应用于自己的应用。
打开RCValues.swift
并将ValueKey
替换为以下内容:
enum ValueKey: String {
case bigLabelColor
case appPrimaryColor
case navBarBackground
case navTintColor
case detailTitleColor
case detailInfoColor
case subscribeBannerText
case subscribeBannerButton
case subscribeVCText
case subscribeVCButton
case shouldWeIncludePluto
case experimentGroup
case planetImageScaleFactor
}
接下来,将loadDefaultValues()
替换为以下内容:
func loadDefaultValues() {
let appDefaults: [String: Any?] = [
ValueKey.bigLabelColor.rawValue: "#FFFFFF66",
ValueKey.appPrimaryColor.rawValue: "#FBB03B",
ValueKey.navBarBackground.rawValue: "#535E66",
ValueKey.navTintColor.rawValue: "#FBB03B",
ValueKey.detailTitleColor.rawValue: "#FFFFFF",
ValueKey.detailInfoColor.rawValue: "#CCCCCC",
ValueKey.subscribeBannerText.rawValue: "Like PlanetTour?",
ValueKey.subscribeBannerButton.rawValue: "Get our newsletter!",
ValueKey.subscribeVCText
.rawValue: "Want more astronomy facts? Sign up for our newsletter!",
ValueKey.subscribeVCButton.rawValue: "Subscribe",
ValueKey.shouldWeIncludePluto.rawValue: false,
ValueKey.experimentGroup.rawValue: "default",
ValueKey.planetImageScaleFactor.rawValue: 0.33
]
RemoteConfig.remoteConfig().setDefaults(appDefaults as? [String: NSObject])
}
接下来,最后在color(forKey :)
下面添加三个辅助方法,以允许检索除colors
之外的值:
func bool(forKey key: ValueKey) -> Bool {
RemoteConfig.remoteConfig()[key.rawValue].boolValue
}
func string(forKey key: ValueKey) -> String {
RemoteConfig.remoteConfig()[key.rawValue].stringValue ?? ""
}
func double(forKey key: ValueKey) -> Double {
RemoteConfig.remoteConfig()[key.rawValue].numberValue.doubleValue
}
接下来,将使用AppConstants
的应用程序的每个部分替换为对RCValues
的相应调用。
您将在整个应用程序中进行九项更改:
- 1) 打开
ContainerViewController.swift
并将updateNavigationColors()
替换为以下内容:
func updateNavigationColors() {
navigationController?.navigationBar.tintColor = RCValues.sharedInstance
.color(forKey: .navTintColor)
}
- 2) 将
updateBanner()
替换为以下内容:
func updateBanner() {
bannerView.backgroundColor = RCValues.sharedInstance
.color(forKey: .appPrimaryColor)
bannerLabel.text = RCValues.sharedInstance
.string(forKey: .subscribeBannerText)
getNewsletterButton.setTitle(RCValues.sharedInstance
.string(forKey: .subscribeBannerButton), for: .normal)
}
- 3) 打开
GetNewsletterViewController.swift
并将updateText()
替换为以下内容:
func updateText() {
instructionLabel.text = RCValues.sharedInstance
.string(forKey: .subscribeVCText)
submitButton.setTitle(RCValues.sharedInstance
.string(forKey: .subscribeVCButton), for: .normal)
}
- 4) 打开
PlanetDetailViewController.swift
并在updateLabelColors()
中替换以下行:
nextLabel.textColor = AppConstants.detailInfoColor
为
nextLabel.textColor = RCValues.sharedInstance.color(forKey: .detailInfoColor)
- 5) 替换一行
planetNameLabel.textColor = AppConstants.detailTitleColor
为
planetNameLabel.textColor = RCValues.sharedInstance
.color(forKey: .detailTitleColor)
- 6) 打开
PlanetsCollectionViewController.swift
,然后在customNavigationBar()
中替换以下行:
navBar.barTintColor = AppConstants.navBarBackground
为
navBar.barTintColor = RCValues.sharedInstance
.color(forKey: .navBarBackground)
- 7) 在
collectionView(_:cellForItemAt:)
替换行
cell.nameLabel.textColor = AppConstants.bigLabelColor
为
cell.nameLabel.textColor = RCValues.sharedInstance
.color(forKey: .bigLabelColor)
- 8) 打开
SolarSystem.swift
,并在init()
中替换以下行:
if AppConstants.shouldWeIncludePluto {
为
if RCValues.sharedInstance.bool(forKey: .shouldWeIncludePluto) {
- 9) 最后,在
calculatePlanetScales()
内部,替换以下行:
scaleFactors.append(pow(ratio, AppConstants.planetImageScaleFactor))
为
scaleFactors.append(pow(
ratio,
RCValues.sharedInstance.double(forKey: .planetImageScaleFactor)))
这是很多更改,但是现在您应该切换整个应用程序。 要完成重构,请在您的应用程序中搜索AppConstants
—— 您只剩下一个结果,该结果定义了结构体本身:
确实可以使用Project
导航器找到AppConstants.swift
文件,选择并删除它。 构建并运行。 如果重构成功,则不会看到任何错误。
现在,您的应用已完全连接到Remote Config
,您可以进行其他更改,除了Greg
非常喜欢的绿色之外。
1. Adding Further Changes to Your App
打开Firebase Console。 确保您位于Remote Config
部分,然后单击Add Parameter
。 键入navBarBackground
作为键,并输入#35AEB1
作为新值,然后单击Add Parameter
。 然后执行相同的操作,将navTintColor
设置为#FFFFFF
。 单击Publish Changes
,然后在模式框中确认以将这些更改发布到您的应用程序。
完成后,您的控制台应如下所示:
切换回Xcode
,然后构建并运行。
轻按一个行星,您的应用程序应如下所示:
随意玩! 更改其他一些值。 乱七八糟的文字。 看看您可以想出哪种时尚的(或艳丽的)颜色组合。
但是,当您完成后,请返回本教程,因为您要处理国际危机!
Bringing Back Pluto
Denmark
的情况糟透了! 尽管全世界大多数人已经接受了冥王星不是行星的想法,但斯堪的纳维亚保护冥王星学会是一个由狂热的冥王星粉丝组成的完全没有组成的学会,一直游说着冥王星成为行星,因此, 值得列入PlanetTour
应用程序。 抗议活动在哥本哈根的街道上不断增加! 你能做什么?
对于Remote Config
来说,这似乎很简单! 您可以将shouldWeIncludePluto
设置为true
。 但是请稍候-这将为您的所有用户(不仅是斯堪的纳维亚半岛的用户)更改此设置。 您如何才能仅向讲不同语言的人提供不同的设置?
1. Conditions to the Rescue!
Remote Config
能够将不同的数据集提供给不同的用户,这使其不仅比云中的简单字典还复杂。 利用此功能,让斯堪的纳维亚用户再次将冥王星变成一颗行星。
首先,打开Firebase Console,确保您位于Remote Config
面板中,然后单击Add Parameter
以添加新参数。
输入shouldWeIncludePluto
作为参数键。
接下来,单击Add value for condition
字段旁边的下拉列表。
接下来,选择Define New Condition
:
在对话框中,为新条件命名为Pluto Fans
。
在下面的下拉菜单中,选择Languages
。
从语言列表中,选择Danish, Finnish, Icelandic, Norwegian and Swedish
:
单击Create Condition
。
接下来,在Value for Pluto Fans
字段中添加值true
,将值false
作为Default value
:
最后,单击Add Parameter
,然后单击Publish Changes
以将这些更改推向世界。
构建并运行以查看结果。
如果您不会说这些北方语言中的一种,就不会在行星列表中看到冥王星Pluto
。 如果您想为斯堪的纳维亚用户测试体验,我建议您预订飞往哥本哈根的航班,为自己购买新的丹麦iPhone,然后在上面运行您的应用程序-也许同时享受烟熏三文鱼,开面三明治。
更节俭的选择(可能会减少时差)是在设备或模拟器上打开Settings
应用程序。 选择General > Language & Region > iPhone Language > Dansk
- 或您喜欢的斯堪的纳维亚语言:
构建并运行您的应用程序。 这次,您应该看到冥王星回到它所属的星球,以及其他行星。 避免了国际危机!
另一种无需摆弄模拟器设置的测试方法是,用Option键单击Xcode中的
Run
按钮。 在出现的对话框中,单击Options
窗格,然后在App Language
菜单中选择适当的语言。
本教程中还没有涉及更多功能。例如,通过将值传递给随机的用户组,您可以运行A / B
测试或逐步推出新功能。您还可以向在Firebase Analytics中确定的特定人群提供不同的数据集,从而为您提供一些不错的自定义功能。在本教程中,您使用了电话上的Language
设置来对用户进行分组,但是您也可以使用其IP地址在地理上对用户进行分组,以确定他们所居住的国家/地区。查看文档documentation或 next tutorial on this topic!
现在您已经有了基础,使用Remote Config
可以做更多的事情。如果您正在开发任何类型的游戏,如果玩家发现游戏太容易或太难,它都是调整游戏玩法的好方法。这也是创建“Message of the Day”
功能的一种简便方法。或者,您可以仅使用它来尝试其他按钮或标签文本,以查看您的用户的最佳反应。在您喜欢的应用程序中尝试一下,看看您可以即时更改什么!
后记
本篇主要讲述了
Firebase Remote Config
教程,感兴趣的给个赞或者关注~~~