ios 消息推送简介
消息推送流程
手机系统会一直保持与苹果APNs一个通信
当打开App时候,会从苹果Apns得到一个toKen
发送toKen到后台服务器
服务器发送这个toKen 和 推送数据给苹果APNs (以为push通道是由苹果维护的一个唯一的通道)
苹果APNs得到后再根据这个toKen推送得到的消息给我们的ios设备
我们得到toKen后就知道是哪个APP的推送内容了
消息推送(以V8.0+为例子)(搭建push环境)
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
//读取系统版本,判断是否大于8.0
if([[[UIDevice currentDevice] systemVersion] floatValue] >=8.0) {
//首先向用户询问push的权限,向用户申请权限
UIUserNotificationSettings* setting = [UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeBadge | UIUserNotificationTypeSound | UIUserNotificationTypeAlert categories:nil];
[[UIApplication sharedApplication] registerUserNotificationSettings:setting];
}else{
[[UIApplication sharedApplication] registerForRemoteNotificationTypes:(UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound | UIRemoteNotificationTypeAlert)];
}
}
//用户同意之后回调,去注册DeviceToken
- (void)application:(UIApplication *)application didRegisterUserNotificationSettings:(nonnull UIUserNotificationSettings *)notificationSettings{
[[UIApplication sharedApplication] registerForRemoteNotifications];
}
//注册成功回调,得到DeviceToken
- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)aDeviceToken {
DLog(@“succeed regist remote notification");
NSString* tokenStr = [NSString stringWithFormat:@"%@", aDeviceToken];
tokenStr = [tokenStr stringByReplacingOccurrencesOfString:@" " withString:@""];
tokenStr = [tokenStr stringByReplacingOccurrencesOfString:@"<" withString:@""];
tokenStr = [tokenStr stringByReplacingOccurrencesOfString:@">" withString:@""];
//向服务器发送
}
//注册失败回调
- (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error {
DLog(@"failed regist remote notification %@ ", error);
}
//当接收到远程通知回调
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo {
NSDictionary *apsDictionary = [userInfo objectForKey:@"aps"];
//解析JSon
/*
具体处理。。。
if(...){
跳转某个controller。。。
}
*/
}
消息推送(本地推送)
@property (nonatomic, retain) UILocalNotification *localNotification;
- (void)backGround{
_localNotification = [UILocalNotification new];
//多久以后提示用户
_localNotification.fireDate = [NSDate dateWithTimeIntervalSinceNow:5];
_localNotification.alertBody = @"你都走了5秒钟了";
_localNotification.alertTitle = @"你妹的!";
_localNotification.userInfo = @{@"key":@"value"};
[[UIApplication sharedApplication] scheduleLocalNotification:_localNotification];
}
- (void)foreGround{
[[UIApplication sharedApplication] cancelLocalNotification:_localNotification];
}
- (void)viewDidLoad
{
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(backGround) name:UIApplicationDidEnterBackgroundNotification object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(foreGround) name:UIApplicationWillEnterForegroundNotification object:nil];
}