ios推送服务,php服务端
本文转载至http://my.oschina.net/AStar/blog/176531
证书生成参考: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:@"<" withString:@""]
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
}
****************服务器端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<br/>";
}
// 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个字符长度限制;超出范围不能发送
转载于:https://www.cnblogs.com/Camier-myNiuer/p/4173679.html
ios推送服务,php服务端相关推荐
- sse服务器推送性能,SSE 服务端向客户端推送
传统的ajax都是由客户端主动去请求,服务端才可以返回数据 而sse是建立一个通道,并且在断线后自动重连,由服务端去推送,不需要客户端去主动请求,只需要建立通道 websocket是双向通信 客户端可 ...
- VIVO推送接入 OPPO推送接入 客户端+服务端
老生常谈,推送接入已经不是什么难事,跟着文档走几小时就能搞定.不过我这里还是要记录一下,因为我在接入的时候还是有坑.希望这篇文章可以帮到你. VVIO客户端 厂商推送,无非就是收到推送拉起通知.所以在 ...
- APNS提供了两项基本的服务:消息推送和反馈服务
推送通知,也被叫做远程通知,是在iOS 3.0以后被引入的功能.是当程序没有启动或不在前台运行时,告诉用户有新消息的一种途径,是从外部服务器发送到应用程序上的.一般说来,当要显示消息或下载数据的时候, ...
- iOS推送小结--swift语言
APNS的推送机制 首先我们看一下苹果官方给出的对ios推送机制的解释.如下图 Provider就是我们自己程序的后台服务器,APNS是Apple Push Notification Service的 ...
- iOS 推送通知及推送扩展
概述 iOS中的通知包括本地推送通知和远程推送通知,两者在iOS系统中都可以通过弹出横幅的形式来提醒用户,点击横幅会打开应用.在iOS 10及之后版本的系统中,还支持通知扩展功能(UNNotifica ...
- 关于Android安卓APP保活 - 安卓消息推送详解 - 安卓端外推送离线推送
转自:http://zhangtielei.com/posts/blog-android-push.html 说Android端外推送比较烦,实际有两层意思:首先是说实现上比较麻烦,至今业界也没有找到 ...
- IOS推送详解(一)------APNs
最近项目需要做IOS推送,在网上了解了下苹果的推送过程以及接口协议. 博文会分几部分来写,先介绍下APNs,然后介绍协议(新的旧的都说下),然后介绍生成证书,最后上代码. APNS IOS推送要比安卓 ...
- 一步一步教你做ios推送
最近在研究ios的推送问题,遇到了一些问题,最终整理了一下.放在这里和大家分享 APNS的推送机制 首先我们看一下苹果官方给出的对ios推送机制的解释.如下图 Provider就是我们自己程序的后台服 ...
- 一步一步教你做ios推送 pem证书制作 php推送
一步一步教你做ios推送 分类: ios2013-03-03 21:48 3385人阅读 评论(8) 收藏 举报 ios推送客户端服务器 最近在研究ios的推送问题,遇到了一些问题,最终整理了一下.放 ...
- iOS 推送,删除指定推送消息或者撤回某条推送
iOS 推送,删除指定推送消息 远程推送经常会出现收到重复推送的问题,或者想删除某条推送消息的问题,本文将详细说明 静默推送 在 iOS10 之后 Apple 新增了静默推送的功能,使 App 可以在 ...
最新文章
- c语言程序能够在不同的操作系统下运行,这说明c语言具有很好的,程序设计(C)作业一(有答案)...
- node的包管理工具:yarn和npm
- oralce中级OCP考试时间和题量以及通过率
- 【控制】控制学习路线资源整理
- DL之PerceptronAdalineGD:基于iris莺尾花数据集利用Perceptron感知机和AdalineGD算法实现二分类
- 34.任务计划cron chkconfig systemctl管理服务 unit target
- android webview控件的缩放问题 隐藏缩放控件
- C\C++中声明与定义的区别
- 用masterpage后页面定位
- NotificationManager和Notification区别
- Javaweb家政服务管理系统的设计与实现
- 判断360浏览器极速和兼容模式
- c语言入门很难,C语言入门教程,C语言编程,从入门到精通,没你想的那么难
- 理财中的六大心理学效应(一)
- 饭店计算机信息管理全章ppt,酒店信息质量管理.ppt
- MVC 使用ViewBag 加载数据 与laypage 结合
- keil5安装及注册许可
- 上网本 linux中文版,veket|veket linux上网本操作系统 v5.30 简体中文正式版 - 天天游戏吧...
- 这样学Shader可以少走几年弯路,看完我信了……
- 分享如何利用思维导图进行营销策划使用攻略