iPhone 搭建PHP版Push服务器 实例操作

移动开发 iOS
本文介绍的是iPhone 搭建PHP版Push服务器 实例操作,很详细的操作步骤,我们先来看内容。

iPhone 搭建PHPPush服务器 实例操作是本文介绍的内容。在应用里加入 Push 功能对于用户及时获取信息是非常有帮助的,以前介绍过 iPhone Push (推送通知)功能原理浅析,里面提到要为自己的 App 添加推送功能,开发者先要搭建一个推送服务器。下面就介绍一个为 iPhone 应用搭建 php push 服务器的流程。

0.在Mac OS X机器上安装好XCode, 连接一台正常的iPhone, 保持平和的心态

APP 开发基础设置

1.在iPhone Provisioning Portal中建立好APP ID和Device.

2. 在Keychain Access.app中生成证书请求CertificateSigningRequest.certSigningRequest(菜单 > Keychain Access > Certificate Assistant > Request a Certificate From a Certificate Authority...).

3.在iPhone Provisioning Portal > Certificates中请求一个证书(点击Request Certificate,上传CertificateSigningRequest.certSigningRequest).

4.请求完成后,将证书文件(developer_identity.cer)下载,双击导入到Key Chain中.

5.在iPhone Provisioning Portal > Provisioning 中,新建一个Profile, 选择指定的APP ID和 Devices后生成.

6.将刚刚生成的Profile下载为*_profile.mobileprovision, 双击该文件, 将profile加载到iPhone中.

Push Notification service设置

7.在iPhone Provisioning Portal > App IDs,选择需要Push服务的App ID, 进入Configure.

8.确认 Enable for Apple Push Notification service ,配置 Development Push SSL Certificate, 上传第2步生成的证书请求.

9.下载生成的aps_developer_identity.cer, 完成Push服务配置.

10.双击aps_developer_identity.cer,保存到Key Chain.

生成php Push Notification sender需要的证书文件

11.在Keychain Access.app里选定这个新证书(Apple Development Push Services*),导出到桌面,保存为Certificates.p12.

12.运行如下命令:

  1. openssl pkcs12 -clcerts -nokeys -out cert.pem -in Certificates.p12  
  2. openssl pkcs12 -nocerts -out key.pem -in Certificates.p12  
  3. openssl rsa -in key.pem -out key.unencrypted.pem  
  4. cat cert.pem key.unencrypted.pem > ck.pem 

获得php Push Notification sender所需的设备令牌:

13.新建一个View-based Application项目,在$PROJECT_NAMEAppDelegate.m中:

a.粘贴如下代码:

  1.  - (void)applicationDidFinishLaunching:(UIApplication *)app {  
  2.      // other setup tasks here….  
  3.     [window addSubview:viewController.view];  
  4.      [self alertNotice:@"" withMSG:@"Initiating Remote Noticationss Are Active" cancleButtonTitle:@"Ok" otherButtonTitle:@""];  
  5.     [[UIApplication sharedApplication] registerForRemoteNotificationTypes:
  6. (UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeBadge |UIRemoteNotificationTypeSound)];  
  7.  }  
  8.  - (void)application:(UIApplication *)app didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {  
  9.      //NSLog(@"devToken=%@",deviceToken);  
  10.      [self alertNotice:@"" withMSG:[NSString stringWithFormat:@"devToken=%@",deviceToken] cancleButtonTitle:@"Ok" otherButtonTitle:@""];  
  11.  }  
  12.  - (void)application:(UIApplication *)app didFailToRegisterForRemoteNotificationsWithError:(NSError *)err {  
  13.     NSLog(@"Error in registration. Error: %@", err);  
  14.      [self alertNotice:@"" withMSG:[NSString stringWithFormat:@"Error in registration. Error: %@", err]
  15.  cancleButtonTitle:@"Ok" otherButtonTitle:@""];  
  16.  }  
  17. . -(void)alertNotice:(NSString *)title withMSG:(NSString *)msg cancleButtonTitle:(NSString *)cancleTitle 
  18. otherButtonTitle:(NSString *)otherTitle{  
  19.      UIAlertView *alert;  
  20.     if([otherTitle isEqualToString:@""])  
  21.          alert = [[UIAlertView alloc] initWithTitle:title message:msg delegate:self cancelButtonTitle:cancleTitle otherButtonTitles:nil,nil];  
  22.      else  
  23.          alert = [[UIAlertView alloc] initWithTitle:title message:msg delegate:self cancelButtonTitle:cancleTitle 
  24. otherButtonTitles:otherTitle,nil];  
  25.      [alert show];  
  26.      [alert release];  
  27.  } 

