十年網(wǎng)站開(kāi)發(fā)經(jīng)驗(yàn) + 多家企業(yè)客戶 + 靠譜的建站團(tuán)隊(duì)
量身定制 + 運(yùn)營(yíng)維護(hù)+專業(yè)推廣+無(wú)憂售后,網(wǎng)站問(wèn)題一站解決
怎么在iOS中配置實(shí)時(shí)遠(yuǎn)程紀(jì)錄?針對(duì)這個(gè)問(wèn)題,這篇文章詳細(xì)介紹了相對(duì)應(yīng)的分析和解答,希望可以幫助更多想解決這個(gè)問(wèn)題的小伙伴找到更簡(jiǎn)單易行的方法。
成都創(chuàng)新互聯(lián)公司專注于單縣企業(yè)網(wǎng)站建設(shè),成都響應(yīng)式網(wǎng)站建設(shè)公司,商城網(wǎng)站建設(shè)。單縣網(wǎng)站建設(shè)公司,為單縣等地區(qū)提供建站服務(wù)。全流程按需網(wǎng)站策劃,專業(yè)設(shè)計(jì),全程項(xiàng)目跟蹤,成都創(chuàng)新互聯(lián)公司專業(yè)和態(tài)度為您提供的服務(wù)
在AppDelegate中觸發(fā)回調(diào)時(shí),不會(huì)向用戶顯示靜默推送通知。通過(guò)將選項(xiàng)content_available設(shè)置為true,您甚至可以在推送通知到達(dá)時(shí)讓iOS在后臺(tái)啟動(dòng)您的應(yīng)用程序(或恢復(fù)它)。一個(gè)問(wèn)題:如果用戶手動(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)用訂閱到主題。我們將專門(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í)行:
學(xué)習(xí)價(jià)值,如果有疑問(wèn)大家可以留言交流,謝謝大家對(duì)創(chuàng)新互聯(lián)的支持。
關(guān)于怎么在iOS中配置實(shí)時(shí)遠(yuǎn)程紀(jì)錄問(wèn)題的解答就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,如果你還有很多疑惑沒(méi)有解開(kāi),可以關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道了解更多相關(guān)知識(shí)。