php實作ios推播的方法:先把要傳送的訊息以及iPhone標識打包,並且傳送給APNS;然後找有對應標識的iPhone,並把訊息傳送到iPhone;最後把寄來的訊息傳遞給相應的應用程序,並且按照設定彈出Push通知即可。
推薦:《php影片教學》
IOS推播訊息是許多IOS應用都具備的功能,最近也在研究這個功能,參考了很多資料終於搞定了,下面就把步驟拿出來分享下:
iOS訊息推送的工作機制可以簡單的用下圖來概括:
Provider是指某個iPhone軟體的Push伺服器,APNS是Apple Push Notification Service的縮寫,是蘋果的伺服器。
上圖可以分成三個階段:
第一階段:應用程式把要傳送的訊息、目的iPhone的識別打包,發給APNS。
第二階段:APNS在自身的已註冊Push服務的iPhone清單中,尋找有對應標識的iPhone,並把訊息傳送到iPhone。
第三階段:iPhone把發送的訊息傳遞給相應的應用程序,並且按照設定彈出Push通知。
從上圖我們可以看到:
1、應用程式註冊訊息推送。
2、iOS從APNS Server取得device token,應用程式接收device token。
3、應用程式將device token傳送給PUSH服務端程式。
4、服務端程式向APNS服務發送訊息。
5、APNS服務將訊息傳送給iPhone應用程式。
無論是iPhone客戶端和APNS,或是Provider和APNS,都需要透過憑證進行連線。
下面我介紹幾個用到的憑證。
一、CSR檔
1、產生Certificate Signing Request(CSR)
2、填寫你的信箱和常用名稱,並選擇儲存到硬碟。
點選繼續:
這樣就在本機產生了一個Push.certSigningRequest檔。
二、p12檔
1、匯出金鑰。
2、輸入你的密碼。
這樣就產生了一個Push.p12檔。
三、SSL certificate檔案
1、用你付過費的帳號登入iOS Provisioning Portal,並新建一個App ID,這個流程可以參考:iOS應用程式的真機除錯,這樣就會產生下面這條記錄:
2、點選右邊的Configure:
3、點擊Development Push SSL Certificate一行後的Configure:
#4、點選Continue:
到現在為止,我們已經產生了三個檔案:
#1、Push.certSigningRequest
2、Push.p12
3、aps_developer_identity.cer
雙擊aps_developer_dientity.cer 註冊到你的鑰匙圈中,這樣你的鑰匙圈就會有
#二、準備profile證書,因為推送訊息只能再在真機上測試,所以要建一個profile證書
點擊"new profile"為上面新建的APP ID建個profile ,成功之後下載*_Dev_Profile.mobileprovision
雙擊將其加入到xcode 的Provisioning Profiles 中,這裡有一點要注意,再將這個加入xcode之前如果之前已經加入過一定要把之前加入的刪掉,如果有多個的話會出錯。
三、工程代碼
到這裡憑證已經準備完畢,接下來,我們在xcode中新建一個測試工程,注意設定工程的Bundle Identifier必須與上面建立的APP ID 裡的相同
在didFinishLaunchingWithOptions 中加入程式碼
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { [self.window makeKeyAndVisible]; [[UIApplication sharedApplication] registerForRemoteNotificationTypes: UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound | UIRemoteNotificationTypeAlert]; return YES; } - (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)pToken { NSLog(@"regisger success:%@", pToken); //注册成功,将deviceToken保存到应用服务器数据库中 } - (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo{ // 处理推送消息 UIAlertView *alert=[[UIAlertView alloc]initWithTitle:@"通知" message:@"我的信息" delegate:selfcancelButtonTitle:@"取消" otherButtonTitles:nil, nil]; [alert show]; [alert release]; NSLog(@"%@", userInfo); } - (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error { NSLog(@"Regist fail%@",error); }
到這裡一切順利的話我們就可以在真機運行了,註冊成功我們會得到iphone 的deviceToken,
My token is:
#
#AP#AP#T8e#1、php連線APNS也是需要憑證的,還記得我們上面拿到的幾個憑證嗎?開啟終端,對上面的憑證做如下處理,
cd 進入憑證所在目錄
把.cer檔案轉換成.pem檔案:
$ openssl x509 -in aps_developer_identity.cer -inform der -out PushChatCert.pem
把私鑰Push.p12檔轉換成.pem檔:
#$ openssl pkcs12 -nocerts -out PushChatKey.pem -in Push.p12 Enter Import Password: MAC verified OK Enter PEM pass phrase: Verifying – Enter PEM pass phrase:
你首先需要为.p12文件输入passphrase密码短语,这样OpenSSL可以读它。然后你需要键入一个新的密码短语来加密PEM文件。还是使用”pushchat”来作为PEM的密码短语。你需要选择一些更安全的密码短语。
注意:如果你没有键入一个PEM passphrase,OpenSSL将不会返回一个错误信息,但是产生的.pem文件里面将不会含有私钥。
最后。把私钥和证书整合到一个.pem文件里:
$ cat PushChatCert.pem PushChatKey.pem > ck.pem
为了测试证书是否工作,执行下面的命令:
$ telnet gateway.sandbox.push.apple.com 2195 Trying 17.172.232.226… Connected to gateway.sandbox.push-apple.com.akadns.net. Escape character is ‘^]’.
它将尝试发送一个规则的,不加密的连接到APNS服务。如果你看到上面的反馈,那说明你的MAC能够到达APNS。按下Ctrl+C 关闭连接。如果得到一个错误信息,那么你需要确保你的防火墙允许2195端口。
然后再次连接,这次用我们的SSL证书和私钥来设置一个安全的连接:
$ openssl s_client -connect gateway.sandbox.push.apple.com:2195 -cert PushChatCert.pem -key PushChatKey.pem Enter pass phrase for PushChatKey.pem:
你会看到一个完整的输出,让你明白OpenSSL在后台做什么。如果连接是成功的,你可以键入一些字符。当你按下回车后,服务就会断开连接。如果在建立连接时有问题,OpenSSL将会给你一个错误消息
ck.pem文件就是我们需要得到php连接APNS 的文件,将ck.pem和push.php放入同一目录上传到服务器,push.php的代码如下:
<?php // 这里是我们上面得到的deviceToken,直接复制过来(记得去掉空格) $deviceToken = '740f4707bebcf74f 9b7c25d4 8e3358945f6aa01da5ddb387462c7eaf 61bb78ad'; // Put your private key's passphrase here: $passphrase = 'abc123456'; // Put your alert message here: $message = 'My first push test!'; $ctx = stream_context_create(); stream_context_set_option($ctx, 'ssl', 'local_cert', 'ck.pem'); stream_context_set_option($ctx, 'ssl', 'passphrase', $passphrase); // Open a connection to the APNS server //这个为正是的发布地址 //$fp = stream_socket_client(“ssl://gateway.push.apple.com:2195“, $err, $errstr, 60, //STREAM_CLIENT_CONNECT, $ctx); //这个是沙盒测试地址,发布到appstore后记得修改哦 $fp = stream_socket_client( 'ssl://gateway.sandbox.push.apple.com:2195', $err, $errstr, 60, STREAM_CLIENT_CONNECT|STREAM_CLIENT_PERSISTENT, $ctx); if (!$fp) exit("Failed to connect: $err $errstr" . PHP_EOL); echo 'Connected to APNS' . PHP_EOL; // Create the payload body $body['aps'] = array( 'alert' => $message, 'sound' => 'default' ); // Encode the payload as JSON $payload = json_encode($body); // Build the binary notification $msg = chr(0) . pack('n', 32) . pack('H*', $deviceToken) . pack('n', strlen($payload)) . $payload; // Send it to the server $result = fwrite($fp, $msg, strlen($msg)); if (!$result) echo 'Message not delivered' . PHP_EOL; else echo 'Message successfully delivered' . PHP_EOL; // Close the connection to the server fclose($fp); ?>
接下来我们访问http://localhost/push/push.php
iphone就会接收到一条推送消息了,如果有问题的话就检查上面的操作步骤,特别是加红的部分
另外去除标记的方法为,在viewDidApper中加入
int badge = [UIApplication sharedApplication].applicationIconBadgeNumber; if(badge > 0) { badge--; [UIApplication sharedApplication].applicationIconBadgeNumber = badge; }
以上是php如何實現ios推送的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本文比較了酸和基本數據庫模型,詳細介紹了它們的特徵和適當的用例。酸優先確定數據完整性和一致性,適合財務和電子商務應用程序,而基礎則側重於可用性和

本文討論了確保PHP文件上傳的確保,以防止諸如代碼注入之類的漏洞。它專注於文件類型驗證,安全存儲和錯誤處理以增強應用程序安全性。

本文討論了在PHP中實施API速率限制的策略,包括諸如令牌桶和漏水桶等算法,以及使用Symfony/Rate-limimiter之類的庫。它還涵蓋監視,動態調整速率限制和手

本文討論了使用password_hash和pyspasswify在PHP中使用密碼的好處。主要論點是,這些功能通過自動鹽,強大的哈希算法和SECH來增強密碼保護

本文討論了OWASP在PHP和緩解策略中的十大漏洞。關鍵問題包括注射,驗證損壞和XSS,並提供用於監視和保護PHP應用程序的推薦工具。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

Atom編輯器mac版下載
最受歡迎的的開源編輯器

SAP NetWeaver Server Adapter for Eclipse
將Eclipse與SAP NetWeaver應用伺服器整合。

PhpStorm Mac 版本
最新(2018.2.1 )專業的PHP整合開發工具

Dreamweaver CS6
視覺化網頁開發工具

mPDF
mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),