使用pushmebaby测试app的远程推送功能

什么是远程消息推送功能

苹果给iOS和Mac添加了消息推送的功能,使得我们可以通过后台服务器给应用程序(APP)发送消息,不管APP是否正在使用,比如邮箱的来件提示功能。这项服务被称为Apple Push Notification service(APNs)。里面一共涉及到四个角色:APP、设备、APNs和应用后台服务器(Provider),其中APP、后台服务器和APNs之间使用deviceToken唯一的标识一个用户。

推送服务的工作流程:

  1. APP向系统注册推送服务。
  2. 设备从APNs请求deviceToken。
  3. 通过代理方法将deviceToken返回给APP。
  4. APP将deviceToken发送给应用后台服务器(Provider)。
  5. 应用后台服务器保存deviceToken,然后在需要推送通知的时候,给APNs发送信息,使用deviceToken标识所要送达的客户端。
  6. APNs将后台服务器发过来的数据推送到设备。
  7. 设备将消息分发给应用程序。

在使用推送功能的时候,需要在开发者中心创建支持Push Notification的证书,并且将证书和私钥用于应用后台服务器与APNs之间通信。

环境配置

使用推送服务有一些必要条件:

  1. 开发者账号。
  2. iOS真机(iPhone、iPad、iPod)。
  3. 后台服务器。
  4. 网络。

为了使应用支持推送服务,需要配置Provisioning Profile使它支持Push,和普通的Provisioning Profile文件一样分为Development和Production两个版本。我们使用Development版进行测试。

接下来创建一个用于应用后台服务器和APNs服务器通信时使用的SSL证书和私钥。

1 .在钥匙串访问工具中获取证书请求文件(CSR)。

2 .保存请求文件。

3 .从钥匙串访问工具中导出私钥,将它保存为PushKey.p12,输入密码abcde。千万别把密码给忘了哈,等下要用的。

4 .登陆iOS Dev Center创建APP ID和*Provisioning Profile*。

5 .创建新的App ID时,要注意开启Push Notification

6 .最后App ID看起来是这样的。

7 .到这一步,虽然已经开启了推送服务,但是还需要进一步配置,点击Setting按钮进行设置。

8 .滚动到最下面,需要创建SSL证书(Create Certificate),测试环境使用Development SSL Certificate

9 .查看证书创建步骤和说明,上传第1步得到的证书请求文件。

10 .下载生成好的证书,命名为aps_development.cer


到了这里,我们有多种选择继续了。

1 .使用第三方小工具PushMeBaby模拟应用后台服务器发送推送信息。

2 .搭建应用后台服务器发送推送信息。



下面先试一试第一种方法,使用PushMeBaby。这是一个开源的Mac小程序,我们直接去Github下载源码,用Xcode打开,将ApplicationDelegate.m中天上deviceToken和证书的位置。

- (id)init {
    self = [super init];
    if(self != nil) {
        //77e231f0 76257e00 eed93ac6 47b52c78 12bae79f 9c9d1c67 4c990589 36c9a235 ---- 保留空格
        self.deviceToken = @"";
        //推送内容,JSON格式
        self.payload = @"{\"aps\":{\"alert\":\"长沙戴维营教育iOS开发培训最好!\",\"badge\":1}}";
        //获取证书路径
        self.certificate = [[NSBundle mainBundle] pathForResource:@"aps_development" ofType:@"cer"];
    }
    return self;
}

deviceToken的获取在下面的代码部分。

一定要记得将刚才的证书文件添加到项目中,当然也可以直接将证书路径赋值给self.certificate。



接下来试一试第二种方法,我们使用PHP来发送通知(其实运行PHP并不需要另外搭建服务器和下载程序,Mac默认支持PHP运行,不信到命令行运行一下php)。

这种方式相对来说麻烦一些,但是也是实际使用的时候会采取的方式。我们需要进一步处理私钥和证书文件。

1 .首先将证书文件和私钥处理成单个方便使用的pem文件,假设CSR、p12和cer文件都放在桌面上。

