簡體   English   中英

MQTT-客戶端框架保持在后台運行

[英]MQTT-Client-Framework stay running at background

我正在嘗試通過MQTT-Client-Framework連接到我們的推送服務器。

連接到服務器沒有復雜性,只需幾行代碼,我就可以連接到服務器並訂閱主題。

但是我有幾個問題,我找不到他們的直接答案。

1)如何使客戶端在后台運行?

2)設備重啟后會怎樣? 設備重啟后如何自動連接服務器?

3)假設我在連接服務器時遇到錯誤。 該庫是否將嘗試循環連接? 嘗試幾次? 還是我需要自己管理?

4)訂閱主題的3種情況相同?

根據我在MQTT客戶端框架上的經驗,以下是對您的問題/查詢的答案。 我希望它可以澄清您的疑慮並幫助您前進。

1)如何使客戶端在后台運行?

  • 您不能使MQTT客戶端在后台運行,因為Apple不允許任何應用程序在后台長時間運行。 但是,如果無法覆蓋它,則您的應用程序將繼續在后台運行。 您可以在Apple文檔中閱讀有關后台執行支持的更多信息
  • 另請參閱在github 發布的給定框架問題。

2)設備重啟后會怎樣? 設備重啟后如何自動連接服務器?

  • 每次您的應用開始執行時,您都需要使用MQTT客戶端框架連接到服務器,MQTT客戶端框架中沒有可用的自動連接機制。 我建議在應用程序啟動后立即執行的特定控制器中編寫初始化連接,但與AppDelegate相同

3)假設我在連接服務器時出錯。 該庫是否將嘗試循環連接? 嘗試幾次? 還是我需要自己管理?

  • 如果您的MQTT客戶端無法連接服務器,則需要您自己處理它,庫不會嘗試如上一個答案中所述自動連接。 我寫了下面的示例代碼。 使用NSTimer自動連接到服務器。

     [self.mqttSession connectToHost:MQTT_HOST port:MQTT_PORT usingSSL:NO connectHandler:^(NSError *error) { if(error) { // Application fail to connect to server, write your code to auto connect here } }]; 

4)訂閱主題的3種情況相同?

  • 如果您的代理服務器配置為跟蹤單個用戶/客戶端的現有訂閱,則您無需每次都訂閱。
  • 否則,每次您需要訂閱有關成功連接的相同主題時。 使用以下MQTTSessionDelegate方法進行訂閱。

     - (void)connected:(MQTTSession *)session 

快樂的編碼:)

1)項目->功能->背景模式。 有一些選項可讓您的應用在后台運行。

2)一般來說,如果允許您的應用程序在后台運行,則MQTT不會與服務器斷開連接,但是我認為您最好檢查一下連接,並在應用程序再次變為活動狀態時將MQTT重新連接到服務器。

AppDelegate - (void)applicationDidBecomeActive:(UIApplication *)application; > - (void)applicationDidBecomeActive:(UIApplication *)application;

3)不幸的是,會的。 而且您必須管理自己。

4)我幫不上忙。

對於第一個問題:

有關如何在iOS上后台運行的詳細信息,請參見此處 此鏈接還列出了Apple允許在后台運行的操作,如果您的應用不符合這些條件,則很可能被Apple拋棄了應用商店。

該列表還顯示了將哪些UIBackgroundModes放置在Info.plist中,以標記您的應用需要后台訪問。

其他3個我幫不上忙

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM