IOS开发之推送

/*  推送

 

分类

  • 1、远程推送(Remote Notification)

 

  • 2、本地推送 (Local Notification)    

  作用

可以让APP不在前台,告知用户 APP内部发生了什么事

效果

1、没有效果

2、在屏幕顶部 显示一块横幅(显示具体的内容)

3、在屏幕的中间弹出一个AlertController(也是显示具体内容)

4、在锁屏的时候,显示一块横幅

5、可以更改APP上面显示的提醒数字

 

- 播放音效

- 推送通知的使用细节

注意:发送推送通知的时候,如果APP在前台运行,那么推送的通知不会被呈现出来

     在发送通知之后,无论APP是打开,还是关闭,推送都能如期发出,但是用户 不一定能如期去接收

 

 */

 

 

  • 本地推送(本地通知)

在iOS8之后,以前的本地推送写法可能会出错,接收不到推送的信息,

如果出现以下信息:

1 Attempting to schedule a local notification
2 with an alert but haven't received permission from the user to display alerts
3 with a sound but haven't received permission from the user to play sounds

说明在IOS8下没有注册,所以需要额外添加对IOS8的注册方法,API中有下面这个方法:

// Registering UIUserNotificationSettings more than once results in previous settings being overwritten.
- (void)registerUserNotificationSettings:(UIUserNotificationSettings *)notificationSettings NS_AVAILABLE_IOS(8_0);

这个方法是8.0之后才能使用的,所以需要判断一下系统的版本。

第一步:注册本地通知:

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

    

    /*

     UIUserNotificationTypeNone    = 0,      无类型(不给用户发通知)

     UIUserNotificationTypeBadge   = 1 << 0, 是否可以改变应用图标右上角的提示数字

     UIUserNotificationTypeSound   = 1 << 1, 该通知是否会有声音

     UIUserNotificationTypeAlert   = 1 << 2, 是否有弹出提示

     */

    if ([UIDevice currentDevice].systemVersion.doubleValue >= 8.0) {

        UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeBadge | UIUserNotificationTypeAlert | UIUserNotificationTypeSound categories:nil];

        [application registerUserNotificationSettings:settings];

    }

    

    if (launchOptions[UIApplicationLaunchOptionsLocalNotificationKey]) {

        // 跳转

        UILabel *label = [[UILabel alloc] init];

        label.frame = CGRectMake(0, 300, 300, 300);

        label.backgroundColor = [UIColor redColor];

        label.text = [NSString stringWithFormat:@"%@", launchOptions];

        label.font = [UIFont systemFontOfSize:14];

        label.numberOfLines = 0;

        [self.window.rootViewController.view addSubview:label];

    }

    

    return YES;

}

 

/**
 *  点击通知打开应用的时候会执行该方法
 *  应用在前台的时候,收到通知也会执行该方法
 *
 *  @param notification 通知
 */
- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification
{
    UILabel *label = [[UILabel alloc] init];
    label.frame = CGRectMake(0, 0, 300, 300);
    label.backgroundColor = [UIColor colorWithRed:0.871 green:1.000 blue:0.797 alpha:1.000];
    label.text = [NSString stringWithFormat:@"%@", notification];
    label.font = [UIFont systemFontOfSize:14];
    label.numberOfLines = 0;
    [self.window.rootViewController.view addSubview:label];
    //    if (application.applicationState == UIApplicationStateBackground) {
    //
    //    }
}

- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation

{

    return YES;

}

 

 

这里我们添加两个方法,来进行推送消息的操作;

/**
 *  点击按钮后添加本地通知
 */
- (IBAction)addLocalNote;
/**
 *  移除通知(不常用)
 */
- (IBAction)removeLocalNote;

实现方法(点击按钮之后添加本地通知):

- (IBAction)addLocalNote {
    
    /*
     @property(nonatomic,copy) NSDate *fireDate;
     @property(nonatomic,copy) NSTimeZone *timeZone;
     @property(nonatomic) NSCalendarUnit repeatInterval;
     @property(nonatomic,copy) NSCalendar *repeatCalendar;
     @property(nonatomic,copy) CLRegion *region NS_AVAILABLE_IOS(8_0);
     @property(nonatomic,assign) BOOL regionTriggersOnce NS_AVAILABLE_IOS(8_0);
     @property(nonatomic,copy) NSString *alertBody;
     @property(nonatomic) BOOL hasAction;
     @property(nonatomic,copy) NSString *alertAction;
     @property(nonatomic,copy) NSString *alertLaunchImage;
     @property(nonatomic,copy) NSString *soundName;      UILocalNotificationDefaultSoundName
     @property(nonatomic) NSInteger applicationIconBadgeNumber;
     
     @property(nonatomic,copy) NSDictionary *userInfo;
     */
    // 1.创建一个本地通知
    UILocalNotification *localNote = [[UILocalNotification alloc] init];
    // 1.1.设置通知发出的时间
    localNote.fireDate = [NSDate dateWithTimeIntervalSinceNow:5];
    // 1.2.设置通知发出的内容
    localNote.alertBody = @"我是一条推送消息";
    // 1.3.是否弹出提示框
    localNote.hasAction = YES;
    // 1.4.设置提示框
    localNote.alertAction = @"赶紧查看";
    // 1.5.设置启动的图片
    localNote.alertLaunchImage = @"backk.jpg";
    // 1.6.设置启动的音效
    localNote.soundName = UILocalNotificationDefaultSoundName;
    // 1.7.设置应用图标提醒的数字
    localNote.applicationIconBadgeNumber = 666;
    
    // 1.8.如果想将通知的信息传递过去,必须使用userInfo属性
    localNote.userInfo = @{@"msg" : @"吃饭了吗", @"date" : localNote.fireDate};
    // 2.调度通知
    [[UIApplication sharedApplication] scheduleLocalNotification:localNote];
    
    [[UIApplication sharedApplication] setApplicationIconBadgeNumber:0];
    
    
    

    
}

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

 

注意;在此也需要在真机上操作,因为模拟器,不显示。。。。。。

 

posted @ 2016-03-28 15:47  Biaoac  阅读(213)  评论(0编辑  收藏  举报