b.在 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 方法中增加

  1. [self alertNotice:@"" withMSG:@"Initiating Remote Noticationss Are Active" cancleButtonTitle:@"Ok" otherButtonTitle:@""];  
  2. [[UIApplication sharedApplication] registerForRemoteNotificationTypes:  
  3.  
  4.        (UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeBadge |UIRemoteNotificationTypeSound)]; 

14.项目设置

a.Targets > $APP_NAME > context menu > Properties > Identifier

修改

  1. identifier  
  2.  为  
  3. App ID  
  4. b.Targets > $APP_NAME > context menu > Build > Code Signing > Code Signing Identifier > Any iPhone OS Device 

指定 iPhone Developer 为开发用机,编译并运行后会在iPhone上显示设备令牌

php Push Notification sender代码如下:

  1. <?php 
  2. deviceToken = "设备令牌";   
  3. $body = array("aps" => array("alert" => 'message', "badge" => 1, "sound" => 'received5.caf'));  
  4. $ctx = stream_context_create();  
  5. stream_context_set_option($ctx, "ssl", "local_cert", "ck.pem");   
  6. $fp = stream_socket_client("ssl://gateway.sandbox.push.apple.com:2195", $err, $errstr, 60, STREAM_CLIENT_CONNECT, $ctx);  
  7. if (!$fp) {  
  8.     print "Failed to connect $err $errstrn";  
  9.     return;  
  10. }  
  11. print "Connection OK\n";  
  12. payload = json_encode($body);  
  13. $msg = chr(0) . pack("n",32) . pack("H*", $deviceToken) . pack("n",strlen($payload)) . $payload;  
  14. rint "sending message :" . $payload . "\n";  
  15. fwrite($fp, $msg);  
  16. fclose($fp);  
  17. ?> 

小结:iPhone 搭建PHPPush服务器 实例操作的内容介绍完了,希望本文对你有帮助。

责任编辑:zhaolei 来源: 互联网
相关推荐

2011-07-26 16:43:59

iPhone Web 服务器

2011-07-27 14:37:33

iPhone Push Notif 服务器

2012-09-21 10:36:54

PHPPHP搭建Web

2010-05-27 16:41:38

MySQL服务器

2011-04-22 10:36:09

Server Push推送技术

2016-10-13 15:57:28

nginxphpwindows

2010-10-19 09:35:08

Ubuntu 10.1云环境

2014-08-06 11:25:00

LinuxSVN服务器

2018-11-12 11:09:24

2021-09-10 10:07:17

Nginx虚拟主机服务器

2011-09-07 10:44:36

DHCP服务器配置

2010-08-26 11:01:05

DHCP服务器

2010-08-05 13:56:06

路由器配置

2009-12-10 17:20:00

PHP服务器架设

2011-07-18 13:37:53

2012-09-19 09:47:58

PHPWeb服务器

2010-08-29 20:53:03

DHCP服务器

2010-05-25 09:32:04

搭建SVN服务器

2021-01-29 14:41:43

Nginx直播服务器rtmp

2015-08-25 15:34:51

点赞
收藏

51CTO技术栈公众号