消息的推送主要有两种:
一种是本地推送,主要应用在系统的工具中,例如:闹钟,生日提醒等;
实现本地推送需要以下三个步骤:
第一步:实例化一个本地推送对象
第二步:设置通知对象的各个属性UILocalNotification *localNotification = [[UILocalNotification alloc]init];
第三步:添加本地推送对象// 设置角标 localNotification.applicationIconBadgeNumber = 5 ; // 设置合适的时间推送消息 localNotification.fireDate = [[NSDate date]dateByAddingTimeInterval:3]; // 设置时区,一般设为默认时区 localNotification.timeZone = [NSTimeZone defaultTimeZone]; // 设置重复机制 localNotification.repeatInterval = kCFCalendarUnitMinute ; // 推送的消息文本 localNotification.alertBody = @"Hello Word";
[[UIApplication sharedApplication] scheduleLocalNotification:localNotification];
以上几步就可以实现简单的本地消息推送,对于推送对象的其他属性可以自己设置查看效果。
另一种是远程消息推送,主要应用联网设备的信息推送,例如:邮件,各种软件的广告或优惠信息的推送。
(但是对于即时性的通讯软件一般不使用,这种远程推送机制,例如:QQ,微信。这是因为对于远程推送并不能保证消息能够及时的到达接受设备)
远程推送比较复杂,需要使用开发者账号进行申请证书,获得实现推送功能的配置文件,所以想要实现远程推送功能,必须要有开发者账号并且生成配置文件,当然这不是我要说的重点,重点是如何进行远程推送。
远程推送的流程如下图:
第一步:完成证书的申请和Xcode的配置
第二步:在Demo中注册远程服务对象,并设置其代理
代理方法:// 注册远程推送,设置提示方式Alert:文本,Badge:角标,Sound:声音 [application registerForRemoteNotificationTypes:UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound ];
//注册失败时的代理实现 - (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error { NSLog(@"Error:%@",error); } //获得40位的令牌,在推送时需要使用 - (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken { NSLog(@"DeviceToken :%@",deviceToken); }
对于其它的代理方法可以自己实现。第三步:找一个简单的App服务器进行消息推送(推荐使用:PushMeBaby,gitup网站上就有)
运行PushMeBaby
上述步骤就可以实现远程消息推送。- (id)init { self = [super init]; if(self != nil) { // 添加从上述代理中得到的40位令牌 self.deviceToken = @"9b0240ff a373491e 68fca44c 4d326589 de3ddde2 43599853 9cc72b68 af8f5cce"; // 添加推送的信息,注意格式 self.payload = @"{\"aps\":{\"alert\":\"河南青云信息技术有限公司.\", \"sound\" : \"bingbong.aiff\",\"badge\":10000}}"; // 添加得到的推送证书 self.certificate = [[NSBundle mainBundle] pathForResource:@"aps_development" ofType:@"cer"]; } return self; }
对于消息推送的两种方式,以上只是简单的介绍,如果有不对的地方,还请各位谅解并指出。