很好的參考資料:http://www.raywenderlich.com/32960/apple-push-notification-services-in-ios-6-tutorial-part-1
中文的參考資料: 第一部分 http://www.tairan.com/archives/194
第二部分:http://www.tairan.com/archives/281
第三部分:http://www.tairan.com/archives/240
比較詳細介紹各種認證設定檔的:http://blog.sina.com.cn/s/blog_7bfb9660010144j6.html
bound name 和 APP ID 的關係:http://blog.csdn.net/totogogo/article/details/7377870
可能出現的問題及各種點擊調用app的情況:http://blog.csdn.net/totogogo/article/details/7385487
另外還有cocoa上資料:http://www.cocoachina.com/bbs/read.php?tid-98797-keyword-%D4%B6%B3%CC%CD%A8%D6%AA.html
http://www.cocoachina.com/bbs/read.php?tid=102110
csdn上的資料:http://www.csdn.net/article/2012-02-18/311976
http://blog.csdn.net/cleverbobywjb/article/details/40109971
自己遇到的問題
1. error : Error Domain=NSCocoaErrorDomain Code=3000 "未找到應用程式的“aps-environment”的權利字串" UserInfo=0x1187ad0
程式回調委託
- (void)application:(UIApplication*)application didFailToRegisterForRemoteNotificationsWithError:(NSError*)error
{
NSLog(@"獲得令牌失敗: %@", error);
}
返回錯誤:error : Error Domain=NSCocoaErrorDomain Code=3000 "未找到應用程式的“aps-environment”的權利字串" UserInfo=0x1187ad0
我的出錯的原因是Xcode的Bundle Identifier 與認證的app id不一致
要確保這三個地方一致
如果第一個圖中的Bundle Identifier不能修改,看第二個圖中Bundle Identifier的值,可能是第二個圖中的設定讓第一個圖不能修改的。
我是直接讓這兩個值都和第三個圖中的值一樣。
2.xcode使用不正確的設定檔Provisioning Profile
xcode自動使用帶*的設定檔,這是不允許的。我是指定了要使用的設定檔:
點擊Debug 值的地方,會出現可選的Provisioning Profile:
因為我是Debug版,所以設定Debug的 Provisioning Profile為制定的Provisioning Profile,不使用Automatic.
3.根據上面英文連結到在終端運行
php simplepush.php
出現
Warning: stream_socket_client(): Unable to set private key file `/Users/ensurebit/Desktop/SimplePush/ck.pem' in /Users/ensurebit/Desktop/SimplePush/simplepush.php on line 22
Warning: stream_socket_client(): failed to create an SSL handle in /Users/ensurebit/Desktop/SimplePush/simplepush.php on line 22
Warning: stream_socket_client(): Failed to enable crypto in /Users/ensurebit/Desktop/SimplePush/simplepush.php on line 22
Warning: stream_socket_client(): unable to connect to ssl://gateway.sandbox.push.apple.com:2195 (Unknown error) in /Users/ensurebit/Desktop/SimplePush/simplepush.php on line 22
Failed to connect: 0
檢查了檔案改修改的3個地方也修改了
<?php
// Put your device token here (without spaces):
$deviceToken = ' 不帶空格的裝置令牌';
// Put your private key's passphrase here:
$passphrase = ' 密碼';
// Put your alert message here:
$message = '推播通知資訊!';
////////////////////////////////////////////////////////////////////////////////
$ctx = stream_context_create();
stream_context_set_option($ctx, 'ssl', 'local_cert', ' ck.pem自己的pem');
紅色部分是需要修改成自己的值的。
上網各種差,真是抓耳撓腮。突然發現$passphrase = '密碼';這行的密碼兩個字的單引號不對,是全形符號,然後改為半形符號,運行,成功。鼓掌。
$ php simplepush.php
Connected to APNS
Message successfully delivered
這樣表示成功。
一會自己的應用程式就收到了遠程推送。