当前位置 主页 > 服务器问题 > Linux/apache问题 >

    详解iOS本地推送与远程推送

    栏目:Linux/apache问题 时间:2019-11-13 10:43

    一、简介

    分为本地推送和远程推送2种。可以在应用没有打开甚至手机锁屏情况下给用户以提示。它们都需要注册,注册后系统会弹出提示框(如下图)提示用户是否同意,如果同意则正常使用;如果用户不同意则下次打开程序也不会弹出该提示框,需要用户到设置里面设置。一共有三种提示类型:

    UIUserNotificationTypeBadge:应用图标右上角的信息提示

    UIUserNotificationTypeSound:播放提示音

    UIUserNotificationTypeAlert:提示框

    二、本地推送

    1 注册与处理

    代码如下:

     /// 一般在在启动时注册通知,程序被杀死,点击通知后调用此程序
    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
     if ([[UIDevice currentDevice].systemVersion floatValue] >= 8.0) { // iOS8
     UIUserNotificationSettings *setting = [UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeBadge | UIUserNotificationTypeAlert | UIUserNotificationTypeSound categories:nil];
     [application registerUserNotificationSettings:setting];
     }
    
     if (launchOptions[UIApplicationLaunchOptionsLocalNotificationKey]) {
     // 这里添加处理代码
     }
     return YES;
    }
    /// 程序没有被杀死(处于前台或后台),点击通知后会调用此程序
    - (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification {
     // 这里添加处理代码
    }
    
    

    可以看到,处理代码有两个方法,一个是

    - (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification;
    另一个是
    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions;

    如果程序没有被杀死,即处于前台或者后台,那么调用前者;如果程序被杀死,则调用后者。

    2 发送通知

    代码如下

    - (IBAction)addLocalNotification {
     // 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];
    }
    
    

    效果如下:

    3 取消通知

    // 取消所有本地通知
    [application cancelAllLocalNotifications];

    三、远程推送

    与Android上我们自己实现的推送服务不一样,Apple对设备的控制非常严格,消息推送的流程必须要经过APNs(Apple Push Notification service).