日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

IOS开发之----远程推送通知

發布時間:2024/9/30 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 IOS开发之----远程推送通知 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
原文地址:IOS開發之----遠程推送通知作者:倒計時

玩了一年的iPhone了各種App的遠程通知接收了不少,每次接收到的時候,就在反思,這丫的怎么實現的!?

由于工作方面一直沒有接觸的機會,所以只好自己主動去做做練習試試了.

實踐后發現,一系列的配置非常繁瑣,當然咯,網上的教程已經一大堆了.

在這里還是寫一篇文章來記錄一些自己容易忘記的細節,以備日后所需時能夠有用武之地.


依照自己的習慣,喜歡把參考過的教程列舉出來,真的很感謝這些網上的牛人.

1:?ios本地通知和遠程通知

http://wangjun.easymorse.com/?p=1482

2: 蘋果遠程通知服務申請激活例圖 (外國佬寫的.)

http://mobiforge.com/developing/story/programming-apple-push-notification-services

3:書籍參考:iPhone 開發秘籍 第16章 推送通知.


好了,進入正文:

首先是申請證書的網址

https://developer.apple.com/ios/manage/overview/index.action

登錄成功以后,進入iOS 配置管理的 主頁面.



第一步操作是去創建一個新的App IDs創建成功后,會需要提供安全證書來激動推送服務,如下圖:








?

選擇存儲到磁盤以后,生成一個文件名稱為(簡稱CSR):?CertificateSigningRequest.certSigningRequest

回到Apple頁面 將這個提交并提示激動成功.

激活成功后的App ?IDs?提供下載開發版或是發布版的主動推送證書(aps_development.cer),如果需要做服務器方面的主動推送的話,就必須要下載這個文件來使用推送服務了.

第二步要為App提供接受推送許可的證書,點擊Provisioning進行設置,添加一個新的許可,選擇剛剛新創建的App IDs. 再選擇可以調試的iPhone 設備.

最后,同樣是下載下來:?YsyPushMessageDemo.mobileprovision雙擊該證書,讓其加載一次.

接下來,進入iOS工程,選擇使用該證書來調試.




?

紅圈中,全部設置剛剛加載的許可證書.


那么到這里,關于證書類的準備工作,已經全部準備就緒.

在這里再此強調一次,每個文件的具體作用

1:?CertificateSigningRequest.certSigningRequest : 為生成App IDs 而用

2:?aps_development.cer 為開發主動推送服務而用到的證書

3:?YsyPushMessageDemo.mobileprovision 為App 接受推送通知的許可服務


主動推送的Push 代碼及使用,請參考一開始介紹的第一篇博客

這里只附上下載地址:?https://github.com/stefanhafeneger/PushMeBaby


接下來,說說收到推送通知代碼方面.

1:申請本App需要接受來自服務商提供推送消息,

