美文网首页
本地推送(ios8以上)

本地推送(ios8以上)

作者: i大猫哥 | 来源:发表于2016-06-11 20:37 被阅读140次
    1. 首先在appDelegate中注册权限
      <p>注册本地推送权限</p>

    <pre><code>
    ` - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

    if (launchOptions[UIApplicationLaunchOptionsLocalNotificationKey]) {
        // 进入该方法说明是应用程序被杀死的情况下通过点击本地通知进入的该方法
        // 如果应用程序没有被杀死,通过点击本地通知只会进入didReceiveLocalNotification方法
        
    // 在IOS8中必须注册本地通知
    if ([[UIDevice currentDevice].systemVersion doubleValue] >= 8.0) {
        UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeAlert | UIUserNotificationTypeBadge | UIUserNotificationTypeSound categories:nil];
        
        [application registerUserNotificationSettings:settings];
    }
    

    }

    return YES;
    

    }

    /**

    • 收到本地通知后,并且应用程序在前台或进入前台时才调用本方法
    • 如果应用程序被杀死了以后,再通过点击通知进入前台的时候也不会调用该方法。这种情况下应该在didFinishLaunchingWithOptions方法中设置点击通知后的操作
      */
    • (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification
      {
      if (application.applicationState == UIApplicationStateInactive) {
      // 当应用程序进入前台的时候执行
      // 如果需要判断跳转到哪个页面,可以根据notification的userInfo传递过来的值来判断
      // 调试小技巧:如果想看应用程序退出后再进入前台是否执行了该方法,由于,退出应用程序后XCode就不再处于调试状态,所以不能通过打印来判断是否执行了该方法。但是可以通过给一个View添加一个控件来判断是否执行了该方法

        // 打印本地推送对象传过来的字典
        NSLog(@"%@",notification.userInfo);
      

      }

      UIApplicationState state = application.applicationState;
      // NSLog(@"%@,%d",notification,state);

      // 判断程序正在使用,此时程序没有在后台
      if (state == UIApplicationStateActive) {
      UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"提醒"
      message:notification.alertBody
      delegate:self
      cancelButtonTitle:@"Close"
      otherButtonTitles:@"OK",nil];
      [alert show];

      }
      }`
      </code>
      </pre>

    2.ViewController中初始化本地推送对象,界面点击时候,触发本地推送5秒后执行。

    <p>初始化本地推送对象</p>

    <pre><code>
    ` - (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.

    }

    -(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
    {
    //[self setLocalNotice1];
    [self setLocalNotice2];
    }

    -(void)setLocalNotice1
    {
    // 1.创建本地推送通知对象
    UILocalNotification *localNote = [[UILocalNotification alloc] init];

    // 2.设置本地推送通知内容(下面两个是必填参数)
    // 2.1设置通知发出时间(触发后5秒钟后发出通知)
    localNote.fireDate = [NSDate dateWithTimeIntervalSinceNow:2.0];
    // 2.2 设置通知的内容
    localNote.alertBody = @"吃饭了吗";
    // 设置有通知的提醒声音
    // 这个是设置系统默认声音
    localNote.soundName = UILocalNotificationDefaultSoundName;
    // 这个是设置自定义声音
    localNote.soundName = @"sound.caf";
    // 通过点击通知进入应用的时候是否显示启动图标(注意:这里的启动图片名称随便写)
    localNote.alertLaunchImage = @"这里随便写";
    
    // 3.调用通知
    [[UIApplication sharedApplication] scheduleLocalNotification:localNote];
    

    }

    -(void)setLocalNotice2
    {
    // 1.创建一个本地通知
    UILocalNotification *localNote = [[UILocalNotification alloc] init];

    // 1.1.设置通知发出的时间
    localNote.fireDate = [NSDate dateWithTimeIntervalSinceNow:5];
    
    // 1.2.设置通知内容
    localNote.alertBody = @"这是一个推送这是一个推送";
    
    // 1.3.设置锁屏时,字体下方显示的一个文字
    localNote.alertAction = @"赶紧!!!!!";
    localNote.hasAction = YES;
    
    // 1.4.设置启动图片(通过通知打开的)
    localNote.alertLaunchImage = @"../Documents/IMG_0024.jpg";
    
    // 1.5.设置通过到来的声音
    localNote.soundName = UILocalNotificationDefaultSoundName;
    
    // 1.6.设置应用图标左上角显示的数字
    localNote.applicationIconBadgeNumber = 999;
    
    // 1.7.设置一些额外的信息
    localNote.userInfo = @{@"qq" : @"704711253", @"msg" : @"success"};
    
    // 2.执行通知
    [[UIApplication sharedApplication] scheduleLocalNotification:localNote];
    

    }`
    </code>
    </pre>

    参考网上资料,自己用xcode运行跑了一遍。做出以上内容,以后用到的时候能快速找到。

    相关文章

      网友评论

          本文标题:本地推送(ios8以上)

          本文链接:https://www.haomeiwen.com/subject/jfkedttx.html