本文主要是介绍IOS开发之----远程推送通知,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
玩了一年的iPhone了各种App的远程通知接收了不少,每次接收到的时候,就在反思,这丫的怎么实现的!
由于工作方面一直没有接触的机会,所以只好自己主动去做做练习试试了.
实践后发现,一系列的配置非常繁琐,当然咯,网上的教程已经一大堆了.
在这里还是写一篇文章来记录一些自己容易忘记的细节,以备日后所需时能够有用武之地.
依照自己的习惯,喜欢把参考过的教程列举出来,真的很感谢这些网上的牛人.
1:
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):
回到Apple页面 将这个提交并提示激动成功.
激活成功后的App
第二步要为App提供接受推送许可的证书,点击Provisioning进行设置,添加一个新的许可,选择刚刚新创建的App IDs. 再选择可以调试的iPhone 设备.
最后,同样是下载下来:
接下来,进入iOS工程,选择使用该证书来调试.
红圈中,全部设置刚刚加载的许可证书.
那么到这里,关于证书类的准备工作,已经全部准备就绪.
在这里再此强调一次,每个文件的具体作用
1:
2:
3:
主动推送的Push 代码及使用,请参考一开始介绍的第一篇博客
这里只附上下载地址:
接下来,说说收到推送通知代码方面.
1:申请本App需要接受来自服务商提供推送消息,
- [[UIApplication
sharedApplication] registerForRemoteNotific ationTypes:(UIRemoteNotificationType Badge | UIRemoteNotificationType Sound | UIRemoteNotificationType Alert)];
2:申请发出后,如果成功,委托会自动返回一个设备令牌(toKen),如果失败,将会进入另外一个失败的委托
- //远程通知注册成功委托
- -
(void)application:(UIApplication *)application didRegisterForRemoteNoti ficationsWithDeviceToken :(NSData *)deviceToken - {
-
NSLog(@"%@",deviceToken); -
self.viewController.toKenValueTextView.text = [NSString stringWithFormat:@"%@",deviceToken]; -
self.viewController.pushStatusLabel.text = @"已经注册."; - }
- //远程通知注册失败委托
- -(void)application:(UIApplication
*)application didFailToRegisterForRemo teNotificationsWithError :(NSError *)error - {
-
self.viewController.toKenValueTextView.text = [error description]; - }
3:将设备令牌码提供给服务商,以供推送到具体的手机上面. 如果远程推送消息来了,用户点击了推送消息,或者应用已经处于打开状态,系统都会自动调用以下委托:
- //点击某条远程通知时调用的委托
如果界面处于打开状态,那么此委托会直接响应 - -(void)application:(UIApplication
*)application didReceiveRemoteNotifica tion:(NSDictionary *)userInfo - {
-
NSLog(@"远程通知"); -
[self PMD_uesPushMessage:userInfo]; - }
4: 第三点里面的介绍的情况是应用程序已经处于运行状态,上面的委托才会被执行,如果应用程序处于未启用状态,此时又需要响应消息,那么需要以下委托处理.
- -
(BOOL)application:(UIApplication *)application didFinishLaunchingWithOp tions:(NSDictionary *)launchOptions - {
-
//这里处理应用程序如果没有启动,但是是通过通知消息打开的,此时可以获取到消息. -
if (launchOptions != nil) { -
NSDictionary *userInfo = [launchOptions objectForKey:UIApplicationLaunchOptio nsRemoteNotificationKey]; -
[self PMD_uesPushMessage:userInfo]; -
} -
return YES; - }
5:清空通知中心已有的推送消息,只需要将指定App 的 Badge 设置为 0即可
- [[UIApplication
sharedApplication ] setApplicationIconBadgeN umber:0];
到这里就差不多结束了.
php服务器推送消息
- <?php
-
- $deviceToken
= '38c866ddbb323b39 ;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 = 'Messagereceived ;from javacom' - $badge
= $_GET['badge'](int) or $badge = $argv[2];(int) - $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
= 'ssl://gateway.sandbox.push.apple.com:2195',stream_socket_client( $err, $errstr, 60, $ctx);STREAM_CLIENT_CONNECT, - if
(! $fp){ - print
"Failed to ;connect $err $errstrn" - return;
- }
- else
{ - print
"Connection OKn" ; - }
- $payload
= $body);json_encode( - $msg
= chr(0). "n",32)pack( . 'H*',pack( str_replace(' ' ,'', $deviceToken)) . "n",strlen($payload))pack( . $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开发之----远程推送通知的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!