?


  • [[UIApplication?sharedApplication]?registerForRemoteNotificationTypes:(UIRemoteNotificationTypeBadge?|?UIRemoteNotificationTypeSound?|?UIRemoteNotificationTypeAlert)];??

  • 2:申請發出后,如果成功,委托會自動返回一個設備令牌(toKen),如果失敗,將會進入另外一個失敗的委托

    ?

    ?


  • //遠程通知注冊成功委托??
  • -?(void)application:(UIApplication?*)application?didRegisterForRemoteNotificationsWithDeviceToken:(NSData?*)deviceToken??
  • {??
  • ????NSLog(@"%@",deviceToken);??
  • ????self.viewController.toKenValueTextView.text?=?[NSString?stringWithFormat:@"%@",deviceToken];??
  • ????self.viewController.pushStatusLabel.text?=?@"已經注冊.";??
  • }??
  • //遠程通知注冊失敗委托??
  • -(void)application:(UIApplication?*)application?didFailToRegisterForRemoteNotificationsWithError:(NSError?*)error??
  • {??
  • ????self.viewController.toKenValueTextView.text?=?[error?description];??
  • }??

  • 3:將設備令牌碼提供給服務商,以供推送到具體的手機上面. 如果遠程推送消息來了,用戶點擊了推送消息,或者應用已經處于打開狀態,系統都會自動調用以下委托:

    ?

    ?


  • //點擊某條遠程通知時調用的委托?如果界面處于打開狀態,那么此委托會直接響應??
  • -(void)application:(UIApplication?*)application?didReceiveRemoteNotification:(NSDictionary?*)userInfo??
  • {??
  • ????NSLog(@"遠程通知");??
  • ????[self?PMD_uesPushMessage:userInfo];??
  • }??

  • 4: 第三點里面的介紹的情況是應用程序已經處于運行狀態,上面的委托才會被執行,如果應用程序處于未啟用狀態,此時又需要響應消息,那么需要以下委托處理.

    ?

    ?


  • -?(BOOL)application:(UIApplication?*)application?didFinishLaunchingWithOptions:(NSDictionary?*)launchOptions??
  • {??
  • ????//這里處理應用程序如果沒有啟動,但是是通過通知消息打開的,此時可以獲取到消息.??
  • ????if?(launchOptions?!=?nil)?{??
  • ????????NSDictionary?*userInfo?=?[launchOptions?objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey];??
  • ????????[self?PMD_uesPushMessage:userInfo];??
  • ????}??
  • ????return?YES;??
  • }??
  • 5:清空通知中心已有的推送消息,只需要將指定App 的 Badge 設置為 0即可

    ?


  • [[UIApplication?sharedApplication?]?setApplicationIconBadgeNumber:0];??

  • ?

    6:主動推送的字符串必須符合如下Json數組的格式,才能正確推送到手機當中.

    ?

    ?

    ????@"{

    ???????//自定義參數

    ???????"userinfo":

    ??????????????{

    ?????????????????"name":"remote notice"

    ??????????????},

    ???????//標準寫法

    ???????"aps":

    ??????????????{

    ?????????????????"alert":

    ???????????????????????????{

    ??????????????????????????????"action-loc-key":"Open",//支持多語言

    ??????????????????????????????"body":"messgae content"//消息正文

    ???????????????????????????},

    ?????????????????"badge":1,//為App 的icon ?標記 具體數值

    ?????????????????"sound":"default"?//播放的音頻文件,default 表示系統默認的選擇列鈴聲

    ?????????????}?

    ?????}";



    到這里就差不多結束了.


    php服務器推送消息


    ?

  • <?php??
  • ??
  • $deviceToken?=?'38c866dd?bb323b39?ffa73487?5e157ee5?a85e0b7ce90d56e9?fe145bcc?6c2c594b';?//?masked?for?security?reason??
  • //?Passphrase?for?the?private?key?(ck.pem?file)??
  • //?$pass?=?'';??
  • //?Get?the?parameters?from?http?get?or?from?command?line??
  • $message?=?$_GET['message']?or?$message?=?$argv[1]?or?$message?=?'Message?received?from?javacom';??
  • $badge?=?(int)$_GET['badge']?or?$badge?=?(int)$argv[2];??
  • $sound?=?$_GET['sound']?or?$sound?=?$argv[3];??
  • //?Construct?the?notification?payload??
  • $body?=?array();??
  • $body['aps']?=?array('alert'?=>?$message);??
  • if?($badge)??
  • $body['aps']['badge']?=?$badge;??
  • if?($sound)??
  • $body['aps']['sound']?=?$sound;??
  • ??
  • ??
  • $ctx?=?stream_context_create();??
  • stream_context_set_option($ctx,?'ssl',?'local_cert',?'ck.pem');??
  • //?assume?the?private?key?passphase?was?removed.??
  • //?stream_context_set_option($ctx,?'ssl',?'passphrase',?$pass);??
  • $fp?=?stream_socket_client('ssl://gateway.sandbox.push.apple.com:2195',?$err,?$errstr,?60,?STREAM_CLIENT_CONNECT,?$ctx);??
  • if?(!$fp)?{??
  • print?"Failed?to?connect?$err?$errstrn";??
  • return;??
  • }??
  • else?{??
  • print?"Connection?OKn";??
  • }??
  • $payload?=?json_encode($body);??
  • $msg?=?chr(0)?.?pack("n",32)?.?pack('H*',?str_replace('?',?'',?$deviceToken))?.?pack("n",strlen($payload))?.?$payload;??
  • print?"sending?message?:"?.?$payload?.?"n";??
  • fwrite($fp,?$msg);??
  • fclose($fp);??
  • ?>
  • ?這個帖子寫的也不錯

    http://blog.csdn.net/bl1988530/article/details/6729369

    ?

    代碼例子下載:

    http://ishare.iask.sina.com.cn/f/33789601.html

    總結

    以上是生活随笔為你收集整理的IOS开发之----远程推送通知的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。