本地通知和遠程推送

一、本地通知

1、創建通知

代碼如下
- (IBAction)fireLocalNote:(id)sender {
    // 1.創建本地通知
    UILocalNotification *localNote = [[UILocalNotification alloc] init];

    // 2.設置本地通知的內容
    // 2.1.設置通知發出的時間
    localNote.fireDate = [NSDate dateWithTimeIntervalSinceNow:5.0];
    // 2.2.設置通知的內容
    localNote.alertBody = @"吃飯了嗎?";
    // 2.3.設置滑塊的文字
    localNote.alertAction = @"快點";
    // 2.4.決定alertAction是否生效
    localNote.hasAction = NO;
    // 2.5.設置點擊通知的啓動圖片
    localNote.alertLaunchImage = @"3213432dasf";
    // 2.6.設置alertTitle
    localNote.alertTitle = @"3333333333";
    // 2.7.設置有通知時的音效
    localNote.soundName = @"buyao.wav";
    // 2.8.設置應用程序圖標右上角的數字
    localNote.applicationIconBadgeNumber = 999;

    // 2.9.設置額外信息
    localNote.userInfo = @{@"type" : @1};

    // 3.調用通知
    [[UIApplication sharedApplication] scheduleLocalNotification:localNote];
}

2、接受通知

(1)應用之前沒有被打開(該應用未在後臺運行)

此時點擊通知消息,進入應用,執行:

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

    // 設置應用程序的圖標右上角的數字
    [application setApplicationIconBadgeNumber:0];

    // iOS8.0以上需要詢問是否接受通知
    if ([[UIDevice currentDevice].systemVersion doubleValue] >= 8.0) {
        UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeAlert | UIUserNotificationTypeBadge | UIUserNotificationTypeSound categories:nil];
        [application registerUserNotificationSettings:settings];
    }

    // 界面的跳轉(針對應用程序被殺死的狀態下的跳轉)
    if (launchOptions[UIApplicationLaunchOptionsLocalNotificationKey]) {
        // 跳轉代碼
        UILabel *redView = [[UILabel alloc] init];
        redView.frame = CGRectMake(0, 0, 200, 300);
        redView.numberOfLines = 0;
        redView.font = [UIFont systemFontOfSize:12.0];
        redView.backgroundColor = [UIColor redColor];
        redView.text = [NSString stringWithFormat:@"%@", launchOptions];
        [self.window.rootViewController.view addSubview:redView];
    }

    return YES;
}

(2)應用被打開了(應用在後臺運行)

點擊通知消息,會執行:

/*
 應用程序在進入前臺,或者在前臺的時候都會執行該方法
 */
- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification
{
    // 針對應用程序在後臺的時候進行的跳轉
    if (application.applicationState == UIApplicationStateInactive) {
        NSLog(@"進行界面的跳轉");
        NSLog(@"%@", notification.userInfo);

        UIView *redView = [[UIView alloc] init];
        redView.frame = CGRectMake(0, 0, 100, 100);
        redView.backgroundColor = [UIColor redColor];
        [self.window.rootViewController.view addSubview:redView];
    }
}

二、遠程推送

具體步驟:
1、從蘋果服務器獲取DeviceToken;
2、將DeviceToken發送給服務器,如果是用的第三方推送,如極光推送,就需要將DeviceToken發給極光推送後臺

前期準備

1. 創建支持遠程推送功能的App ID
2. 申請開發者證書,並選中剛剛創建的App ID
3. 下載CER文件,並導入鑰匙串管理
4. 申請發佈證書,並選中剛剛創建的App ID
5. 下載CER文件,並導入鑰匙串管理
6. 檢查App ID,確認證書已經指定

步驟
1.iOS7和iOS8分別發送請求,請求DeviceToken
2.獲取DeviceToken,代理 法
3.將DeviceToken發送給服務器(激光推送),pushMeBaby
4.監聽遠程通知的點擊

1、推送信息必須的格式

格式:{"aps":{"alert":"推送需要顯示的文字","badge":1,"sound":"default"}}
badge是應用圖標的數字,sound通知時提示的聲音,後邊依照這樣的字典格式,還可以拼接其他自己需要的參數信息。

2、獲取DeviceToken,並且發送給服務器

- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken
{
    // 將DeviceToken傳給服務器
    NSLog(@"%@", deviceToken.description);
}

3、註冊通知

相關代碼如下:

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

    if ([[UIDevice currentDevice].systemVersion doubleValue] >= 8.0) { //iOS8
        UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeAlert | UIUserNotificationTypeBadge | UIUserNotificationTypeSound categories:nil];
        [application registerUserNotificationSettings:settings];
        [application registerForRemoteNotifications];
    } else { // iOS7
        [application registerForRemoteNotificationTypes:UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeNewsstandContentAvailability | UIRemoteNotificationTypeSound |UIRemoteNotificationTypeAlert];
    }

    return YES;
}

4、收到推送後,監聽點擊推送消息(三種情況)

(1)應用未在後臺運行點擊通知時進入應用進行相關操作

相關代碼如下:

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

    if ([[UIDevice currentDevice].systemVersion doubleValue] >= 8.0) { //iOS8
        UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeAlert | UIUserNotificationTypeBadge | UIUserNotificationTypeSound categories:nil];
        [application registerUserNotificationSettings:settings];
        [application registerForRemoteNotifications];
    } else { // iOS7
        [application registerForRemoteNotificationTypes:UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeNewsstandContentAvailability | UIRemoteNotificationTypeSound |UIRemoteNotificationTypeAlert];
    }

    if (launchOptions[UIApplicationLaunchOptionsRemoteNotificationKey]) {
        // 跳轉
        // 添加一個紅色的View
    }

    return YES;
}

(2)應用在後臺運行時,點擊推送消息進入應用執行:

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo
{
    NSLog(@"%@", userInfo);

    // 添加一個紅色的View
}

(3)收到推送,直接讓在後臺運行的該應用執行操作

步驟
1.打開後臺模式
2.告訴系統是否有新內容的更新
3.發送的通知有固定的格式(“content-available”:”1”)

1.打開後臺模式

這裏寫圖片描述

2.告訴系統是否有新內容的更新
completionHandler(UIBackgroundFetchResultNewData);

3.發送的通知有固定的格式("content-available":"1")

{“aps”:{“alert”:”推送需要顯示的文字”,”badge”:1,”sound”:”default”,”content-available”:”隨便填一個字符串即可”}}

代碼如下:

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler
{
    NSLog(@"11111111");

    UIView *redView = [[UIView alloc] init];
    redView.backgroundColor = [UIColor redColor];
    redView.frame = CGRectMake(100, 100, 100, 100);
    [self.window.rootViewController.view addSubview:redView];

    // 1.打開後臺模式 2.告訴系統是否有新內容的更新 3.發送的通知有固定的格式("content-available":"1")
    completionHandler(UIBackgroundFetchResultNewData);
}

轉載請註明出處,萬分感謝!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章