iOS 總結(jié)下本地推送和遠(yuǎn)程推送所走的方法

一、注冊(cè)蘋果APNS遠(yuǎn)程推送

在didFinishLaunchingWithOptions:中調(diào)用此方法

/**
 注冊(cè)蘋果推送,獲取deviceToken用于推送
 
 @param application   application
 @param launchOptions application啟動(dòng)參數(shù)
 */
- (void)registerAPNS:(UIApplication *)application launchOptions:(NSDictionary *)launchOptions
{
    CGFloat systemVersion = [[[UIDevice currentDevice] systemVersion] floatValue];
    if (systemVersion >= 10.0) {
        UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter];
        center.delegate = self;
        [center requestAuthorizationWithOptions:UNAuthorizationOptionAlert | UNAuthorizationOptionBadge | UNAuthorizationOptionSound completionHandler:^(BOOL granted, NSError * _Nullable error) {
            if (granted) {
                // granted
                NSLog(@"User authored notification.");
                [application registerForRemoteNotifications];
            } else {
                // not granted
                NSLog(@"User denied notification.");
            }
        }];
    }else if (systemVersion >= 8.0) {
        // iOS >= 8 Notifications
        UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:(UIUserNotificationTypeSound | UIUserNotificationTypeAlert | UIUserNotificationTypeBadge) categories:nil];
        [application registerUserNotificationSettings:settings];
        [application registerForRemoteNotifications];
    }else {
        // iOS < 8 Notifications
        UIRemoteNotificationType myTypes = UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeSound;
        [[UIApplication sharedApplication] registerForRemoteNotificationTypes:myTypes];
    }
}

注冊(cè)完成回調(diào)方法

/*
 *  蘋果推送注冊(cè)成功回調(diào),將蘋果返回的deviceToken上傳到服務(wù)器
 */
- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken;

/*
 *  蘋果推送注冊(cè)失敗回調(diào)
 */
- (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error;

二、發(fā)送本地推送的方法:

    UILocalNotification *localNotification = [[UILocalNotification alloc] init];
    localNotification.alertTitle = @"NotificationTitle";//推送顯示的標(biāo)題
    localNotification.fireDate = [NSDate date];//設(shè)置推送時(shí)間
    localNotification.timeZone = [NSTimeZone defaultTimeZone];//設(shè)置時(shí)區(qū)
    localNotification.repeatInterval = NSCalendarUnitDay;//設(shè)置重復(fù)的間隔
    localNotification.soundName = UILocalNotificationDefaultSoundName;//推送聲音
    localNotification.alertBody = @"NotificationContent";//推送內(nèi)容
    localNotification.applicationIconBadgeNumber = 1; //顯示在icon上的紅色圈中的數(shù)子
    localNotification.userInfo = @{@"content":localNotification.alertBody};//userInfo中的信息

    [[UIApplication sharedApplication] presentLocalNotificationNow:localNotification]; //立即發(fā)起本地推送

//    UIUserNotificationSettings *localNotificationSettings = [UIUserNotificationSettings settingsForTypes:1 << 2 categories:nil];
//    [[UIApplication sharedApplication] registerUserNotificationSettings:localNotificationSettings];
//    [[UIApplication sharedApplication] scheduleLocalNotification:localNotification];

三、收到本地推送通知和遠(yuǎn)程推送通知及點(diǎn)擊通知所走的方法

根據(jù)系統(tǒng)版本分為以下幾個(gè)方法,獲取到userInfo之后即可處理相關(guān)信息。

1.Version < iOS10.0

  • App已經(jīng)殺死,點(diǎn)擊遠(yuǎn)程和本地推送的消息時(shí)調(diào)用:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{
   NSLog(@"userInfo: %@,",[launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey]);
}
  • App處于前臺(tái)收到遠(yuǎn)程推送消息,或者后臺(tái)(未殺死)點(diǎn)擊遠(yuǎn)程推送消息時(shí)調(diào)用
- (void)application:(UIApplication*)application didReceiveRemoteNotification:(NSDictionary*)userInfo {
 NSLog(@"userInfo : %@",userInfo);
    if (application.applicationState == UIApplicationStateActive) {
        //app在前臺(tái)
    }else{
        //app在后臺(tái)點(diǎn)擊遠(yuǎn)程推送
    }
}
  • App處于前臺(tái)收到本地推送消息,或者后臺(tái)(未殺死)點(diǎn)擊本地推送消息時(shí)調(diào)用
- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification {
 NSLog(@"userInfo : %@",notification.userInfo);
    if (application.applicationState == UIApplicationStateActive) {
        //app在前臺(tái)
    }else{
        //app在后臺(tái)點(diǎn)擊遠(yuǎn)程推送
    }
}

2.Version >= iOS10.0

  • App已經(jīng)殺死,點(diǎn)擊遠(yuǎn)程和本地推送的消息時(shí)調(diào)用:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{
   NSLog(@"userInfo: %@,",[launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey]);
}

UNUserNotificationCenterDelegate 的代理方法

  • App處于前臺(tái)收到本地推送或者遠(yuǎn)程推送時(shí)調(diào)用
- (void)userNotificationCenter:(UNUserNotificationCenter *)center willPresentNotification:(UNNotification *)notification withCompletionHandler:(void (^)(UNNotificationPresentationOptions options))completionHandler __IOS_AVAILABLE(10.0) __TVOS_AVAILABLE(10.0) __WATCHOS_AVAILABLE(3.0){
  NSLog(@"userInfo : %@",notification.request.content.userInfo);
}
  • App處于后臺(tái)(未殺死)點(diǎn)擊本地推送或者遠(yuǎn)程推送時(shí)調(diào)用
- (void)userNotificationCenter:(UNUserNotificationCenter *)center didReceiveNotificationResponse:(UNNotificationResponse *)response withCompletionHandler:(void(^)())completionHandler __IOS_AVAILABLE(10.0) __WATCHOS_AVAILABLE(3.0) __TVOS_PROHIBITED{
  NSLog(@"userInfo : %@",notification.request.content.userInfo);
}

PS:應(yīng)該就這些了吧,如有錯(cuò)誤請(qǐng)留言撒~

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

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

  • 寫作原因:網(wǎng)上看了很多推送文章都沒有完美的解答我的疑惑;主要有以下兩點(diǎn),1:推送來了我點(diǎn)擊應(yīng)用圖標(biāo)進(jìn)入應(yīng)用怎么取到...
    Thebloodelves閱讀 4,652評(píng)論 26 71
  • 推送通知跟NSNotification不同 1.NSNotification是抽象的,不可見的 2.推送通知是可見...
    NBeanN閱讀 645評(píng)論 0 0
  • 極光推送: 1.JPush當(dāng)前版本是1.8.2,其SDK的開發(fā)除了正常的功能完善和擴(kuò)展外也緊隨蘋果官方的步伐,SD...
    Isspace閱讀 6,884評(píng)論 10 16
  • “你等等,容我想想,我的記性最近越來越差了,很多過去的事情我都忘記了。哎,等等,你是問……哦!你是叫我給你講故事…...
    游冶人閱讀 126評(píng)論 0 0
  • 公司新來了一個(gè)實(shí)習(xí)生,碰巧是我的師妹。當(dāng)初被錄用的理由是態(tài)度積極主動(dòng),富有熱情,又是稅務(wù)專業(yè)的,處理過很多的報(bào)表,...
    cy_alice閱讀 484評(píng)論 0 0

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