ios推送php服务代码,ios推送服务,php服务端

生成证书

证书生成参考:https://parse.com/tutorials/ios-push-notifications

会生成三个文件

xxx.cer

xxx.certSigningRequest

xxx.p12

用PHP做推送需要

推送证书生成。

生成pem步骤:

1.下载下来你配置好的推送证书aps_developer_identity.cer 文件。

2.转换 .cer 文件到 .pem 文件:

openssl x509 -in aps_developer_identity.cer -inform der -out PushChatCert.pem

3.在把你“钥匙”推送证书导出成的.p12到.pem文件:

openssl pkcs12 -nocerts -out PushChatKey.pem -in PushChatKey.p12

Enter Import Password:

MAC verified OK

Enter PEM pass phrase:

Verifying - Enter PEM pass phrase:

4.合并两个pem文件:cat PushChatCert.pem PushChatKey.pem > ck.pem

5.测试证书是否可用:

openssl s_client -connect gateway.sandbox.push.apple.com:2195 -cert PushChatCert.pem -key PushChatKey.pem

****************客户端推送处理,以下在AppDelegate文添加****************

//是否支持注册推送

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

{

/*............... */

//消息推送支持的类型

UIRemoteNotificationType types =(UIRemoteNotificationTypeBadge|UIRemoteNotificationTypeSound|UIRemoteNotificationTypeAlert);

//注册消息推送

[[UIApplication sharedApplication]registerForRemoteNotificationTypes:types];

}

发送推送的思路:先获取手机的 deviceToken ,然后发送到我们的服务器

//获取DeviceToken成功

- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken

{

NSLog(@"注册device token");

NSLog(@"DeviceToken: {%@}",deviceToken);

//这里进行的操作,是将Device Token发送到服务端

NSString *tokenStr = [deviceToken description];

NSString *pushToken = [[[tokenStr stringByReplacingOccurrencesOfString:@"

stringByReplacingOccurrencesOfString:@">" withString:@""]

stringByReplacingOccurrencesOfString:@" " withString:@""];

//注册到我们的服务器

NSString *url = @"http://api.xxxxxxcom/index.php?r=site/saveIphoneDeviceToken&device_token=";

url = [url stringByAppendingFormat:@"%@", pushToken];

[[AFOSCClient sharedClient]getPath:url parameters:Nil

success:^(AFHTTPRequestOperation *operation, id responseObject) {

NSLog(@"注册成功");

} failure:^(AFHTTPRequestOperation *operation, NSError *error) {

NSLog(@"注册失败");

}];

}

然后是处理接收推送消息

//注册消息推送失败

- (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error

{

NSLog(@"注册消息推送失败");

NSLog(@"Register Remote Notifications error:{%@}",[error localizedDescription]);

}

//处理收到的消息推送

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo

{

//    NSLog(@"Receive remote notification : %@",userInfo);

//    NSLog(@"%@",[userInfo objectForKey:@"aps"]);

NSDictionary *aps = [userInfo objectForKey:@"aps"];

//    NSLog(@"%@",[aps objectForKey:@"alert"]);

NSString *msg = [aps objectForKey:@"alert"];

//    NSLog(@"%@",[userInfo objectForKey:@"alert"]);

UIAlertView *alert =

[[UIAlertView alloc] initWithTitle:@"温馨提示"

message:msg

delegate:nil

cancelButtonTitle:@"确定"

otherButtonTitles:nil];

[alert show];

[UIApplication sharedApplication].applicationIconBadgeNumber = 0;//把badge设置为0

//或者用下面的代码:

NSString* nsalert = [[userInfo objectForKey:@"aps"] objectForKey:@"alert"];

if(nsalert && [nsalert length] > 0)

{

UIAlertView *pAlert = [[UIAlertView alloc] initWithTitle:@"消息提示"

message:nsalert

delegate:self

cancelButtonTitle:@"详细"

otherButtonTitles:@"关闭", nil];

[pAlert show];

[pAlert release];

}

CFShow([userInfo description]);

//接收到push  打开程序以后设置badge的值

NSString *badgeStr = [[userInfo objectForKey:@"aps"] objectForKey:@"badge"];

if (badgeStr != nil)

[UIApplication sharedApplication].applicationIconBadgeNumber = [badgeStr intValue];

//接收到push  打开程序以后会震动

AudioServicesPlaySystemSound(kSystemSoundID_Vibrate);

}  ****************服务器端push.php****************  <?php   //手机注册应用返回唯一的deviceToken  $deviceToken = 'eb87b209 6395a040 a1cf85e5 15b6e972 20ec883f 6b3ac80f 02b92a1a 58cf273e';  //ck.pem通关密码  $pass = '13!@#23';     //消息内容  $message = '这是一条推送测试通知1'.time();  //badge我也不知是什么  //$badge = 1;  //sound我也不知是什么(或许是推送消息到手机时的提示音)  $sound = 'Duck.wav';  //建设的通知有效载荷(即通知包含的一些信息)  $body = array();  $body['aps'] = array('alert' => $message);  //if ($badge)  //  $body['aps']['badge'] = $badge;  if ($sound)    $body['aps']['sound'] = $sound;  //把数组数据转换为json数据  $payload = json_encode($body);  echo strlen($payload),"\r\n";  //下边的写法就是死写法了,一般不需要修改,  //唯一要修改的就是:ssl://gateway.sandbox.push.apple.com:2195这个是沙盒测试地址,ssl://gateway.push.apple.com:2195正式发布地址  $ctx = stream_context_create();  stream_context_set_option($ctx, 'ssl', 'local_cert', dirname(__FILE__) . '\\' . 'dev_ck.pem');    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 $errstr\n";      return;  }  else {     print "Connection OK\n
";  }  // send message  $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);  ?>  php服务端如果出问题,请检查是否开通ssl模块  Apache需要开启ssl模块,通过查看Apache的官方文档得知,使用ssl需要Apache开启三个支持模块分别是:  mod_include  mod_cgi  mod_expires  *注意:ios 的推送消息有256个字符长度限制;超出范围不能发送

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值