最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

iOS中的實時遠(yuǎn)程配置全紀(jì)錄

 更新時間:2019年01月07日 11:01:18   作者:敲鐘人Quasimodo  
這篇文章主要給大家介紹了關(guān)于iOS中實時遠(yuǎn)程配置的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對各位iOS開發(fā)者們具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧

前言

當(dāng)您需要快速推出遠(yuǎn)程配置更改時該怎么辦?也許你做的上次更改沒有成功,你想盡快撤消它們?;蛘吣膽?yīng)用中出現(xiàn)了問題,您需要禁用整個功能。

更頻繁地調(diào)用fetchWithExpirationDuration:completionHandler: (具有較少的到期時間)是一種方法,但Firebase不鼓勵這樣做。你冒著被下架的風(fēng)險。

如果您需要使遠(yuǎn)程配置緩存無效,而不必對短暫的到期時間進(jìn)行硬編碼,該怎么辦?而不是反復(fù)詢問服務(wù)器更新,讓服務(wù)器在有更改時通知您。 Firebase遠(yuǎn)程配置現(xiàn)在與云功能集成,因此可以在配置發(fā)布或回滾時觸發(fā)執(zhí)行。這意味著您可以讓一個函數(shù)向您的應(yīng)用發(fā)送靜默推送通知,讓它知道配置已更改。

在AppDelegate中觸發(fā)回調(diào)時,不會向用戶顯示靜默推送通知。通過將選項content_available設(shè)置為true,您甚至可以在推送通知到達(dá)時讓iOS在后臺啟動您的應(yīng)用程序(或恢復(fù)它)。一個問題:如果用戶手動殺死它,iOS將無法在后臺啟動您的應(yīng)用程序。這將持續(xù)到下次重新啟動(第一次解鎖后)。除此之外,你沒有其他問題了。

實現(xiàn)

這個過程歸結(jié)為:

  • 將應(yīng)用程序訂閱到Firebase Cloud Messaging主題
  • 創(chuàng)建在遠(yuǎn)程配置更改時觸發(fā)的云功能
  • 處理AppDelegate中的靜音推送通知
  • 在下次啟動時使遠(yuǎn)程配置緩存無效

如何設(shè)置Firebase云消息傳遞超出了本文的范圍,但文檔是一個很好的起點。

1.訂閱到主題

推送通知啟動并運行后,我們需要將應(yīng)用訂閱到主題。我們將專門用于遠(yuǎn)程配置。

Messaging.messaging().subscribe(toTopic: "REMOTE_CONFIG") { error in
 if let error = error {
  debugPrint("Could not subscribe to Remote Config topic", error)
 }
}

2.創(chuàng)建一個云服務(wù)

Cloud Function只是一個Node.js腳本,因此您需要在您的計算機(jī)上使用Node.js.在撰寫本文時,Cloud Functions支持Node v6或Node v8,其中v6是默認(rèn)值。

獲得Node.js后,首先安裝Firebase CLI。

npm install -g firebase-tools

然后使用CLI工具進(jìn)行身份驗證。

firebase login

現(xiàn)在為函數(shù)創(chuàng)建一個文件夾,cd進(jìn)入它并初始化Firebase項目。

firebase init functions

這將啟動CLI向?qū)?。完成它,你就?zhǔn)備好了。

是時候添加將向REMOTE_CONFIG通道發(fā)送靜默推送通知的云功能。在新創(chuàng)建的項目的函數(shù)目錄中,您將找到index.js。打開它并用以下內(nèi)容替換內(nèi)容:

const functions = require('firebase-functions');
const admin = require('firebase-admin');
​
admin.initializeApp(functions.config().firebase);
​
exports.pushConfig = functions.remoteConfig.onUpdate(versionMetadata => {
 // Create FCM payload to send data message to REMOTE_CONFIG topic.
 const payload = {
  data: {
   CONFIG_STATE: 'STALE'
  }
 };
​
 const options = {
  content_available: true
 };
​
 // Use the Admin SDK to send the ping via FCM.
 return admin
  .messaging()
  .sendToTopic('REMOTE_CONFIG', payload, options)
  .then(response => {
   console.log(response);
  
   return null;
  });
});

我們使用通知來傳遞帶有密鑰CONFIG_STATE的有效負(fù)載。這將向您的應(yīng)用發(fā)出遠(yuǎn)程配置數(shù)據(jù)已更改的信號。如有必要,選項content_available是必要的,以使iOS恢復(fù)應(yīng)用程序或在后臺啟動它。

現(xiàn)在該功能已經(jīng)到位,我們可以將其部署到Firebase,以便它可以運行。

firebase deploy --only functions

這將部署到firebase init函數(shù)中選擇的Firebase項目。要部署到另一個項目,首先使用firebase使用--add添加它。添加后,您可以使用my-project-alias切換運行firebase的項目。

3.處理遠(yuǎn)程推送

我們需要在AppDelegate中實現(xiàn)方法:didReceiveRemoteNotification:fetchCompletionHandler:來處理傳入的推送通知。如果userInfo字典有密鑰CONFIG_STATE(我們添加到通知有效負(fù)載的那個),那么它就是我們正在尋找的通知。

func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable: Any], fetchCompletionHandler completionHandler: @escaping (_: UIBackgroundFetchResult) -> Void) {
 if userInfo["CONFIG_STATE"] != nil {
  UserDefaults.standard.set(true, forKey: "CONFIG_STATE")
  UserDefaults.standard.synchronize()
 }
​
 completionHandler(UIBackgroundFetchResult.newData)
}

這里很容易調(diào)用fetchWithExpirationDuration:completionHandler:具有非常少的到期時間,以便在那時檢索更新的值。但這樣做會使所有通知的應(yīng)用實例在大致相同的時間請求新值。這很可能會使應(yīng)用受到限制,因此我們會將其推遲到下一次發(fā)布。

