尊重劳动者果实,转载请写明: 作者微博:http://t.qq.com/hzweb1-com 很多人写教程都完全没有照顾到那些理解能力有限的人,我写这篇文章尽可能详细吧,让大部分人都可以看懂。 什么是消息推送? 用过iPad或iPhone上面的QQ或微信软件吗?当有新信息来的时候,如果程序在后台运行(好吧,ios没有多任务),有消息来时,就会在顶部出现提醒消息;如果应用程序正在运行,那么该信息就会以Alert的信息提醒用户或者在顶部的状态栏上显示消息。这就是消息推送。 关于消息推送需要注意的问题 应用程序在后台运行,消息推送过来之后,我们点击该条消息,打开应用程序,实际是进入应用程序的主界面,而不是进入该条消息所对应的具体界面,所以就不需要考虑消息来了之后,我们如何让应用程序自动定位到消息显示面板。不过我们可以通过一些方法让用户尽可能快得进入到消息界面。 实现消息推送需要准备什么? 1.要有一个开发者帐号,如果没有开发者帐号,本论坛会提供ios设备开发者证书,使用这个证书同样可以实现推送功能。 订购网址:http://item.taobao.com/item.htm?id=16454420315 2.一台iPhone或iPad,模拟器无法实现消息推送开发 3.一个用于测试消息推送的后台网站服务器。如果你的信息量,推荐一个国外网站免费的消息推送测试服务器 访问网址:https://api.parse.com 先给大家一个例子,让大家在自己的ios设备上测试一下吧。 案例下载地址:http://kuai.xunlei.com/d/DSUTMECADNLP 大家测试完了之后,肯定会有一个错误:CodeSign error: code signing is required for product OK,相信你肯定可以解决,解决不了的话看这个教程:http://www.zpluz.com/forum.php?mod=viewthread&tid=1958&extra=page%3D1 但是在机器上运行之后,没有提示然我们选择是否接受推送信息,也没有推送消息,那是为什么呢?那是因为你自己搞的开发者证书或者从别的地方购买的开发者证书都没配置推送消息的功能。 好的接下来我们提前总结一下实现推送功能的步骤(使用你自己的开发者帐号,如果没有开发者帐号,可以在我这里花45元钱购买,具体的教程情况最后): 1.打开钥匙串访问,生成一个CertificateSigningRequest.certSigningRequest文件 2.打开浏览器,进入开发者后台,新建一个App IDs ,并开启消息推送功能,在配置面板,将第一步的CertificateSigningRequest.certSigningRequest 上传上去 3.将CertificateSigningRequest.certSigningRequest 上传上去 之后,下载证书文件:aps_development.cer 4.打开aps_development.cer 会自动安装 5.再次打开钥匙串访问,进入我的证书,将刚才我们打开aps_development.cer之后产生的 哪一个证书记录导出来,导出为后缀名为:.p12的文件(这个文件是需要上传到前面提到的那个用于测试推送的网站端服务器的,如果你自己会搭建服务器,那么这一步就可以不要了) 6.再次打开浏览器,进入后台,打开Provisioning Profiles,点击new profile,创建一个后缀名为.mobileprovision的文件 7.打开这个文件。这样准备工作就完成了。下面的工作就是写代码了。 对于经验丰富的ios开发人员,上面可能会看得懂,为了照顾新手,我就从头开始慢慢讲吧: 第一步:生成一个CertificateSigningRequest.certSigningRequest文件 1.在Mac上打开钥匙串访问(keychain) 2.在上面选择钥匙串访问 > 证书助理 > 从证书颁发机构中请求一个证书 3.输入你的名字和邮件地址,CA邮件,如果有默认的都按照默认的,不要试图去进行任何改动。 4.选择“保存到硬盘”,这样就会将刚创建的证书请求文件下载到电脑桌面上了。 第二步:创建一个App id (新手一定要注意一个概念:一个具有通知功能的App只能对应一个App id!如果修改之前创建的App id,就算下面全部的步骤万无一失,也不会有通知的功能,所以必须新建一个App id)
每个安装在你开发者设备上的iOS程序都需要一个独有的App ID,方便起见,App ID以反向路径规则命名,形如com.parseSampleApp,但是一定要注意App ID里不能包含星号("*")。创建步骤如下:
1.登陆网站Apple Developer Member Center并进入iOS Provisioning Portal。 2.从左边栏里点击App IDs。 3.选择New App ID,然后创建一个新的App ID。一定要确保Bundle Identifier一栏中没有星号。 4.最后点击submit(提交)就完成了一个app id的创建 第三步:创建一个aps_development.cer 1.紧接上面的步骤,提交后,就会进入app id的列表,找到你刚才创建的哪一个,然后点击Action那一列的Configure
2
.将“Enable for Apple Push Notification service”勾选上,然后点击Development Push SSL Certificate下面的Configure,然后会出现Apple Push Notification service SSL Certificate Assistant设置向导。
3.点击Continue继续,然后点击Choose File,选中刚桌面上的CertificateSigningRequest.certSigningRequest 文件。 4.点击Generate开始生成,然后点击Download下载生成的SSL证书,该证书名称叫:aps_development.cer 第四步:导出后缀名为.p12 的文件 1.还是紧接上面的步骤,打开下载过来的aps_development.cer,系统会自动安装这个证书。 2.接着在“我的证书”选项里面,找到你刚才安装名称形如“Apple Development IOS Push Services: xxx”的证书。 3.右键点击该证书,选择“导出“Apple Development IOS Push...”,导出后的文件后缀名为定义为push.p12。这个时候千万注意!出现密码提示的时候一定不要添任何东西。 这里值得注意的一点就是,至此我们只是将应用的推送通知功能在开发模式中开启了。应用开始正式作为产品发布的时候,一定记得将第五步中的“Development Push SSL Certificate”改成“Production Push SSL Certificate”。
第五步:创建一个后缀名为
.mobileprovision的文件
你可能之前已经
New Profile过了,并绑定了ios设备和app id,但是因为前面你已经新建了一个app id,所以这次你需要在重新将你的ios设备,
Bundle Identifier绑定起来,因为要实现通知,一个具有通知功能的app只能对应一个app id
1.进入网站后台,在iOS Provisioning Portal中选择Provisioning。 2.点击New Profile 3.填好对应的信息,确保一下三项(developer certificate、上面刚创建好的App ID以及用于测试的设备名称)都没有遗漏,全都选中。最后点击submit 4.点击Actions一栏下面的Download按钮下载生成好的Provisioning Profile。 5.双击下载好的文件。如果你已经安装了xcode,那么就会自动导入到Organizer-Devices。 第六步:创建用户发送推送消息的web服务器(如果你仅仅只是测试一下推送开发流程,比如仅仅只是希望看到以下画面,则这一步可以省去) ![]() 如果你希望在服务器端发送一条信息,然后手机上收到推送信息,那就继续看这一步吧 因为现在我们的能力有限,所以为了提高我们学习的进度,暂时使用别的公司的服务器吧。
步骤如下:
1.打开 https://api.parse.com/ ,点击首页上面的“try it for free”,输入你的姓名,邮箱,密码 2.然后输入你的应用名称,选择company name,输入公司名称,职位,然后点击start using parse3.点击下面这张图片黄色的按钮: ![]() 4.先点击choose your platform里面的ios,再点击select your parse app里面的testApp,这样就完成了开发平台的设置 ![]() 5.进入Dashboard,或直接点击这个: https://api.parse.com/apps 6.点击左上角的select an app,在下拉菜单里面选择你之前输入的app 名称 7.再点击导航下面的Push notifications ![]() 8.这个界面就是你用于管理你的推送信息和发送推送信息的面板,然后点击Devices Types下面的IOS client 旁边的configure ![]() 9.点击左边的导航的Push notifications ![]() 10.在push nitification settings里面的Client push enabled设置为开启状态,在Apple Push Certificate里面点击select your certificate,选择我们上面第四步导出的那个.p12文件 ![]() 11.再点击导航下面的那个Push notifications,这样我们就完成了服务器端的配置 开发我们的第一款IOS推送应用! 第一步:配置你的应用程序: 1.创建一个新的项目,选择single view application,项目命名为:testPushApp 2.进入Supporting Files文件夹,选择打开testPushApp-Info.plist,在BBundle identifier那一行的value里面,输入我们上面第二步:创建一个App id,在BBundle identifier(app id suffix)所输入的文本,比如我输入的是
com.parseSampleApp则这里面输入
com.parseSampleApp
3.点击项目的根目录,在Build settings里面的Code signing里面作如下图的选择处理(就是上面第五步,在开发者帐号管理后台所导出的那个.mobileprovision文件,如果你在mac系统安装了这个文件,那么就可以在Code signing Identity那里选择时会看到你的那个文件标识,比如你输入的profile name是pushApp,那么就可以看到pushApp(for Application Identifiers...),选择下面的iPhone Developer:...就可以了。如果文字是浅灰色不可选状态,有两种方法:1.等10分钟,2.点击最上面菜单栏里面的product-->clean以下马上见效。。你会选择哪种?)![]() 第二步:激动人心的时刻到了,现在我们就让我们开发的应用程序有一个提示用户是否开启消息推送的功能,如下图 1.打开AppDelegate.m文件 2.在 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { .... } 里面插入代码: [application registerForRemoteNotificationTypes:UIRemoteNotificationTypeAlert|UIRemoteNotificationTypeBadge|UIRemoteNotificationTypeSound]; OK,在你的真机上运行你的应用,如果出现以下画面,恭喜你,你成功了! ![]() 我们在进入设置-->通知,在通知中心里面,我们可以看到我们的应用: ![]() //如果推送通知注册成功,则自动调用这个方法。deviceToken 是什么?我估计应该是设备授权码吧 - (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken { NSLog(@"deviceToken: %@", deviceToken); } //对应的,失败就是: -(void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error { NSLog(@"注册推送服务时,发生以下错误: %@",error); } //然后,如果接收到推送信息,就是这个了,因为测试有限,我们就在应用程序的图标上面显示一个红色背景的消息数量吧: - (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo { [UIApplication sharedApplication].applicationIconBadgeNumber = 1; } 第二步:如果你想实现推送通知就继续这么做 :导入必要的框架: 1.导入第三方框架:parse.framework,下载地址:http://parse-ios.s3.amazonaws.com/dc139f78c7b0a23227c2ae58fa3a0208/parse-library-1.1.8.zip 2.其他框架按照下图进行导入: ![]() 3.打开AppDelegate.m,在头部引入框架:#import "Parse/Parse.h" 4.在: - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { [application registerForRemoteNotificationTypes:UIRemoteNotificationTypeAlert|UIRemoteNotificationTypeBadge|UIRemoteNotificationTypeSound]; .... } 里面添加: [Parse setApplicationId:@"2I72Cw7bsFs9l15Uo4utSJaPWOtbYZPoPKyXsdB2" clientKey:@"0kpkHKc3UrQ2WQSln1yoPAfE2Hfy5dSYBpMiquI0 "]; 那里面的setApplicationId 和clientKey 是如何得到的呢? 返回看一下第六步,如果你申请了一个用户测试推送app的服务器端,那么进入该应用的后台管理板块,应该是这样的: ![]() 这下子明白了吧,setApplicationId 就是左边Application ID 里面的代码;clientKey 就是 Client Key里面的代码 然后将我们上面提到的3个委托方法修改为: - (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken { [PFPush storeDeviceToken:deviceToken]; [PFPush subscribeToChannelInBackground:@"" block:^(BOOL succeeded, NSError *error) { if (succeeded) NSLog(@"Successfully subscribed to broadcast channel!"); else NSLog(@"Failed to subscribe to broadcast channel; Error: %@",error); }]; NSLog(@"deviceToken: %@", deviceToken); } -(void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error { NSLog(@"注册推送服务时,发生以下错误: %@",error); } - (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo { [PFPush handlePush:userInfo]; [UIApplication sharedApplication].applicationIconBadgeNumber = 1; } 接着,你再次打开https://api.parse.com/,进入你的这个app的推送信息管理后台,没进错的话应该是这个: ![]() ![]() 然后在打开那个应用程序。 在web服务器端输入一条信息,然后点击send to 1 channel,那么在你的iphone上就会有提示,退出应用程序就会在顶部出现消息提示。 OK,大功告成了!! 关于如何获得推送信息数量,未读信息数量,图标上显示未读信息数量等待类似于qq软件的推送信息展示方法,我们将以后再谈论,谢谢大家阅读,作者微博: http://t.qq.com/hzweb1-com |
ios Parse推送详解
最新推荐文章于 2025-03-29 11:00:02 发布