本地推送和远程通知

来源:互联网 发布:千百撸最新域名获取器 编辑:程序博客网 时间:2024/06/01 12:30

1、本地推送通知:

不需要联网就可以发出的通知
使用场景:
提醒用户完成一些任务,比如:定时提醒,生活备注,看电影等等

推送通知属性:

// 枚举值-发出通知的时间(有局限性)@property(nonatomic) NSCalendarUnit repeatInterval;// 自定义-发出通知的时间(可以自由设定时间)@property(nonatomic,copy) NSCalendar *repeatCalendar;// 区域-创建只需要创建一个中心点与半径就可以了@property(nonatomic,copy) CLRegion *region// 进入区域发出一个通知,设置yes,只会发出一个通知,设置NO就会每次进入这个区域都发送@property(nonatomic,assign) BOOL regionTriggersOnce NO// 设置通知的内容@property(nonatomic,copy) NSString *alertBody;       // 决定alertAction是否生效@property(nonatomic) BOOL hasAction;// 设置滑块的文字@property(nonatomic,copy) NSString *alertAction;    // 设置点击通知的启动图片(一般设置App启动图片后,这里可以随便写)@property(nonatomic,copy) NSString *alertLaunchImage;// 设置alertTitle,就是通知内容上面的文字@property(nonatomic,copy) NSString *alertTitle // 设置弹出的声音@property(nonatomic,copy) NSString *soundName; // 设置App的消息条数@property(nonatomic) NSInteger applicationIconBadgeNumber; // 设置通知一些额外数据 @property(nonatomic,copy) NSDictionary *userInfo;

如何发出本地通知:

 // 1.创建本地通知    UILocalNotification *localNote = [[UILocalNotification alloc] init];    // 2.设置本地通知的内容    // 2.1.设置通知发出的时间    localNote.fireDate = [NSDate dateWithTimeIntervalSinceNow:3.0];    // 2.2.设置通知的内容    localNote.alertBody = @"在干吗?";    // 2.3.设置滑块的文字(锁屏状态下:滑动来“解锁”)    localNote.alertAction = @"解锁";    // 2.4.决定alertAction是否生效    localNote.hasAction = NO;    // 2.5.设置点击通知的启动图片    localNote.alertLaunchImage = @"123Abc";    // 2.6.设置alertTitle    localNote.alertTitle = @"你有一条新通知";    // 2.7.设置有通知时的音效    localNote.soundName = @"buyao.wav";    // 2.8.设置应用程序图标右上角的数字    localNote.applicationIconBadgeNumber = 999;    // 2.9.设置额外信息    localNote.userInfo = @{@"type" : @1};    // 3.调用通知    [[UIApplication sharedApplication] scheduleLocalNotification:localNote];}

使用注意:
iOS7,不需要用户授权就可发出通知,而iOS8以后,必须用户授权才可以发出通知

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {    // 设置应用程序的图标右上角的数字    [application setApplicationIconBadgeNumber:0];    if ([[UIDevice currentDevice].systemVersion doubleValue] >= 8.0) {        UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeAlert | UIUserNotificationTypeBadge | UIUserNotificationTypeSound categories:nil];        [application registerUserNotificationSettings:settings];    }    // 界面的跳转(针对应用程序被杀死的状态下的跳转)    // 杀死状态下的,界面跳转并不会执行下面的方法- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification,    // 所以我们在写本地通知的时候,要在这个与下面方法中写,但要判断,是通过哪种类型通知来打开的    if (launchOptions[UIApplicationLaunchOptionsLocalNotificationKey]) {        // 跳转代码        UILabel *redView = [[UILabel alloc] init];        redView.frame = CGRectMake(0, 0, 200, 300);        redView.numberOfLines = 0;        redView.font = [UIFont systemFontOfSize:12.0];        redView.backgroundColor = [UIColor redColor];        redView.text = [NSString stringWithFormat:@"%@", launchOptions];        [self.window.rootViewController.view addSubview:redView];    }    return YES;}

监听通知,如果用户打开通知,可以让用户进入一些特定的界面

/* 应用程序在进入前台,或者在前台的时候都会执行该方法 */- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification{    // 必须要监听--应用程序在后台的时候进行的跳转    if (application.applicationState == UIApplicationStateInactive) {        NSLog(@"进行界面的跳转");      // 如果在上面的通知方法中设置了一些,可以在这里打印额外信息的内容,就做到监听,也就可以根据额外信息,做出相应的判断        NSLog(@"%@", notification.userInfo);//         UIView *redView = [[UIView alloc] init];        redView.frame = CGRectMake(0, 0, 100, 100);        redView.backgroundColor = [UIColor redColor];        [self.window.rootViewController.view addSubview:redView];    }}


使用远程推送

1、获取苹果获得deviceToken-获取手机UDID+应用的唯一标识(bundel ID)
2、得到苹果返回的deviceToken
3、发送deviceToken给公司的服务器
4、监听用户对通知的点击

如何调试远程推送功能

1、真机
2、调试推送需要的证书文件
证书自己配置。。。
3、发布具有推送服务的App
包含推送的cer证书+某个具有发布资格的电脑,就可以发布

如何推送
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {    if ([[UIDevice currentDevice].systemVersion doubleValue] >= 8.0) { //iOS8        UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeAlert | UIUserNotificationTypeBadge | UIUserNotificationTypeSound categories:nil];        [application registerUserNotificationSettings:settings];        [application registerForRemoteNotifications];    } else { // iOS7        [application registerForRemoteNotificationTypes:UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeNewsstandContentAvailability | UIRemoteNotificationTypeSound |UIRemoteNotificationTypeAlert];    }// 根据远程通知通过UIApplicationLaunchOptionsRemoteNotificationKey打开的情况来进行    if (launchOptions[UIApplicationLaunchOptionsRemoteNotificationKey]) {        // 跳转        // 添加一个红色的View    }    return YES;}
// 获取DeviceToken- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken{    // 将DeviceToken传给服务器    NSLog(@"%@", deviceToken.description);}
// 正常接到远程通知的时候会调用这个方法- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo{    NSLog(@"%@", userInfo);    // 正常打开推送后,}
// 后台操作(根据收到推送,让程序自己执行一些操作,不管用户是否点击推送)- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler{    NSLog(@"---------");    UIView *redV = [[UIView alloc] init];    redView.backgroundColor = [UIColor redColor];    redView.frame = CGRectMake(100, 100, 100, 100);    [self.window.rootViewController.view addSubview:redV];    // 1.打开后台模式 2.告诉系统是否有新内容的更新 3.发送的通知有固定的格式("content-available":"1")    // 2.告诉系统有新内容    completionHandler(UIBackgroundFetchResultNewData);}


文/雷潮(简书作者)
原文链接:http://www.jianshu.com/p/064207461bb6
著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。

0 0
原创粉丝点击