mirror of
https://bitbucket.org/vendoo/vendoo_v1.0.git
synced 2025-12-25 19:57:41 +00:00
106 lines
4.2 KiB
Swift
106 lines
4.2 KiB
Swift
//
|
|
// Copyright (c) 2016 Google Inc.
|
|
//
|
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
// you may not use this file except in compliance with the License.
|
|
// You may obtain a copy of the License at
|
|
//
|
|
// http://www.apache.org/licenses/LICENSE-2.0
|
|
//
|
|
// Unless required by applicable law or agreed to in writing, software
|
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
// See the License for the specific language governing permissions and
|
|
// limitations under the License.
|
|
//
|
|
|
|
import UIKit
|
|
import Firebase
|
|
|
|
@objc(ViewController)
|
|
class ViewController: UIViewController {
|
|
|
|
let pricePrefixConfigKey = "price_prefix"
|
|
let priceConfigKey = "price"
|
|
let loadingPhraseConfigKey = "loading_phrase"
|
|
let isPromotionConfigKey = "is_promotion_on"
|
|
let discountConfigKey = "discount"
|
|
|
|
var remoteConfig:FIRRemoteConfig!
|
|
@IBOutlet weak var priceLabel: UILabel!
|
|
@IBOutlet weak var fetchButton: UIButton!
|
|
|
|
override func viewDidLoad() {
|
|
super.viewDidLoad()
|
|
// [START get_remote_config_instance]
|
|
remoteConfig = FIRRemoteConfig.remoteConfig()
|
|
// [END get_remote_config_instance]
|
|
|
|
// Create Remote Config Setting to enable developer mode.
|
|
// Fetching configs from the server is normally limited to 5 requests per hour.
|
|
// Enabling developer mode allows many more requests to be made per hour, so developers
|
|
// can test different config values during development.
|
|
// [START enable_dev_mode]
|
|
let remoteConfigSettings = FIRRemoteConfigSettings(developerModeEnabled: true)
|
|
remoteConfig.configSettings = remoteConfigSettings!
|
|
// [END enable_dev_mode]
|
|
|
|
// Set default Remote Config values. In general you should have in-app defaults for all
|
|
// values that you may configure using Remote Config later on. The idea is that you
|
|
// use the in-app defaults and when you need to adjust those defaults, you set an updated
|
|
// value in the App Manager console. The next time that your application fetches values
|
|
// from the server, the new values you set in the Firebase console are cached. After you
|
|
// activate these values, they are used in your app instead of the in-app defaults. You
|
|
// can set default values using a plist file, as shown here, or you can set defaults
|
|
// inline by using one of the other setDefaults methods.
|
|
// [START set_default_values]
|
|
remoteConfig.setDefaultsFromPlistFileName("RemoteConfigDefaults")
|
|
// [END set_default_values]
|
|
|
|
fetchConfig()
|
|
}
|
|
|
|
func fetchConfig() {
|
|
priceLabel.text = remoteConfig[loadingPhraseConfigKey].stringValue
|
|
|
|
var expirationDuration = 3600
|
|
// If in developer mode cacheExpiration is set to 0 so each fetch will retrieve values from
|
|
// the server.
|
|
if (remoteConfig.configSettings.isDeveloperModeEnabled) {
|
|
expirationDuration = 0
|
|
}
|
|
|
|
// [START fetch_config_with_callback]
|
|
// cacheExpirationSeconds is set to cacheExpiration here, indicating that any previously
|
|
// fetched and cached config would be considered expired because it would have been fetched
|
|
// more than cacheExpiration seconds ago. Thus the next fetch would go to the server unless
|
|
// throttling is in progress. The default expiration duration is 43200 (12 hours).
|
|
remoteConfig.fetchWithExpirationDuration(NSTimeInterval(expirationDuration)) { (status, error) -> Void in
|
|
if (status == FIRRemoteConfigFetchStatus.Success) {
|
|
print("Config fetched!")
|
|
self.remoteConfig.activateFetched()
|
|
} else {
|
|
print("Config not fetched")
|
|
print("Error \(error!.localizedDescription)")
|
|
}
|
|
self.displayPrice()
|
|
}
|
|
// [END fetch_config_with_callback]
|
|
}
|
|
|
|
func displayPrice() {
|
|
let initialPrice = remoteConfig[priceConfigKey].numberValue!.intValue
|
|
var finalPrice = initialPrice
|
|
if (remoteConfig[isPromotionConfigKey].boolValue) {
|
|
// [START get_config_value]
|
|
finalPrice = initialPrice - (remoteConfig[discountConfigKey].numberValue?.integerValue)!
|
|
// [END get_config_value]
|
|
}
|
|
priceLabel.text = "\(self.remoteConfig[self.pricePrefixConfigKey].stringValue!)\(finalPrice)"
|
|
}
|
|
|
|
@IBAction func handleFetchTouch(sender: AnyObject) {
|
|
fetchConfig()
|
|
}
|
|
}
|