$ cd ~/Desktop
$ls
aps_development.cer
CertificateSigningRequest.certSigningRequest
PushKey.p12

2 .将aps_development.cer转换为pem文件。

$ openssl x509 -in aps_development.cer -inform der -out PushCert.pem
$ ls
aps_development.cer
CertificateSigningRequest.certSigningRequest
PushCert.pem
PushKey.p12

3 .将p12私钥文件转换为pem文件。

$ openssl pkcs12 -nocerts -out PushKey.pem -in PushKey.p12
Enter Import Password:
MAC verified OK
Enter PEM pass phrase:
Verifying - Enter PEM pass phrase:

4 .将两个文件合成同一个。

$ cat PushCert.pem PushKey.pem > ck.pem
$ ls
aps_development.cer
CertificateSigningRequest.certSigningRequest
ck.pem
PushCert.pem
PushKey.pem
PushKey.p12

5 .测试证书是否有效。

$ openssl s_client -connect gateway.sandbox.push.apple.com:2195 -cert PushCert.pem -key PushKey.pem

如果有效的话,会输出一堆信息,并且建立连接,否则不会成功建立连接。

6 .使用PHP进行测试,下载SimplePush.php,修改文件并填入deviceToken和密码。在终端运行该代码。

$ php simplepush.php
Connected to APNS
Message successfully delivered

成功发送推送消息。

代码实现

有了上面的这些准备工作,iOS端的开发非常简单,UIApplicaton中有好几个方法都与推送消息有关,包括本地推送。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    //判断是否注册了远程通知
    if (![application isRegisteredForRemoteNotifications]) {
        UIUserNotificationSettings *uns = [UIUserNotificationSettings settingsForTypes:(UIUserNotificationTypeAlert|UIUserNotificationTypeBadge|UIUserNotificationTypeSound) categories:nil];
        [application registerUserNotificationSettings:uns];
        //注册远程通知
        [application registerForRemoteNotifications];
    }

    return YES;
}

//注册成功,返回deviceToken
- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken
{
    NSLog(@"%@", deviceToken);
}

