私有推送實現方法 - VOIP

 

  在開發企業app的時候,有的時候基於安全性的考慮,不容許設備鏈接外網。這就出現了一個問題,就是iOS的推送功能無法工做了,由於iOS的推送功能是固化在系統裏,必須鏈接蘋果的APNS服務器才能工做的,爲了能讓這類只能工做在內網裏的app也能擁有推送功能,就須要咱們本身來實現推送功能了。安全

  自主推送的實現方法是利用iOS的voip類app能夠駐留在後臺的功能。這類app,系統在設備開機時即被啓動,app能夠將本身的一個socket委託給系統,在socket有數據到達時,系統就會喚醒app,給它一段很短的cpu時間來處理數據,再加上UIApplication的keepAliveTimeout handler(最小10分鐘間隔一次),能夠每隔一段時間就從新創建一次鏈接,來達到保持socket長鏈接的需求。服務器

注:因爲voip類app能夠使app常駐在後臺並維持socket長鏈接,所以蘋果對這類應用有及其嚴格的審查,全部不是真正的voip的app都會被拒絕!切記!app

1.設置應用爲voip應用異步

打開<app>-info.plist文件,加入以下的keysocket

Required background modes,追加App provides Voice over IP serviceside

 

2.將socket設置成異步模式,並將socket設置成VOIP類的,以便系統可以託管它。ui

?spa

1.net

2code

3

4

5

CFStreamCreatePairWithSocket(NULL, (CFSocketNativeHandle)(mosq->sock), &readStream, NULL);

//保證不關閉原來的socket

CFReadStreamSetProperty(readStream, kCFStreamPropertyShouldCloseNativeSocket, kCFBooleanFalse);

//設置成voip socket

CFReadStreamSetProperty(readStream, kCFStreamNetworkServiceType, kCFStreamNetworkServiceTypeVoIP);

 

 

3.安裝keepAliveTimeout handler,讓系統每隔一段時間從新創建鏈接

?

1

2

3

4

    UIApplication *application = [UIApplication sharedApplication];

    [application setKeepAliveTimeout:600 handler:^{

        [self reconnect];

    }];

 

相關文章
相關標籤/搜索