iOS推送
2015-06-10 14:47
441 查看
iOS推送分为本地推送和远程推送:
1.本地推送
本地推送:主要是给用户提示,增加App的使用量。
2.远程推送
远程推送:主要是在服务端进行了更改后,告诉用户。
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,都需要通过证书进行连接。
1.本地推送
本地推送:主要是给用户提示,增加App的使用量。
/// ----------创建本地推送 // 创建一个本地推送 notification = [[UILocalNotification alloc] init]; //设置10秒之后 NSDate *pushDate = [NSDate dateWithTimeIntervalSinceNow:10]; if (notification != nil) { // 设置推送时间 notification.fireDate = pushDate; // 设置时区 notification.timeZone = [NSTimeZone defaultTimeZone]; // 设置重复间隔 notification.repeatInterval = kCFCalendarUnitMinute; // 推送声音,格式只能是.aiff、.wav、.caf三种格式,并且声音的长度不能超过30秒 notification.soundName = UILocalNotificationDefaultSoundName; // 推送内容 notification.alertBody = @"推送内容"; // 锁屏后提示文字,一般来说,都会设置与alertBody一样 notification.alertAction=@"推送内容"; // 显示在icon上的红色圈中的数子 notification.applicationIconBadgeNumber = 1; // 设置userinfo 方便在之后需要撤销的时候使用 NSDictionary *info = [NSDictionary dictionaryWithObject:@"name"forKey:@"key"]; notification.userInfo = info; //添加推送到UIApplication UIApplication *app = [UIApplication sharedApplication]; //如果系统是8.0以上的时候需要设置下通知,8.0之前可以直接推送 if([[UIDevice currentDevice].systemVersion floatValue] >= 8.0){ //对通知进行设置 UIUserNotificationSettings *setting = [UIUserNotificationSettings settingsForTypes:(UIUserNotificationTypeBadge|UIUserNotificationTypeAlert|UIUserNotificationTypeSound) categories:nil]; [app registerUserNotificationSettings:setting]; } //将推送任务提上日程 [app scheduleLocalNotification:notification]; /// -----------推送信息 UIApplication *app = [UIApplication sharedApplication]; //即时推送 [app presentLocalNotificationNow:notification]; // ------------解除推送 注:本地通知注册在本地,如果不取消的话会留下记录。可以通过获取本地推送数组看到,执行完register后将会存在数组中,如果不取消下次开启app的时候之前的还存在。 // 获得 UIApplication UIApplication *app = [UIApplication sharedApplication]; //获取本地推送数组 NSArray *localArray = [app scheduledLocalNotifications]; if (localArray) { for (UILocalNotification *notify in localArray) { NSString *keyString = [notify.userInfo objectForKey:@"key"]; if ([keyString isEqualToString:@"name"]) { [app cancelLocalNotification:notify]; } } } // ------------接受到推送后的操作 - (void)applicationDidBecomeActive:(UIApplication *)application { //当程序还在后台运行 application.applicationIconBadgeNumber = 0; } //接收本地推送 - (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification*)notification{ UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"本地通知" message:notification.alertBody delegate:nil cancelButtonTitle:@"确定" otherButtonTitles:nil]; [alert show]; // 图标上的数字减1 application.applicationIconBadgeNumber -= 1; }
2.远程推送
远程推送:主要是在服务端进行了更改后,告诉用户。
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,都需要通过证书进行连接。
// -------远程推送的创建:8.0以后需要设置通知,8.0前不需要;可以在设置应用程序中查看和修改远程推送的设置 //版本判断 if ([[UIDevice currentDevice].systemVersion floatValue] >= 8.0) { //创建---通知页面配置选项 UIUserNotificationSettings *userSetting = [UIUserNotificationSettings settingsForTypes:(UIUserNotificationTypeBadge | UIUserNotificationTypeAlert | UIUserNotificationTypeSound) categories:nil]; //设置---通知页面配置选项 [[UIApplication sharedApplication] registerUserNotificationSettings:userSetting]; //注册远程通知 [[UIApplication sharedApplication] registerForRemoteNotifications]; }else { [[UIApplication sharedApplication] registerForRemoteNotificationTypes:UIRemoteNotificationTypeAlert|UIRemoteNotificationTypeBadge|UIUserNotificationTypeSound]; } // 设置推送服务器端的信息 [XGPush startApp:2200122248 appKey:@"IAP884F9L1LL"]; // ------注册远程通知失败 -(void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error{ NSLog(@"注册远程失败"); } // -------注册远程通知成功 -(void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken{ NSLog(@"注册远程通知成功 Token = %@",deviceToken); } // 当app在后台时,点击通知进入应用程序时执行 // 当app在前台时,直接执行此方法 - (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo{ NSLog(@"%@",userInfo); // 角标清零 application.applicationIconBadgeNumber = 0; } - (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken{ NSLog(@"注册远程通知成功 Token = %@",deviceToken); // 此处以腾讯信鸽推送测试;在服务器注册设备 [XGPush registerDevice:deviceToken]; NSLog(@"%@",[XGPush registerDevice:deviceToken]); }
相关文章推荐
- IOS内存管理retain,assign,copy,strong,weak
- IOS开发之深拷贝与浅拷贝(mutableCopy与Copy)详解
- List of iOS Top 1000 Libraries
- IOS 使用XIB 自定义View
- (译)Getting Started——1.1.1 Start Developing IOS Today(开始IOS开发)
- 【iOS开发-图层】自定义图层的两种方式
- #ifndef、#def、#endif说明
- iOS学习 plist读取和写入文件
- iOS tableView优化
- 【iOS开发-图层】创建图层,位置,锚点
- 【iOS开发-图层】图层的获取与一些属性
- iOS下的几种加密方式
- iOS中的模糊效果
- iOS 拨打电话
- IOS开发之 ---- ARC下的Dealloc保留原因[转]
- iOS常见bug
- WWDC2014之iOS使用动态库 framework1
- iOS开发~CocoaPods使用详细说明
- IOS自动布局之Autoresizing
- IOS status bar