亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

前言

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

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

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

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

實(shí)現(xiàn)

這個(gè)過(guò)程歸結(jié)為:

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

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

1.訂閱到主題

推送通知啟動(dòng)并運(yùn)行后,我們需要將應(yīng)用訂閱到主題。我們將專(zhuān)門(mén)用于遠(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)建一個(gè)云服務(wù)

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

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

npm install -g firebase-tools

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

firebase login

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

firebase init functions

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

是時(shí)候添加將向REMOTE_CONFIG通道發(fā)送靜默推送通知的云功能。在新創(chuàng)建的項(xiàng)目的函數(shù)目錄中,您將找到index.js。打開(kāi)它并用以下內(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;
  });
});

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

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

firebase deploy --only functions

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

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

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

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:具有非常少的到期時(shí)間,以便在那時(shí)檢索更新的值。但這樣做會(huì)使所有通知的應(yīng)用實(shí)例在大致相同的時(shí)間請(qǐng)求新值。這很可能會(huì)使應(yīng)用受到限制,因此我們會(huì)將其推遲到下一次發(fā)布。

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

我們只需要將標(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()
}

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

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

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

總結(jié)

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

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

相關(guān)文章

  • IOS 開(kāi)發(fā)之UITextField的光標(biāo)操作擴(kuò)展

    IOS 開(kāi)發(fā)之UITextField的光標(biāo)操作擴(kuò)展

    這篇文章主要介紹了IOS 開(kāi)發(fā)之UITextField的光標(biāo)操作擴(kuò)展的相關(guān)資料,需要的朋友可以參考下
    2017-06-06
  • iOS13適配的實(shí)現(xiàn)方法

    iOS13適配的實(shí)現(xiàn)方法

    這篇文章主要介紹了iOS13適配的實(shí)現(xiàn)方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09
  • iOS動(dòng)畫(huà)實(shí)現(xiàn)雨花與櫻花特效

    iOS動(dòng)畫(huà)實(shí)現(xiàn)雨花與櫻花特效

    小編今天為大家?guī)?lái)一場(chǎng)淅淅瀝瀝的夜空之雨和滿(mǎn)天飛舞的櫻花之戀,希望能在炎炎夏日為您帶來(lái)一絲清爽的涼意!學(xué)習(xí)iOS動(dòng)畫(huà)的小伙伴們可以參考學(xué)習(xí)。
    2016-08-08
  • iOS保存App中的照片到系統(tǒng)相冊(cè)或自建相冊(cè)的方法

    iOS保存App中的照片到系統(tǒng)相冊(cè)或自建相冊(cè)的方法

    這篇文章主要介紹了iOS保存App中的照片到系統(tǒng)相冊(cè)或自建相冊(cè)的方法,示例代碼為傳統(tǒng)的Objective-C語(yǔ)言寫(xiě)成,需要的朋友可以參考下
    2016-04-04
  • iOS項(xiàng)目的開(kāi)發(fā)命名規(guī)范教程

    iOS項(xiàng)目的開(kāi)發(fā)命名規(guī)范教程

    為了團(tuán)隊(duì)各成員之間代碼的互通、可讀、易維護(hù)性,特制訂此開(kāi)發(fā)規(guī)范。下面這篇文章主要給大家介紹了關(guān)于iOS項(xiàng)目的開(kāi)發(fā)命名規(guī)范的相關(guān)資料,需要的朋友可以參考借鑒,下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-11-11
  • iOS中管理剪切板的UIPasteboard粘貼板類(lèi)用法詳解

    iOS中管理剪切板的UIPasteboard粘貼板類(lèi)用法詳解

    在iOS中,通過(guò)UITextField、UITextView和UIWebView剪切或復(fù)制的內(nèi)容都可以通過(guò)UIPasteboard類(lèi)來(lái)管理粘貼操作,下面就為大家?guī)?lái)iOS中管理剪切板的UIPasteboard粘貼板類(lèi)用法詳解:
    2016-06-06
  • iOS中setValue和setObject的區(qū)別詳解

    iOS中setValue和setObject的區(qū)別詳解

    setObject:ForKey: 是NSMutableDictionary特有的;setValue:ForKey:是KVC的主要方法。接下來(lái)通過(guò)本文給大家分享iOS中setValue和setObject的區(qū)別,需要的朋友參考下
    2017-02-02
  • 一步一步實(shí)現(xiàn)iOS主題皮膚切換效果

    一步一步實(shí)現(xiàn)iOS主題皮膚切換效果

    這篇文章主要為大家詳細(xì)介紹了一步一步實(shí)現(xiàn)iOS主題皮膚切換效果的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-09-09
  • iOS 中事件的響應(yīng)鏈和傳遞鏈

    iOS 中事件的響應(yīng)鏈和傳遞鏈

    iOS事件鏈有兩條:事件的響應(yīng)鏈;Hit-Testing事件的傳遞鏈。這篇文章主要介紹了iOS 中事件的響應(yīng)鏈和傳遞鏈,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-12-12
  • IOS 城市定位詳解及簡(jiǎn)單實(shí)例

    IOS 城市定位詳解及簡(jiǎn)單實(shí)例

    這篇文章主要介紹了IOS 城市定位詳解及簡(jiǎn)單實(shí)例的相關(guān)資料,需要的朋友可以參考下
    2017-01-01

最新評(píng)論