iOS 远程推送通知

iOS 推送通知:

注意:通知是一个应用程序级别的操作UIApplication
推送通知 与 NSNotification 区别
NSNotification是抽象的,不可见的
推送通知是可见的

iOS中提供了2种推送通知
本地推送通知(Local Notification)
远程推送通知(Remote Notification)

推送通知的作用: 可以让不在前台运行的app,告知用户app内部发生了什么事情

推送通知的呈现效果总结
用户接收的推送通知,都会展示在“通知中心”
从屏幕顶部往下滑,就能调出“通知中心”
显示横幅还是UIAlertViewController,取决于用户的设置

推送通知5种不同的呈现效果
在屏幕顶部显示一块横幅(显示具体内容:发送者和消息)
在屏幕中间弹出一个UIAlertView(显示具体内容)
在锁屏界面显示一块横幅(锁屏状态下,显示具体内容)
更新app图标的数字(新内容的数量)
播放音效(提醒作用)

推送通知的使用细节
发出推送通知时,如果当前程序正运行在前台,那么推送通知就不会被呈现出来
点击推送通知后,默认会自动打开发出推送通知的app
不管app打开还是关闭,推送通知都能如期发出

本地推送

AppDelegate.h文件
#import "AppDelegate.h"

@interface AppDelegate ()

@end

@implementation AppDelegate


- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

    /*
     UIUserNotificationTypeNone    = 0,      不给用户发通知
     UIUserNotificationTypeBadge   = 1 << 0, 是否可以改变应用图标右上角的提示数字
     UIUserNotificationTypeSound   = 1 << 1, 通知声音
     UIUserNotificationTypeAlert   = 1 << 2, 是否有弹窗提示
     */
    if ([UIDevicecurrentDevice].systemVersion.doubleValue >= 8.0) {
        UIUserNotificationSettings *settings = [UIUserNotificationSettingssettingsForTypes:UIUserNotificationTypeBadge |UIUserNotificationTypeAlert | UIUserNotificationTypeSoundcategories:nil];
        [application registerUserNotificationSettings:settings];
    }

    if (launchOptions[UIApplicationLaunchOptionsLocalNotificationKey]) {
        // 跳转
        UILabel *label = [[UILabelalloc] init];
        label.frame = CGRectMake(0, 300, 300, 300);
        label.backgroundColor = [UIColorredColor];
        label.text = [NSStringstringWithFormat:@"%@", launchOptions];
        label.font = [UIFontsystemFontOfSize:14];
        //自动换行
        label.numberOfLines = 0;
        [self.window.rootViewController.viewaddSubview:label];
    }

    return YES;
}

/**
 *  点击通知打开应用的时候会执行该方法
 *  应用在前台的时候,收到通知也会执行该方法
 *
 *   notification 通知
 */
- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification
{
    UILabel *label = [[UILabelalloc] init];
    label.frame = CGRectMake(0, 0, 300, 300);
    label.backgroundColor = [UIColorredColor];
    label.text = [NSStringstringWithFormat:@"notification--%@", notification];
    label.font = [UIFontsystemFontOfSize:14];
    label.numberOfLines = 0;
    [self.window.rootViewController.viewaddSubview: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 ViewController

- (void)viewDidLoad {
    [superviewDidLoad];
}

/**
 *  点击按钮后添加本地通知
 */
- (IBAction)addLocalNote {


    // 1.创建一个本地通知
    UILocalNotification *localNote = [[UILocalNotificationalloc] init];

    // 1.1.设置通知发出的时间
    localNote.fireDate = [NSDatedateWithTimeIntervalSinceNow:5];

    // 1.2.设置通知发出的内容
    localNote.alertBody = @"你好么?";

    // 1.3.是否弹出提示框
    localNote.hasAction = YES;

    // 1.4.设置提示框
    localNote.alertAction = @"请查看";

    // 1.5.设置启动的图片
    localNote.alertLaunchImage = [UIImageimageNamed:@"beijing"];

    // 1.6.设置启动的音效
    localNote.soundName =UILocalNotificationDefaultSoundName;

    // 1.7.设置应用图标提醒的数字
    localNote.applicationIconBadgeNumber = 20;

    // 1.8.如果想将通知的信息传递过去,必须使用userInfo属性,切为一个字典类型
    localNote.userInfo = @{@"msg" :@"你好么",@"date" : localNote.fireDate};

    // 调度通知
    [[UIApplicationsharedApplication] scheduleLocalNotification:localNote];

    [[UIApplicationsharedApplication] setApplicationIconBadgeNumber:0];
}

- (IBAction)removeLocalNote {
    [[UIApplicationsharedApplication] cancelAllLocalNotifications];
    //    [UIApplication sharedApplication] cancelLocalNotification:(UILocalNotification *)
}
@end

远程推送

1.appDelegate.h文件
#import "AppDelegate.h"

@interface AppDelegate ()

@end

@implementation AppDelegate


- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

    if ([UIDevice currentDevice].systemVersion.doubleValue >= 8.0) {
        // 1.向用户请求可以给用户推送消息
        UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeBadge | UIUserNotificationTypeSound | UIUserNotificationTypeAlert categories: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发送给服务器,让服务器进行保存备份即可
    NSLog(@"%@", deviceToken);
}

/**
 *  当接受到远程通知的时候会调用该方法
 */
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo
{
    //userInfo    远程通知的信息
    // 在这里跳转
    NSLog(@"%@", userInfo);
}
/**
 *  如果接受到远程通知时,想要后台执行任务,则实现调用该方法
 *
 *  @param userInfo
 *  @param completionHandler 后台执行完之后要告知系统,是否更新成功
 */
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler
{
    NSLog(@"%@", userInfo);

    completionHandler(UIBackgroundFetchResultNewData);
}

@end
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值