//注册失败
- (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error
{
    NSLog(@"%@", error);
}

//接收到推送消息
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo
{
    NSLog(@"remote: %@", userInfo);
}

甚至可以使用APNs实现一个聊天工具,具体请查看参考资料(4)。

参考资料

  1. https://developer.apple.com/library/ios/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/Chapters/ApplePushService.html#//apple_ref/doc/uid/TP40008194-CH100-SW9
  2. https://github.com/stefanhafeneger/PushMeBaby
  3. http://www.raywenderlich.com/32960/apple-push-notification-services-in-ios-6-tutorial-part-1
  4. http://www.raywenderlich.com/32963/apple-push-notification-services-in-ios-6-tutorial-part-2

本文档由长沙戴维营教育整理。

时间: 2024-12-29 04:48:58

使用pushmebaby测试app的远程推送功能的相关文章

iOS开发中的远程推送实现(最新,支持iOS9)

我的个人项目<丁丁印记>中加入了远程推送功能,按照操作说明去做还是比较容易实现的,但是学的不够不系统,因此这篇文章希望总结一下最新的iOS推送功能,因为iOS8之后的推送和致之前的版本是有所不同的,也希望想能帮助到需要的朋友.这篇文章将从零开始,向大家介绍远程推送功能的原理和使用. 什么是远程推送通知 顾名思义,就是从远程服务器推送给客户端的通知(需要联网)远程推送服务,又称为APNs(Apple Push Notification Services). 为什么程序中需要远程推送功能 1.传统

iOS-本地推送和远程推送,常用的三方推送和常用的测试方法,推送实现和原理详解(转载自薛银亮 [email&#160;protected])

原文地址:http://www.cnblogs.com/66it/p/4784224.html iOS-本地推送和远程推送,常用的三方推送和常用的测试方法,推送实现和原理详解 什么是消息推送 举一个常见的例子,我们的手机上经常会有弹出一些信息,例如QQ信息.微信信息等等,这就是常见的消息推送. 例如: 消息推送的类型: 在屏幕顶部显示一块横幅(显示具体内容) 在屏幕中间弹出一个UIAlertView(显示具体内容) 在锁屏界面显示一块横幅(锁屏状态下,显示具体内容) 更新app图标的数字(说明新

iOS开发 - ANPs推送通知 标签: 推送通知ANPs远程推送、本地推送

iOS开发 - ANPs推送通知 标签: 推送通知ANPs远程推送本地推送 2015-05-03 14:12 3510人阅读 评论(0) 收藏 举报 本文章已收录于:  iOS知识库  分类: [IOS -事件响应者链](3)  版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[+] 推送通知 注意:这里说的推送通知跟NSNotification有所区别 NSNotification是抽象的,不可见的 推送通知是可见的(能用肉眼看到) iOS中提供了2种推送通知 本地推送通知(L

IOS本地,APNS远程推送(具体过程)

添加本地推送 ///本地添加 -(void)addLocalPushNotification:(UIButton*)sender; { NSLog(@"%s",__FUNCTION__); UILocalNotification* localNotification=[[UILocalNotification alloc]init]; if (localNotification) { //设置时间当前加20秒 NSDate* pushDate=[NSDate dateWithTimeI

iOS开发之远程推送

远程推送应用配置过程 1.创建支持远程推送功能的App 2.申请开发者证书,并选中刚刚创建的App ID 3.下载CER文件,并导入钥匙串管理 4.申请发布证书,并选中刚刚创建的App ID 5.下载CER文件,并导入钥匙串管理 6.检查App ID,确认证书已经指定 远程推送应用程序开发过程 1.新建应用程序 2.指定AppID,在developer.apple.com上设置AppID

适配 iOS 8 时遇到的问题两则:远程推送和 Unwind Segue

原文:http://imtx.me/archives/1910.html 昨天我在微博上吐槽:iOS 8 / Xcode 6 真是史上对开发者最糟糕的版本了.收到很多朋友表达同感. 之所以这么说,倒不是针对 iOS 8 本身的特性来说的,相反,iOS 8 开放的那些扩展机制以及各种 Kit 对开发者来说是非常好. 我抱怨的是 Apple 最近对软件质量的控制不太好,上次发一个让手机不工作的 iOS 8.0.1 就不说了,iOS 8 / Xcode 6 本身充满了非常多的 Bug.Xcode 作为

iOS的推送机制APNs:本地推送&amp;远程推送

本地推送: 本地推送主要应用在备忘录,闹钟等本地的,基于时间定时的消息提醒.本篇不做详细描述. 远程推送:APNS(苹果推送通知服务) iOS远程推送机制的原理及流程: 注册推送(橙色部分):若该App允许接收推送消息,则先要在代码中注册远程推送.注册推送后,iOS带着设备序列号去请求ANPS而获得deviceToken.然后App把deviceToken发送给我们App的服务器.因为若服务器有消息给我们推送时,它会把要发送的消息和deviceToken按照一定的格式一并打包发送给ANPS服务器

关于iOS消息推送功能

最近由于要用到iOS消息推送,在这里就研究了一番,在此感激各位大神的指导和无私分享.本文主要是针对产品发布版本的一些问题 综合了网上一些资料根据自己实践写的 不过测试也可以看看.推送功能的原理什么的我就不说了 网上关于推送的资料很多 不过有很多一部分都写的不知所以然 不过原理还是可以弄明白的这里附上一篇英文帖子链接http://www.raywenderlich.com/3443/apple-push-notification-services-tutorial-part-12   附上中文翻译

IOS测试,远程推送证书

程序上传:准备工作证书创建流程 1:证书:证书用来为我们的应用程序签名,只有经过签名的应用程序才能保证他的来源是可信任的,并且代码是完整的, 未经修改的.证书的创建过程: 登陆开发者中心 点击Certificates(证书)该项,进入下面的界面 点击Certificates(证书)进入 看到左边栏有一个Certificates(证书)一项,我们发现该项中有Developerment和Production两个类型,其中Developerment类型的证书用于开发使用(比如我们的真机测试),Prod