本地推送以及远程推送

1、什么是本地推送?
所谓的本地推送就是app自己给系统推送的一些消息就叫做本地推送。
2、本地推送的基本应用:有设置、取消以及推送后的回调方法

// 注册(设置)本地推送
+ (void)registLocalNotificationWithTime:(NSInteger)time content:(NSString *)content
{
    // 初始化本地通知
    UILocalNotification *localNotify = [[UILocalNotification alloc] init];
    // 设置触发通知的时间
    // dateWithTimeIntervalSinceNow从字面上理解,可以解释为从现在开始多少时间后触发通知
    NSDate *fireDate = [NSDate dateWithTimeIntervalSinceNow:time];
    
    localNotify.fireDate = fireDate;
    // 设置推送的时区
    localNotify.timeZone = [NSTimeZone defaultTimeZone];
    // 设置重复的时间间隔 (在多少时间间隔内再次推送通知)
    localNotify.repeatInterval = kCFCalendarUnitSecond;
    // 设置通知的内容
    localNotify.alertBody = content;
    // app右上角的数字为1,每推送一次,app右上角就+1
//    localNotify.applicationIconBadgeNumber += 1;
    // 设置被触发时播放的声音
    localNotify.soundName = UILocalNotificationDefaultSoundName;
    // 通知参数
    NSDictionary *userDict = @{@"key": @"本地通知,你会了么?"};
    localNotify.userInfo = userDict;
    // iOS8以后需要添加这个(registerUserNotificationSettings)注册才能得到授权
    if ([[UIApplication sharedApplication] respondsToSelector:@selector(registerUserNotificationSettings:)]) {
        UIUserNotificationType type = UIUserNotificationTypeAlert | UIUserNotificationTypeBadge | UIUserNotificationTypeSound;
        UIUserNotificationSettings *setting = [UIUserNotificationSettings settingsForTypes:type categories:nil];
        // 正是在应用中注册通知
        [[UIApplication sharedApplication] registerUserNotificationSettings:setting];
    }
    
    // 执行通知注册
    [[UIApplication sharedApplication] scheduleLocalNotification:localNotify];
}
// 取消本地推送
+ (void)cancelLocalNotificationWithKey:(NSString *)key
{
    NSLog(@"我是来取消通知的");
    // 获取所有本地通知的数组
    NSArray *localNotifications = [UIApplication sharedApplication].scheduledLocalNotifications;
    
    for (UILocalNotification *localNotification in localNotifications) {
        NSDictionary *userInfo = localNotification.userInfo;
        if (userInfo) {
            // 根据设置通知参数时指定的key来获取通知参数
            NSLog(@"%@", userInfo);
            NSString *info = userInfo[key];
            NSLog(@"%@", info);
            // 如果找到需要取消的通知,则取消
            if (info) {
                [[UIApplication sharedApplication] cancelLocalNotification:localNotification];
                NSLog(@"取消一个通知");
                break;
            }
        }
    }
}
// 本地通知的回调方法(在应用的前台调用)
+ (void)handleLocalNotification:(UILocalNotification *)localNotify
{
    // 获取通知所带的数据
    NSString *notMess = [localNotify.userInfo objectForKey:@"key"];
    UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"本地通知(前台)" message:notMess delegate:nil cancelButtonTitle:@"确定" otherButtonTitles:nil];
    [alertView show];
    
    // 更新显示徽章(右上角)的个数
    NSInteger badge = [UIApplication sharedApplication].applicationIconBadgeNumber;
    badge--;
    badge = badge > 0 ? badge : 0;
    [UIApplication sharedApplication].applicationIconBadgeNumber = badge;
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,751评论 25 709
  • 点击查看原文 Web SDK 开发手册 SDK 概述 网易云信 SDK 为 Web 应用提供一个完善的 IM 系统...
    layjoy阅读 13,971评论 0 15
  • 极光推送: 1.JPush当前版本是1.8.2,其SDK的开发除了正常的功能完善和扩展外也紧随苹果官方的步伐,SD...
    Isspace阅读 6,805评论 10 16
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,026评论 19 139
  • 这一次的读书会,很有意思,自己思考的空间很大。可是听着听着,我的思维就跑题了——想起了读师范的一次心理课。课...
    长沙谢早早阅读 198评论 1 0