美文网首页
iOS 2-本地推送

iOS 2-本地推送

作者: ksang | 来源:发表于2016-08-26 11:39 被阅读81次

    随着公司APP开发的相继完善,大家总有一天会接触到推送.

    推送分两种:
    1.本地推送
    2.远程推送
    ---------------一条华丽的分割线--------------------------

    本地推送

    这篇给大家讲的是有关本地推送的最基础的用法.(因为楼主也只懂点皮毛.#)
    本地推送,市面上许多APP都有用到.
    正常都用在提醒用户来使用该APP的.
    好久没用某APP的时候,通知中心就会跳出"客官,您已经一星期没玩我了,快来玩玩我吧!"之类的一些`牛盲~通知.(捂脸状)

    Like this⬇️
    C20AE574-7616-43CB-AC25-5EB140C66716.png

    整理下发型,直接上代码.

    这篇本地推送写的那细~.
    请各位客官尽情的command+c+v吧.

    首先~控制器里创建本地推送的代码.
    (其实只需要1,2,3,4就可发送一则推送通知,其他都是废话0.0)

    - (void)messageClick2:(UIBarButtonItem *)btn
    {
        // 1.创建本地通知
        UILocalNotification *note = [[UILocalNotification alloc]init];
        // 2.设置通知的消息
        note.alertBody = @"客官,您已经一个星期没玩我了,快来玩玩我吧!";
        // 3.设置时间
        //    note.fireDate =  [NSDate dateWithTimeIntervalSince1970:3*60*60+7*60];// 每日提醒的时间是从早上8点开始的
        note.fireDate = [NSDate dateWithTimeIntervalSinceNow:2];// 从现在起 两秒钟之后
        // 4.添加通知    添加 通知,不是直接发出通知
        [[UIApplication sharedApplication] scheduleLocalNotification:note];
        
        // 这边以上即可发送一则本地推送通知,下面只是完善.
    
        /***********************一条华丽的分割线************************/
        // 时区
        note.timeZone = [NSTimeZone defaultTimeZone];
        // 重复
        note.repeatInterval = kCFCalendarUnitDay;// 每日 ,当然也可以调成每小时之类的.也可填数字,重复次数.
        // 角标
        note.applicationIconBadgeNumber = 1;
        // 设置当点击通知进程序的时候 启动,启动屏幕 如果图片找不到会显示默认的启动图片.但是好像ios9.0以后就失效了.
        note.alertLaunchImage = @"图片名称";
        // 这个锁屏状态是不会显示的,只对通知中心有效.ios8.2之后有效!!!
        note.alertTitle = @"MYAPP";
        // 滑动的时候 显示的字
        note.alertAction = @"回复";
        //这个是控制上面的显示不显示的 正常就是默认状态,一般不用改
        note.hasAction = YES;
        // 本地化通知的音效
        note.soundName= UILocalNotificationDefaultSoundName;
        // 或
        note.soundName = @".aac.MP3应该都行";
        // 设置  通知携带的信息
        note.userInfo = @{@"name":@"ksang"};
        // 5  有直接发出通知的   **********
    //    [[UIApplication sharedApplication]presentLocalNotificationNow:note];
    }
    
    // 取消本地通知
    - (void)cancelNote
    {
        UIApplication *app  = [UIApplication sharedApplication];
        // 打印现有通知的个数
        NSLog(@"%ld",app.scheduledLocalNotifications.count);
        // 打印出现有的  Notification
        NSLog(@"currentUserNotificationSettings --------- %@",app.scheduledLocalNotifications);
        // 移除所有本地通知
        [[UIApplication sharedApplication]cancelAllLocalNotifications];
    }
    
    

    各位客官请注意 iOS8.0 之后本地通知需要注册,发送才有效.

    正常写在 代理 的didFinishLaunching里.

    下面是~AppDelegate.mm中的代码

    didFinishLaunching 里面可以根据 launchOptions 中的note 判断是否是从icon进来的,还是通过推送进来的
    // didFinishLaunching
    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    
        // 注册本地通知
        [self registerUserNotification];
    
    //   创建一个推送。。来接受launchOptions 字典中的[]
        UILocalNotification *note  =launchOptions[UIApplicationLaunchOptionsLocalNotificationKey];
        if (note)
        {
    //        NSLog(@"是从通知进来的");
    //        NSLog(@"%@",note.userInfo);
        }
        else
        {
    //        NSLog(@"直接点击icon进来的");
        }
        return YES;
    
    }
    // 注册通知
    - (void)registerUserNotification
    {
    #if __IPHONE_OS_VERSION_MIN_REQUIRED >= __IPHONE_8_0
        // iOS8注册通知
        UIUserNotificationType types = UIUserNotificationTypeBadge | UIUserNotificationTypeSound | UIUserNotificationTypeAlert;
        UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:types categories:nil];
        [[UIApplication sharedApplication] registerUserNotificationSettings:settings];
    #else
    #endif
    }
    
    // 程序进入前台的时候调用的方法
    - (void)applicationDidBecomeActive:(UIApplication *)application {
        // 改变appicon右上角的角标 具体后面再定 是直接设为0还是-1; 并且这句话的位置也得做相应的更改.
        [[UIApplication sharedApplication] setApplicationIconBadgeNumber:0];
    }
    
    // 从推送 进入程序
    - (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification
    {
        // self.window.rootViewController.view
        // 据说可以拿到VC 如果能拿到,客官就可以为所欲为了@^.^@
    }
    

    如果有什么不对的,请大神们及时纠正.并且请大爷赏个 💗 吧muamua~

    相关文章

      网友评论

          本文标题:iOS 2-本地推送

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