- 浏览: 914796 次
- 性别:
- 来自: 湖北—》上海
最新评论
-
miketwais:
janyee2012 写道楼主在不,请问下面这句配置在disc ...
cas实现单点登录,登出(java和php客户端) -
f5528710:
IOS 利用UIScrollview实现滑动筛选 -
卡卡欧克:
php 客户端 不能和 java 客户端 同时登录 怎么办
cas实现单点登录,登出(java和php客户端) -
duanyutian:
大神 我加0 或者\n都没有用 和mina的通信有没有注意点 ...
ios socket AsyncSocket使用 -
周聪龙:
楼主,我按照你的那个配置之后,怎么反而不能登录了,我以前只是简 ...
cas 3.4登录成功返回用户更多信息
IOS推送消息是许多IOS应用都具备的功能,最近也在研究这个功能,参考了很多资料终于搞定了,下面就把步骤拿出来分享下:
iOS消息推送的工作机制可以简单的用下图来概括:
Provider是指某个iPhone软件的Push服务器,APNS是Apple Push Notification Service的缩写,是苹果的服务器。
上图可以分为三个阶段:
第一阶段:应用程序把要发送的消息、目的iPhone的标识打包,发给APNS。
第二阶段:APNS在自身的已注册Push服务的iPhone列表中,查找有相应标识的iPhone,并把消息发送到iPhone。
第三阶段:iPhone把发来的消息传递给相应的应用程序,并且按照设定弹出Push通知。
从上图我们可以看到:
1、应用程序注册消息推送。
2、iOS从APNS Server获取device token,应用程序接收device token。
3、应用程序将device token发送给PUSH服务端程序。
4、服务端程序向APNS服务发送消息。
5、APNS服务将消息发送给iPhone应用程序。
无论是iPhone客户端和APNS,还是Provider和APNS,都需要通过证书进行连接。
下面我介绍一下几种用到的证书。
一、CSR文件
1、生成Certificate Signing Request(CSR)
2、填写你的邮箱和常用名称,并选择保存到硬盘。
点击继续:
这样就在本地生成了一个Push.certSigningRequest文件。
二、p12文件
1、导出密钥。
2、输入你的密码。
这样就生成了一个Push.p12文件。
三、SSL certificate文件
1、用你付过费的帐号登录到iOS Provisioning Portal,并新建一个App ID,这个过程可以参考:iOS应用的真机调试,这样就会生成下面这条记录:
2、点击右侧的Configure:
3、点击Development Push SSL Certificate一行后的Configure:
4、点击Continue:
5、选择前面生成好的Push.certSigningRequest文件,点击Generate,出现如下所示的页面:
6、点击Continue:
7、点击Download,并将文件命名为aps_developer_identity.cer。
8、点击Done,你会发现状态变成了Enabled:
到现在为止,我们已经生成了三个文件:
1、Push.certSigningRequest
2、Push.p12
3、aps_developer_identity.cer
双击aps_developer_dientity.cer 注册到你的钥匙串中,这样你的钥匙串中就会有
二、准备profile证书,因为推送消息只能再真机上测试,所以要建一个profile证书
点击"new profile"为上面新建的APP ID建个profile ,成功之后下载*_Dev_Profile.mobileprovision
双击将其加入到xcode 的Provisioning Profiles 中,这里有一点要注意,再将这个加入xcode之前如果之前已经加入过一定要把之前加入的删掉,如果有多个的话会出错。
三、工程代码
到这里证书已经准备完毕,接下来,我们在xcode中新建一个测试工程,注意设置工程的Bundle Identifier必须与上面建的APP ID 里的相同
在didFinishLaunchingWithOptions 中加入一下代码
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
[self.window makeKeyAndVisible];
[[UIApplication sharedApplication] registerForRemoteNotificationTypes: UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound | UIRemoteNotificationTypeAlert];
return YES;
}
- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)pToken {
NSLog(@"regisger success:%@", pToken);
//注册成功,将deviceToken保存到应用服务器数据库中
}
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo{
// 处理推送消息
UIAlertView *alert=[[UIAlertView alloc]initWithTitle:@"通知" message:@"我的信息" delegate:self cancelButtonTitle:@"取消" otherButtonTitles:nil, nil];
[alert show];
[alert release];
NSLog(@"%@", userInfo);
}
- (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error {
NSLog(@"Regist fail%@",error);
}
到这里一切顺利的话我们就可以在真机运行了,注册成功我们会得到iphone 的deviceToken,
My token is:
<740f4707 bebcf74f 9b7c25d4 8e335894 5f6aa01d a5ddb387 462c7eaf 61bb78ad>
四、在应用服务器采用php的方式将消息推送给APNS,
1、php连接APNS也是需要证书的,还记得我们上面获得的几个证书吗?打开终端,对上面的证书做如下处理,
cd 进入证书所在目录
把.cer文件转换成.pem文件:
$ openssl x509 -in aps_developer_identity.cer -inform der
-out PushChatCert.pem
把私钥Push.p12文件转换成.pem文件:
$ openssl pkcs12 -nocerts -out PushChatKey.pem -in Push.p12
Enter Import Password:
MAC verified OK
Enter PEM pass phrase:
Verifying – Enter PEM pass phrase:
你首先需要为.p12文件输入passphrase密码短语,这样OpenSSL可以读它。然后你需要键入一个新的密码短语来加密PEM文件。还是使用”pushchat”来作为PEM的密码短语。你需要选择一些更安全的密码短语。
注意:如果你没有键入一个PEM passphrase,OpenSSL将不会返回一个错误信息,但是产生的.pem文件里面将不会含有私钥。
最后。把私钥和证书整合到一个.pem文件里:
$ cat PushChatCert.pem PushChatKey.pem > ck.pem
为了测试证书是否工作,执行下面的命令:
$ telnet gateway.sandbox.push.apple.com 2195
Trying 17.172.232.226…
Connected to gateway.sandbox.push-apple.com.akadns.net.
Escape character is ‘^]’.
它将尝试发送一个规则的,不加密的连接到APNS服务。如果你看到上面的反馈,那说明你的MAC能够到达APNS。按下Ctrl+C 关闭连接。如果得到一个错误信息,那么你需要确保你的防火墙允许2195端口。
然后再次连接,这次用我们的SSL证书和私钥来设置一个安全的连接:
$ openssl s_client -connect gateway.sandbox.push.apple.com:2195
-cert PushChatCert.pem -key PushChatKey.pem
Enter pass phrase for PushChatKey.pem:
你会看到一个完整的输出,让你明白OpenSSL在后台做什么。如果连接是成功的,你可以键入一些字符。当你按下回车后,服务就会断开连接。如果在建立连接时有问题,OpenSSL将会给你一个错误消息,
ck.pem文件就是我们需要得到php连接APNS 的文件,将ck.pem和push.php放入同一目录上传到服务器,push.php的代码如下:
<?php
// 这里是我们上面得到的deviceToken,直接复制过来(记得去掉空格)
$deviceToken = '740f4707bebcf74f 9b7c25d4 8e3358945f6aa01da5ddb387462c7eaf 61bb78ad';
// Put your private key's passphrase here:
$passphrase = 'abc123456';
// Put your alert message here:
$message = 'My first push test!';
////////////////////////////////////////////////////////////////////////////////
$ctx = stream_context_create();
stream_context_set_option($ctx, 'ssl', 'local_cert', 'ck.pem');
stream_context_set_option($ctx, 'ssl', 'passphrase', $passphrase);
// Open a connection to the APNS server
//这个为正是的发布地址
//$fp = stream_socket_client(“ssl://gateway.push.apple.com:2195“, $err, $errstr, 60, //STREAM_CLIENT_CONNECT, $ctx);
//这个是沙盒测试地址,发布到appstore后记得修改哦
$fp = stream_socket_client(
'ssl://gateway.sandbox.push.apple.com:2195', $err,
$errstr, 60, STREAM_CLIENT_CONNECT|STREAM_CLIENT_PERSISTENT, $ctx);
if (!$fp)
exit("Failed to connect: $err $errstr" . PHP_EOL);
echo 'Connected to APNS' . PHP_EOL;
// Create the payload body
$body['aps'] = array(
'alert' => $message,
'sound' => 'default'
);
// Encode the payload as JSON
$payload = json_encode($body);
// Build the binary notification
$msg = chr(0) . pack('n', 32) . pack('H*', $deviceToken) . pack('n', strlen($payload)) . $payload;
// Send it to the server
$result = fwrite($fp, $msg, strlen($msg));
if (!$result)
echo 'Message not delivered' . PHP_EOL;
else
echo 'Message successfully delivered' . PHP_EOL;
// Close the connection to the server
fclose($fp);
?>
接下来我们访问http://localhost/push/push.php
iphone就会接收到一条推送消息了,如果有问题的话就检查上面的操作步骤,特别是加红的部分
另外去除标记的方法为,在viewDidApper中加入
int badge = [UIApplication sharedApplication].applicationIconBadgeNumber;
if(badge > 0)
{
badge--;
[UIApplication sharedApplication].applicationIconBadgeNumber = badge;
}
给一个参考地址:http://article.ityran.com/archives/194
评论
Warning: pack(): Type H: illegal hex digit s in apple.php on line 44
PHP Warning: pack(): Type H: illegal hex digit z in apple.php on line 44
就是这句出问题
// Build the binary notification
$msg = chr(0) . pack('n', 32) . pack('H*', $deviceToken) . pack('n', strlen($payload)) . $payload;
为什么呢?
Error opening client certificate private key file PushChatKey.pem
712:error:02001002:system library:fopen:No such file or directory:/SourceCache/OpenSSL098/OpenSSL098-44/src/crypto/bio/bss_file.c:356:fopen('PushChatKey.pem','r')
712:error:20074002:BIO routines:FILE_CTRL:system lib:/SourceCache/OpenSSL098/OpenSSL098-44/src/crypto/bio/bss_file.c:358:
unable to load client certificate private key file
你运行过pushmebaby的demo没?
你执行哪个命令报错啊,我写的东西全部测试过,都ok
Error opening client certificate private key file PushChatKey.pem
712:error:02001002:system library:fopen:No such file or directory:/SourceCache/OpenSSL098/OpenSSL098-44/src/crypto/bio/bss_file.c:356:fopen('PushChatKey.pem','r')
712:error:20074002:BIO routines:FILE_CTRL:system lib:/SourceCache/OpenSSL098/OpenSSL098-44/src/crypto/bio/bss_file.c:358:
unable to load client certificate private key file
你运行过pushmebaby的demo没?
我按您的步聚,执行程序成功后
显示 Connected to APNS Message successfully delivered
但是ipad 没有接收到消息,请问这是什么原因?
好好的检查一下你的各个步骤,设备的id获取到了没?
我按您的步聚,执行程序成功后
显示 Connected to APNS Message successfully delivered
但是ipad 没有接收到消息,请问这是什么原因?
发表评论
-
Xcode8下载与安装iOS模拟器
2016-11-14 10:52 1935由于天朝的网络环境,在macOS中安装体积较大的软件,都会遭 ... -
AFNetWorking 3.0 用法
2016-10-28 14:48 9531、文件下载 AFHTTPSessionManager ... -
iOS开发 适配iOS10以及Xcode8
2016-09-19 10:35 757现在在苹果的官网上 ... -
CocoaPods安装和使用教程
2015-05-27 11:09 1001首先需要mac电脑上安装ruby环境系统需求Mac OS X ... -
IOS UIImagePickerController 不能全屏
2015-01-06 23:27 6018添加以下代码可以使取景框全屏 CGSize scre ... -
openfire 插件开发
2014-07-23 11:51 5255最近在做openfire的ios推送插件,下面介绍下ope ... -
openfire3.9.3导入eclipse
2014-07-21 17:00 6860最近在用openfire开发ios通讯功能,需要开发一个推送 ... -
ios 处理圆角图片拉伸
2014-06-26 09:33 2672类似9patch效果的iOS图 ... -
使用Xcode和Instruments调试解决iOS内存泄露
2014-05-21 09:00 1147虽然iOS 5.0版本之后加入了ARC机制,由于相互引用关 ... -
ios 使用ZBar读取条形码和二维码
2014-05-19 11:37 106851.使用ZBar项目。下载地址是: http://zbar ... -
ios 中gzip与unGzip
2014-05-14 15:09 1945工程中添加libz.dylib .h文件如下: # ... -
ios socket AsyncSocket使用
2014-05-10 23:27 10801一.项目添加ASyncSocket 1.下载ASyn ... -
ios7 改变状态栏颜色
2014-01-14 15:30 4324ios7 状态栏默认为白底黑色,怎么改变为黑底白字呢,以下为 ... -
iOS企业账号发布流程
2013-12-31 14:33 28666这两天需要发布一个ipa放到网上供其他人安装,需要用到企业级 ... -
ios GDataXMLNode 操作xml
2013-11-28 15:25 1663创建XML: //创建XML GData ... -
ios NSdata 与 NSString,Byte数组相互转换
2013-11-28 14:42 92621. NSData 与 NSString NSData- ... -
Android、iPhone和Java三个平台一致的加密方法
2013-11-25 22:52 3874先前一直在做安卓,最近要开发iPhone客户端,这其中遇到的 ... -
iOS开发图像处理--绘制图片上下颠倒
2013-11-16 22:07 2076使用CGContextDrawImage绘制图片上下颠倒 ... -
iphone 静态库读取资源文件
2013-08-07 17:43 7866在制作iphone静态库中并不能包含资源文件,虽然我们将资 ... -
IOS UIWebView截获html并修改便签内容,宽度自适应
2013-04-24 20:14 25569需求:混合应用UIWebView打开html后,UIWebV ...
相关推荐
在iOS应用开发中,消息推送是...综上所述,“ios消息推送源码(含php服务端源码)”涵盖了从服务端发送推送消息到客户端接收并处理的全过程,对于iOS开发者来说,理解并掌握这一过程是提升用户体验和应用功能的重要一环。
总的来说,iOS APNs推送消息涉及到客户端和服务端的协同工作,需要正确配置证书,处理设备Token,以及构建和发送有效的推送消息。通过理解这个过程,开发者可以确保他们的应用能够及时、准确地向用户推送通知。
在Java服务端实现iOS消息推送涉及到以下几个关键步骤和技术: 1. **应用程序注册消息推送**: 当用户首次启动iOS应用时,系统会请求用户允许接收推送通知。如果用户同意,应用程序将通过与APNS交互获取一个唯一的`...
本资源提供的是一套完整的C#语言实现的iOS推送服务端代码,适用于Windows服务环境。下面将详细介绍这个项目涉及的关键知识点。 1. **C#语言基础**:C#是一种面向对象的编程语言,由微软开发,广泛应用于Windows平台...
【苹果iOS推送Java服务端详解】 在iOS应用开发中,苹果提供了远程通知(Apple Push Notification service,简称APNs)服务,使得开发者可以向用户的设备发送消息,即使应用没有在前台运行也能接收到这些消息。本篇...
### IOS推送消息详解 在移动应用开发领域,**iOS推送消息**是一项关键功能,它能够增强用户参与度,提供即时信息更新,对于提升用户体验至关重要。本文将深入探讨iOS推送消息的工作原理、实施步骤以及必要的证书...
本文将深入探讨“iOS消息推送服务端开发”,包括主流的推送方式、JavaAPNS库以及如何实现多线程推送。 首先,iOS消息推送服务(Apple Push Notification service,简称APNs)是苹果公司提供的官方服务,用于向运行...
本主题主要关注"U盟消息推送"、"phpiOS推送"、"php安卓推送"以及"thinkPHP推送"这四个关键概念。接下来,我们将深入探讨这些知识点。 首先,"U盟消息推送"是一种第三方推送服务,它提供了一整套跨平台的消息推送...
java服务端推送消息给ios客户端,有兴趣的朋友可以看下
本程序为测试ios推送消息程序。 生成推送证书后,添加到本程序根目录下,并配置JdSoft.Apns.Test.exe.config文件,就可以向指定设备推送消息。 可一作为验证证书是否生成正确。 ///证书名称 ...
总的来说,通过理解deviceToken的获取、SSL证书的创建、消息结构的构建以及与APNs的通信,你可以使用PHP搭建一个基本的iOS消息推送服务端。不过,实际项目中可能还需要考虑更多的细节,比如推送消息的可靠性和性能...
友盟推送是一款广泛应用于移动应用开发中的消息推送服务,它为开发者提供了跨平台的消息推送功能,支持Android、iOS等操作系统。在本案例中,我们关注的是C#版本的服务端推送代码,该代码是基于Java版本的服务端推送...
Java向苹果服务器推送消息是iOS应用开发者经常遇到的需求,用于实时通知用户新的信息或系统状态。APNs(Apple Push Notification service)是苹果公司提供的推送服务,允许开发者将消息推送到用户的iOS设备上。本...
极光推送服务端DEMO是针对开发者提供的一个示例项目,用于展示如何使用极光推送(JPush)的API在服务器端实现消息推送功能。极光推送是中国领先的移动消息推送平台,它允许开发者向Android、iOS及Web应用的用户发送...
极光推送服务端SDK集成是针对开发者提供的一种高效、便捷的推送工具,旨在帮助开发者轻松地将推送功能集成到自己的PHP服务端应用中。极光推送是中国领先的移动消息推送平台,它提供了稳定、可靠的跨平台推送服务,...
iOS开发中遇到推送测试时首先遇到的是服务端发送推送消息,上传的这段代码可以更简单的使用,只要在终端运行一下
本资源提供了一个完整的Java服务端和iOS客户端的源码实现,帮助开发者理解并实践iOS消息推送的全过程。 首先,我们要了解的是苹果的Push Notification Service(APNs),这是苹果公司提供的用于向iOS、watchOS、...
在本教程中,我们将探讨如何在Mac上设置和实现iOS推送服务端。 首先,理解APNs的工作原理至关重要。APNs是一个基于TCP/IP的协议,它允许开发者将通知发送到已注册的iOS、iPadOS、watchOS和macOS设备。当应用在用户...
在iOS应用开发中,向设备推送消息是一项关键功能,它可以让用户即使不在应用程序中也能收到新消息、通知或活动的提醒。本篇文章将详细介绍如何使用Java实现iOS的远程推送服务,主要涉及Apple Push Notification ...
iOS推送服务(Push Notification Service,简称APNS)是苹果提供的一种服务,用于向运行iOS系统的设备发送消息。推送过程分为三个阶段: 1. 提供商(Provider)即你的应用程序服务器,将要发送的消息和目标设备的...