我試圖通過MQTT-Client-Framework連接到我們的推送服務器。MQTT客戶端框架保持在後臺運行
連接到服務器沒有任何複雜性,只需連接幾行代碼即可連接到服務器並訂閱主題。
但我有幾個問題,我找不到任何直接的答案。
1)我如何讓我的客戶端在後臺運行?
2)設備重啓後會發生什麼?設備重啓後如何自動連接服務器?
3)假設我在連接服務器時出錯。這個庫會試圖在循環中連接嗎?它嘗試多少次?或者我需要自己管理這個?
4)訂閱主題相同的3場景?
我試圖通過MQTT-Client-Framework連接到我們的推送服務器。MQTT客戶端框架保持在後臺運行
連接到服務器沒有任何複雜性,只需連接幾行代碼即可連接到服務器並訂閱主題。
但我有幾個問題,我找不到任何直接的答案。
1)我如何讓我的客戶端在後臺運行?
2)設備重啓後會發生什麼?設備重啓後如何自動連接服務器?
3)假設我在連接服務器時出錯。這個庫會試圖在循環中連接嗎?它嘗試多少次?或者我需要自己管理這個?
4)訂閱主題相同的3場景?
根據我在MQTT客戶端框架上的經驗,以下是您的問題/疑問的答案。我希望它能夠澄清您的疑慮,並幫助您繼續前進。
1)我如何讓我的客戶端在後臺運行?
2)設備重啓後會發生什麼?設備重啓後如何自動連接服務器?
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
編碼愉快:)
關於第一個問題:如何在iOS上的後臺運行
細節可以發現here。此鏈接還列出了Apple允許在後臺運行的操作,如果您的應用不符合這些條件,那麼它可能會被Apple拋出應用商店。
該列表還顯示了哪些UIBackgroundModes放置在Info.plist中,以標記您的應用需要後臺訪問。
其他3我不能
1)項目 - > Capabilities->背景模式幫助。有一些選項可以讓您的應用在後臺運行。
2)一般來說,如果您的應用程序允許在後臺運行,MQTT將不會與服務器斷開連接,但我認爲您最好檢查連接並在應用程序變爲MQTT時重新連接MQTT再次激活。
AppDelegate->- (void)applicationDidBecomeActive:(UIApplication *)application;
3)不幸的是,是的,它會的。你必須管理自己。
4)我忍不住。
後臺模式在有限的時間內工作(3到10分鐘),我需要儘可能保持連接到服務器。 – mehdok
這幾乎是所有的答案,並基於它我不能保持連接喲我的服務器在後臺,但像電報的乘客,他們做什麼來保持連接到他們的服務器? – mehdok
他們不保持連接在後臺,他們發送每個新消息的'APNS'推送通知,通知用戶有關新消息。這兩件事並行工作,他們通過MQTT以及通知服務發送消息。 –
tnx很多,這是我需要的。但有沒有什麼黑客保持連接在後臺?注意:我不介意蘋果是否會批准應用程序商店,該應用程序已在組織間使用。 – mehdok