推送通知-本地推送

iOS推送通知

  • 注意:這里說的推送通知跟NSNotification有所區(qū)別

  • NSNotification是抽象的,不可見的

  • 推送通知是可見的(能用肉眼看到)

  • iOS中提供了2種推送通知
  • 本地推送通知(Local Notification)

  • 遠程推送通知(Remote Notification)

  • 推送通知的作用
    • 讓app不在前臺時,告示用戶App的最新情況
  • 推送通知的呈現(xiàn)方式
    • 在屏幕頂部一塊橫幅
    • 在屏幕中間彈出UIAlertView
    • 同時可以播放音效
    • 鎖屏時展示
    • App圖標右上角額數(shù)字提示
  • 本地推送通知(具體實現(xiàn))

    • 本地通知的作用:清理App緩存,記賬,買衣服,看電影,玩游戲等
  • 發(fā)送本地通知

    /**
     創(chuàng)建本地通知對象
     */
    UILocalNotification *localnotification = [[UILocalNotification alloc]init];
    /**
     *  設置推送的相關(guān)屬性
     */
    localnotification.fireDate = [NSDate dateWithTimeInterval:5.0 sinceDate:[NSDate date]];//通知觸發(fā)時間
    localnotification.alertBody = @"明天放假啦";//通知具體內(nèi)容
    localnotification.alertTitle = @"房租";//誰發(fā)出的通知
    localnotification.soundName = @"buyao.wav";//通知時的音效
    localnotification.applicationIconBadgeNumber = 1;
    localnotification.alertAction = @"查看更多精彩內(nèi)容";//默認為 滑動來 +查看;鎖屏時顯示底部提示
    /**
     *  調(diào)度本地通知,通知會在特定時間發(fā)出
     */
    [[UIApplication sharedApplication] scheduleLocalNotification:localnotification];
    [[UIApplication sharedApplication] presentLocalNotificationNow:localnotification];//立即發(fā)出本通知

  • 點擊本地通知,會自動打開app

  • 當用戶點擊本地推送通知,會自動打開app,這里有2種情況
  • app并沒有關(guān)閉,一直隱藏在后臺
    讓app進入前臺,并會調(diào)用AppDelegate的下面方法(并非重新啟動app)
- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification;
  • app已經(jīng)被關(guān)閉(進程已死)
    啟動app,啟動完畢會調(diào)用AppDelegate的下面方法
//launchOptions參數(shù)通過UIApplicationLaunchOptionsLocalNotificationKey取出本地推送通知對象
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions;

  • 具體代碼如下:(要注意iOS8之后,需要獲取用戶授權(quán))

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    //授權(quán)
    if ([[UIDevice currentDevice].systemVersion floatValue]>=8.0) {
        /**
         *  iOS8注冊授權(quán),設置本地通知模式
         */
        /*
         UIUserNotificationTypeNone    = 0,      不發(fā)出通知
         UIUserNotificationTypeBadge   = 1 << 0, 改變應用程序圖標右上角的數(shù)字
         UIUserNotificationTypeSound   = 1 << 1, 播放音效
         UIUserNotificationTypeAlert   = 1 << 2, 是否運行顯示橫幅
         */
        UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeBadge | UIUserNotificationTypeSound |UIUserNotificationTypeAlert  categories:nil];
        /**
         *  然后注冊通知
         */
        [application registerUserNotificationSettings:settings];
    }
    /**
     *  如果程序正常啟動(冷啟動),launchOptions的參數(shù)為null
     *  如果程序非正常啟動(熱啟動),launchOptions的參數(shù)時有值的
     */
    if (launchOptions[UIApplicationLaunchOptionsLocalNotificationKey]) {
        NSLog(@"%@",launchOptions);

        [self jumpToSession];
    }
    return YES;
}

/**
 *  該方法,接收到本地通知執(zhí)行,如果應用程序在前臺,依然收到通知,但不應該執(zhí)行跳轉(zhuǎn);
    如果應用程序在后臺,收到通知,點擊通知,執(zhí)行跳轉(zhuǎn)代碼;
    應用程序被關(guān)閉,收到通知,但不能執(zhí)行跳轉(zhuǎn)代碼,(需要在didFinishLaunchingWithOptions方法中執(zhí)行)
 *
 */
- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification
{
    NSLog(@"收到本地通知");
    [application setApplicationIconBadgeNumber:0];
    
    if (application.applicationState == UIApplicationStateActive) {
        return;
    }else if (application.applicationState == UIApplicationStateInactive)
    {
        [self jumpToSession];
    }else if(application.applicationState == UIApplicationStateBackground){
        /**
         *  不會執(zhí)行該代碼
         */
        NSLog(@"在后臺");
    }
}

- (void)jumpToSession
{
    NSLog(@"執(zhí)行跳轉(zhuǎn)頁面");
    UIView *redView = [[UIView alloc]init];
    redView.backgroundColor = [UIColor redColor];
    redView.frame = CGRectMake(100, 100, 100, 100);
    [self.window.rootViewController.view addSubview:redView];

    
}

  • 遠程推送請看下一篇內(nèi)容

  • 發(fā)現(xiàn)錯誤請各位多多指正,謝謝.
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容