iOS推送想必大家都很熟悉,在App没有在运行有新消息时顶部状态栏会出现提示信息,锁屏状态下会出现消息提示框,在App图标上也会有红色的角标。
当然这些提示方式用户是可以在设置中心定制的。
下面我就结合网上教程和自己的实践来详细讲解一下在iOS上实现推送通知。
开始之前先说明一下要完成应用的推送先要准备的东西:
一.因为iOS应用在模拟器上无法实现推送通知所以我们要在真机上测试我们的应用,有朋友会想这不很easy吗,只要有真机测试证书不就OK了。其实不然,iOS应用要实现推送功能就必须使用配置了推送通知功能的证书。
二.因为我这里测试的推送服务器是用的国外的一个免费的推送测试服务器(https://api.parse.com)
三.上面两步只是准备工作,这里才是建立我们App的地方,怎样准备好了吗,抖抖精神继续往下看吧。
先说申请测试证书:
1、打开钥匙串访问程序
2.钥匙串访问>证书助理>从证书颁发机构请求证书
3.在用户电子邮件地址添入你的邮箱,常用名称写上你的名字,CA电子邮件地址不填也行,下面选存储到磁盘,然后继续
4.默认是保存到桌面上,成功的话会生成一个CertificateSigningRequest.certSigningRequest的文件
5.下面是到开发者中心请求证书。在浏览器打开https://developer.apple.com登陆开发者中心
6.在Certificates一栏的右边点击Request Certificate按钮
7.点击选择文件处选择刚才保存到桌面上的那个文件,然后点Submit
8.点Download按钮把生成的cer文件下载到本地,双击它会加入到钥匙串中
9.点New App IDs创建一个新的App ID
在填写上面那一栏的时候可以随意,不过需要你记住,最下面那个Bundle Identifier填写的时候一定注意不要使用通配符*,填完了点Submit
10.等等,还需要配置App ID,点App ID最右边的Configure
勾选Enable for Apple Push Notification service,这里有两种Push SSL Certificate上面那个是开发用的下面那个是上线产品用的我们这只是测试所以只配置上面那个就可以了
继续,
继续,
11.下面安装这个证书,双击它安装到系统,安装完后我们需要提取p12文件,
选中这个证书,在文件>导出项目中导出p12文件,导出时会让你输入密码,无视它直接下一步。
12.这一步来创建真机测试用的mobileprovision文件了,还回到刚才网页上
.点左边Provisioning选项卡然后点右边New Profile按钮创建一个新的profile文件
这一步完成后刷新一下把生成的profile文件下载下来拽到XCode图标上安装,这时会自动打开Xcode的Organizer,别忘了也拽到你的iPhone或iPad上进行安装
上面这一大堆只是第一步,下面说说第二步:
这里是设置我们应用的推送服务器的,点开https://api.parse.com注册一个免费账户
App名字填好记住,其它的随意写
在Dashboard面板的Push notifications选项卡进行一下设置
等等
下面开始创建工程了,先下载SDK http://parse-ios.s3.amazonaws.com/761fb838b39ee452a84377505e975e66/parse-starter-project-1.1.25.zip
新建一个XCode工程,注意在工程plist文件里把Bundle identifier设置成和第9步一样的,同时还要加上好多framework,注意那个Parse.framework是上面下载的这个SDK里面的把它也加入到工程里。
一切看来还算顺利,下面开始编码,
在AppDelegate.h文件先引入头文件
#import <Parse/Parse.h>
在application:(UIApplication *)application didFinishLaunchingWithOptions方法中加入下面代码:
[application registerForRemoteNotificationTypes:
UIRemoteNotificationTypeBadge |
UIRemoteNotificationTypeAlert |
UIRemoteNotificationTypeSound];
[Parse setApplicationId:@"上面那个Application ID"
clientKey:@"上面那个Client Key"];
再添加这几个方法-(void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
NSLog(@"My token is: %@", deviceToken);
[PFPushstoreDeviceToken:deviceToken];// Send parse the device token
// Subscribe this user to the broadcast channel, ""
[[PFInstallationcurrentInstallation]addUniqueObject:@""forKey:@"channels"];
[[PFInstallationcurrentInstallation]saveEventually];
}
- (void)application:(UIApplication*)application didFailToRegisterForRemoteNotificationsWithError:(NSError*)error
{
NSLog(@"Failed to get token, error: %@", error);
}
- (void)application:(UIApplication *)application
didReceiveRemoteNotification:(NSDictionary *)userInfo
{
NSLog(@"Receive remote notification : %@",userInfo);
[PFPushhandlePush:userInfo];
UIAlertView *alert =
[[UIAlertViewalloc]initWithTitle:@"温馨提示"
message:@"推送成功!"
delegate:nil
cancelButtonTitle:@"确定"
otherButtonTitles:nil];
[alert show];
[alert release];
}
这时再回到网页上给应用发送一条通知,
添入要推送的内容然后点最下面的发送按钮等一下手机上就会有通知提示了