iOS8下的遠程推送,iOS8遠程推送

來源:互聯網
上載者:User

iOS8下的遠程推送,iOS8遠程推送

  昨天做了一下遠程推送,今天寫下來,分享給需要的人。參考了很多篇文章,或許是iOS8的改動,沒有一篇可以完整的看下來,所以打算自己寫一篇。

  後台我也寫了,用的是SAE,PHP代碼,很簡單,調用SAE封裝好的一個類就可以向APNS發推送資訊。

  首先,來說一下蘋果的推送機制。顧名思義,推送,是指伺服器向用戶端發送訊息,那麼在iOS中,應用是被後台掛起的,並不能一直串連網路,那麼伺服器怎麼才能把訊息發送到用戶端呢?這就用到推送,蘋果的推送機制,是只能由APNS發送推播通知,所以你自己的後台伺服器想給用戶端推播通知,得把要推送的內容發送給APNS。

  說到這裡,如果還不瞭解蘋果的推送機制,可以自行查看資料。總之整體的流程就是:APP啟動的時候,擷取本裝置的device_token,然後把這個device_token告訴你自己的伺服器,伺服器拿到這個device_token後,使用認證檔案,向蘋果的APNS伺服器發起一個SSL串連,串連成功後發送一個JSON串,JSON裡麵包含device_token、通知內容以及其他的一些東西。蘋果的APNS得到JSON後,通過device_token尋找裝置推送訊息。

  那麼,我們iOS前端的工作量是非常簡單的,只需要擷取device_token和接到通知後做什麼事就可以。那麼,怎麼樣擷取裝置的device_token,iOS8用到了新的方法。在APP啟動的時候就調用,比如在application: didFinishLaunchingWithOptions:這個方法裡,調用APP的註冊遠程推送申請方法。

  

1 //ios82     3     UIUserNotificationSettings * s =[UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeSound | UIUserNotificationTypeAlert | UIUserNotificationTypeBadge categories:nil];4     5     [[UIApplication sharedApplication] registerUserNotificationSettings:s];6     7     [application registerForRemoteNotifications];

  若註冊成功,則會回調一個方法,代碼如下

 1 - (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken 2 { 3     NSString *decToken = [NSString stringWithFormat:@"%@", deviceToken]; 4     //擷取到之後要去掉角括弧和中間的空格 5     NSMutableString *st = [NSMutableString stringWithString:decToken]; 6     [st deleteCharactersInRange:NSMakeRange(0, 1)]; 7     [st deleteCharactersInRange:NSMakeRange(st.length-1, 1)]; 8     NSString *string1 = [st stringByReplacingOccurrencesOfString:@" " withString:@""]; 9     //儲存到本地10     NSUserDefaults *u = [NSUserDefaults standardUserDefaults];11     [u setObject:string1 forKey:@"deviceToken"];12 }

  相對應的,肯定也有一個註冊失敗的回調。裡面寫錯誤處理的代碼就可以,這裡就不舉例了。

  那有沒有想過,正常的推播通知會在我們的通知面板裡,那如果我正在使用這個APP,那麼推送肯定不會到通知面板裡的,我們怎麼找到它呢。在下面這個回調方法裡,當我們正在使用APP,收到了一條通知,那麼APP會直接回調這個方法,不會去彈出通知。

1 - (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo2 {3     NSLog(@"Receive remote notification : %@",userInfo);4     UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"提示" message:userInfo[@"aps"][@"alert"] delegate:self cancelButtonTitle:@"好" otherButtonTitles:nil, nil];5     [alert show];6    7 }

  在這個方法裡面,處理我們接收到的訊息即可。

  前端的任務就這麼多,別忘了把device_token交給你的服務端。

  服務端的代碼本來不用我們寫,但是遇到不會寫的,讓他們去看蘋果的官方文檔就行。要是還看不懂,就找一個現成的代碼研究一下。

  程式猿攻城獅都是萬能的,不僅會修電腦,還要會寫後台。那麼,我們就來看看後台是怎麼實現的。

  首先,按照上面流程來說,服務端擷取到device_token後,使用認證向APNS發送推送請求,那麼問題來了。挖掘機技術哪家強?

  推送認證哪裡來?

  需要一個開發人員帳號。沒錯,和我們真機調試的認證一樣,至少需要99刀。有了帳號,我們就可以申請一個認證。下面,跟著一步一步看,比較麻煩。

  

  1.需要在MacOS上產生一個CertificateSigningRequest.certSigningRequest檔案。開啟應用程式中的“鑰匙串訪問”,從菜單中選擇“認證助理”-》“從憑證授權單位請求認證”

1 <?php 2 3 $cert_id = 1686; 4 $device_token = $_REQUEST['device_token']; 5 $message = $_REQUEST['message']; 6 7 //這個是簡單的例子,更複雜的訊息格式請查看蘋果官方文檔 8 $body = array( 9 'aps' => array( 'alert' => $message , 'badge' => 1, 'sound' => 'in.mp3')10 );11 $apns = new SaeAPNS();12 //push訊息到SAE推送伺服器13 $result = $apns->push( $cert_id , $body , $device_token );14 15 if( $result && is_array($result) ){16 $dic = array('success' => '0');17 echo json_encode($dic);18 // var_dump( $result );19 } else {20 $dic = array('success' => '1');21 echo json_encode($dic);22 //var_dump($apns->errno(), $apns->errmsg());23 }24 ?>

  這個介面呢,需要兩個參數,一個是裝置的device_token,還有就是你要推送的訊息內容。然後調用SAE的方法就可以。發送成功返回JSON串。複雜的代碼就不說了。

  這隻是個測試demo,真正的推送是後台判斷的。不是我們去調介面。

  就到這裡吧。  

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.