推送通知:

:通知是一个应用程序级别的操作UIApplication

推送通知 与 NSNotification 区别

是抽象的,不可见的

推送通知是可见的

iOS中提供了2种推送通知

本地推送通知(Local Notification)

远程推送通知(Remote Notification)


app,告知用户app内部发生了什么事情

推送通知的呈现效果总结

“通知中心”

“通知中心”

UIAlertViewController,取决于用户的设置

5种不同的呈现效果

在屏幕顶部显示一块横幅(显示具体内容:发送者和消息)

UIAlertView(显示具体内容)

在锁屏界面显示一块横幅(锁屏状态下,显示具体内容)

app图标的数字(新内容的数量)

播放音效(提醒作用)

推送通知的使用细节

发出推送通知时,如果当前程序正运行在前台,那么推送通知就不会被呈现出来

app

app打开还是关闭,推送通知都能如期发出

本地推送

文件

#import "AppDelegate.h"
 
@interface  AppDelegate ()
 
 @end
 
 AppDelegate
 
 
BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary
     
/*

不给用户发通知

是否可以改变应用图标右上角的提示数字

通知声音

是否有弹窗提示

*/
    if ([UIDevice currentDevice].systemVersion.doubleValue >= 8.0) {
        UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeBadge | UIUserNotificationTypeAlert | UIUserNotificationTypeSound categories:nil];
registerUserNotificationSettings:settings];
     }
     
    if (launchOptions[UIApplicationLaunchOptionsLocalNotificationKey]) {
// 跳转
UILabel *label = [[UILabel alloc] init];
frame =  CGRectMake(0, 300, 300, 300);
        label.backgroundColor = [UIColor redColor];
text = [NSString stringWithFormat:@"%@", launchOptions];
        label.font = [UIFont systemFontOfSize:14];
//自动换行
numberOfLines
        [self.window.rootViewController.view addSubview:label];
     }
     
    return  YES;
 }
 
 /**
 *  点击通知打开应用的时候会执行该方法
 *  应用在前台的时候,收到通知也会执行该方法
  *
通知
  */
void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification
 {
    UILabel *label = [[UILabel alloc] init];
frame =  CGRectMake(0, 0, 300, 300);
    label.backgroundColor = [UIColor redColor];
text = [NSString stringWithFormat:@"notification--%@", notification];
    label.font = [UIFont systemFontOfSize:14];
numberOfLines
    [self.window.rootViewController.view addSubview:label];
     
 }
 
BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
 {
    return  YES;
 }
 
 @end

推送

#import "ViewController.h"
 
@interface  ViewController ()
 
 /**
 *  点击按钮后添加本地通知
  */
IBAction)addLocalNote;
 /**

移除通知---不常用

*/
IBAction)removeLocalNote;
 
 @end
 
@implementation
 
void)viewDidLoad {
    [super viewDidLoad];
 }
 
 /**
 *  点击按钮后添加本地通知
  */
IBAction)addLocalNote {
     
    
    // 1.创建一个本地通知
    UILocalNotification *localNote = [[UILocalNotification alloc] init];
     
    // 1.1.设置通知发出的时间
    localNote.fireDate = [NSDate dateWithTimeIntervalSinceNow:5];
     
    // 1.2.设置通知发出的内容
alertBody =  @"你好么?";
     
    // 1.3.是否弹出提示框
hasAction =  YES;
     
    // 1.4.设置提示框
alertAction =  @"请查看";
     
    // 1.5.设置启动的图片
    localNote.alertLaunchImage = [UIImage imageNamed:@"beijing"];
     
    // 1.6.设置启动的音效
    localNote.soundName = UILocalNotificationDefaultSoundName;
     
    // 1.7.设置应用图标提醒的数字
    localNote.applicationIconBadgeNumber = 20;
     
     // 1.8.如果想将通知的信息传递过去,必须使用userInfo属性,切为一个字典类型
userInfo = @{@"msg" : @"你好么", @"date" : localNote.fireDate};
     
    //  调度通知
    [[UIApplication sharedApplication] scheduleLocalNotification:localNote];
     
    [[UIApplication sharedApplication] setApplicationIconBadgeNumber:0];
 }
 
IBAction)removeLocalNote {
    [[UIApplication sharedApplication] cancelAllLocalNotifications];
    //    [UIApplication sharedApplication] cancelLocalNotification:(UILocalNotification *)
 }
 @end

远程推送

文件

#import "AppDelegate.h"
 
@interface
 
 @end
 
 AppDelegate
 
 
BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
     
if
         // 1.向用户请求可以给用户推送消息
nil];
         [application registerUserNotificationSettings:settings];
         
        // 2.注册远程通知
        //首先拿到用户的DeviceToken
         [application registerForRemoteNotifications];
else
         [application registerForRemoteNotificationTypes:UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound];
     }
     
 //    if (launchOptions[UIApplicationLaunchOptionsRemoteNotificationKey]) {
页面的跳转
 //    }
     
     [application setApplicationIconBadgeNumber:0];
     
    return  YES;
 }
 
void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken
 {
     // 将用户的用户名和deviceToken发送给服务器,让服务器进行保存备份即可
@"%@", deviceToken);
 }
 
 /**
 *  当接受到远程通知的时候会调用该方法
  */
void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo
 {
    //userInfo     远程通知的信息
    //  在这里跳转
@"%@", userInfo);
 }
 
 /**
 *  如果接受到远程通知时,想要后台执行任务,则实现调用该方法
  *
  *  @param userInfo
 后台执行完之后要告知系统,是否更新成功
  */
void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void
 {
@"%@", userInfo);
     
     completionHandler(UIBackgroundFetchResultNewData);
 }
 
 @end