4. 使遠(yuǎn)程配置緩存無效

我們只需要將標(biāo)志保存到UserDefaults并在獲取Remote Config值之前進(jìn)行檢查。

var expirationDuration: TimeInterval = 43200 // 12hs of cache by default
​
if UserDefaults.standard.bool(forKey: "CONFIG_STATE") {
 UserDefaults.standard.set(false, forKey: "CONFIG_STATE")
 UserDefaults.standard.synchronize()
   
 expirationDuration = 0
}
​
RemoteConfig.fetch(withExpirationDuration: expirationDuration) { [weak self] status, error in
 RemoteConfig.remoteConfig().activateFetched()
}

如果配置已過時,我們將通過將到期持續(xù)時間設(shè)置為0來繞過緩存。這將強(qiáng)制執(zhí)行一次完全重新加載,而不必等待緩存過期。

這就是所有的設(shè)置。現(xiàn)在轉(zhuǎn)到“遠(yuǎn)程配置”面板并發(fā)布更改。然后查看“功能”選項卡。它應(yīng)該如下所示:

日志應(yīng)該注冊成功執(zhí)行:

總結(jié)

避免輪詢Firebase服務(wù)器以進(jìn)行遠(yuǎn)程配置更新的一種方法是讓云功能在發(fā)布更改時向您的應(yīng)用發(fā)送靜默推送通知。然后,應(yīng)用程序可以使遠(yuǎn)程配置緩存無效,并在下次啟動時請求新值。但要注意,手動關(guān)閉應(yīng)用程序的用戶在重新啟動和解鎖手機(jī)之前不會收到這些推送通知。

好了,以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。

相關(guān)文章

  • IOS 開發(fā)之UITableView 刪除表格單元寫法

    IOS 開發(fā)之UITableView 刪除表格單元寫法

    這篇文章主要介紹了IOS 開發(fā)之UITableView 刪除表格單元寫法的相關(guān)資料,這里提供實例幫助大家實現(xiàn)該功能,希望能幫助到大家,需要的朋友可以參考下
    2017-08-08
  • iOS實現(xiàn)左右可滑動的選擇條實例代碼分享

    iOS實現(xiàn)左右可滑動的選擇條實例代碼分享

    本文通過實例代碼給大家介紹了ios實現(xiàn)左右可滑動的選擇條功能,非常不錯,具有參考借鑒價值,需要的朋友參考下
    2017-03-03
  • iOS中精確計算WebView高度的方法示例

    iOS中精確計算WebView高度的方法示例

    這篇文章主要給大家介紹了關(guān)于iOS中如何精確計算WebView高度,以及iOS開發(fā)之解決WebView自適應(yīng)內(nèi)容高度的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面來一起看看吧
    2018-05-05
  • Flutter之可滾動組件實例詳解

    Flutter之可滾動組件實例詳解

    這篇文章主要為大家介紹了Flutter之可滾動組件實例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-10-10
  • 教你如何解決XCODE升級后插件不能用問題

    教你如何解決XCODE升級后插件不能用問題

    Xcode 每次更新有個很頭疼的問題,就是插件都會失效,要重裝。 不得不說好多插件還是非常方便能提高效率。那么如何來解決這個問題呢,今天我們就來探討下。
    2015-11-11
  • iOS中Cell的Section展開和收起的示例代碼

    iOS中Cell的Section展開和收起的示例代碼

    本篇文章主要介紹了iOS中Cell的Section展開和收起的示例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-08-08
  • iOS使用自帶的UIViewController實現(xiàn)qq加號下拉菜單的功能(實例代碼)

    iOS使用自帶的UIViewController實現(xiàn)qq加號下拉菜單的功能(實例代碼)

    這篇文章主要介紹了iOS使用自帶的UIViewController實現(xiàn)qq加號下拉菜單的功能(實例代碼),需要的朋友可以參考下
    2017-05-05
  • IOS NSNotification 鍵盤遮擋問題的解決辦法

    IOS NSNotification 鍵盤遮擋問題的解決辦法

    這篇文章主要介紹了IOS NSNotification 鍵盤遮擋問題的解決辦法的相關(guān)資料,希望通過本文能幫助到大家,解決這樣的問題,需要的朋友可以參考下
    2017-09-09
  • iOS Swift 值類型與引用類型使用區(qū)別基礎(chǔ)詳解

    iOS Swift 值類型與引用類型使用區(qū)別基礎(chǔ)詳解

    這篇文章主要為大家介紹了iOS Swift 值類型與引用類型使用區(qū)別基礎(chǔ)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-07-07
  • iOS利用UIBezierPath + CAAnimation實現(xiàn)路徑動畫效果

    iOS利用UIBezierPath + CAAnimation實現(xiàn)路徑動畫效果

    在iOS開發(fā)中,制作動畫效果是最讓開發(fā)者享受的環(huán)節(jié)之一,這篇文章主要給大家介紹了關(guān)于iOS利用UIBezierPath + CAAnimation實現(xiàn)路徑動畫效果的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-10-10

最新評論

松滋市| 博爱县| 定结县| 聂荣县| 鸡东县| 胶州市| 临漳县| 平乐县| 铁岭市| 柯坪县| 横山县| 内江市| 修武县| 龙泉市| 恩施市| 景德镇市| 盐山县| 梨树县| 高安市| 班戈县| 诏安县| 沂南县| 九江县| 闵行区| 略阳县| 宁陵县| 上栗县| 瑞昌市| 龙山县| 彰化市| 邓州市| 渑池县| 崇阳县| 昭苏县| 黄浦区| 东城区| 化德县| 莒南县| 宿州市| 孟州市| 鲜城|