您的位置:首页 > 移动开发 > IOS开发

iOS推送

2015-06-10 14:47 441 查看
iOS推送分为本地推送和远程推送:

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]);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: