版本記錄
版本號 | 時間 |
---|---|
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
教程,感興趣的給個贊或者關注~~~