你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發綜合 >> iOS - 百度推送

iOS - 百度推送

編輯:IOS開發綜合

在很多項目開發中,大家都做過推送!例如:極光推送、信鴿推送、個推等等一系列的推送。我們使用的都是集成過後的SDK,其原理都是相同的。
這裡我們來做一下百度推送。

1.百度推送

1.1 百度賬號的注冊申請和審核

登錄百度雲推送:http://push.baidu.com/fc。填寫相關資料、審核。
審核通過後下載SDK,創建應用(上傳相應的推送證書格式看要求到出),默認創建的應用是,開發者測試的,上線後要改成生產的。

1.2 SDK的導入與配置

1)所使用的SDK很簡單。(裡面有個測試音頻text.caf
這裡寫圖片描述
2)相應的庫是否導入
這裡寫圖片描述
3)證書要帶推送功能

1.3 SDK在項目中的使用

1)啟動時寫的


- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
//***********************關於如何設置badge角標加1的方法***********************

/*
 服務端推送的badge是幾就會顯示幾,你只需要跟服務端同步消息數目,然後讓服務端自己,該推送幾,就推送幾,比如你應用打開的時候,或者進入後台的時候跟服務端同步,這個點,需要你們自己去設計,應用沒有消息的時候,服務端推送了1,當應用打開時候,告訴服務端,app沒點擊通知,那下次應用推送2,依次類推。
 */
    // iOS8 下需要使用新的 API
    if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 8.0) {
        UIUserNotificationType myTypes = UIUserNotificationTypeBadge | UIUserNotificationTypeSound | UIUserNotificationTypeAlert;

        UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:myTypes categories:nil];
        [[UIApplication sharedApplication] registerUserNotificationSettings:settings];
    }else {
        UIRemoteNotificationType myTypes = UIRemoteNotificationTypeBadge|UIRemoteNotificationTypeAlert|UIRemoteNotificationTypeSound;
        [[UIApplication sharedApplication] registerForRemoteNotificationTypes:myTypes];
    }

    #warning 測試 開發環境 時需要修改BPushMode為BPushModeDevelopment 需要修改Apikey為自己的Apikey

    // 在 App 啟動時注冊百度雲推送服務,需要提供 Apikey
    [BPush registerChannel:launchOptions apiKey:@"Apikey改成自己的" pushMode:BPushModeDevelopment withFirstAction:nil withSecondAction:nil withCategory:nil isDebug:YES];
    // App 是用戶點擊推送消息啟動
    NSDictionary *userInfo = [launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey];
    if (userInfo) {
        NSLog(@"從消息啟動:%@",userInfo);
        [BPush handleNotification:userInfo];
    }
     //角標清0
    [[UIApplication sharedApplication] setApplicationIconBadgeNumber:0];
}

2)點擊推送消息

// 此方法是 用戶點擊了通知,應用在前台 或者開啟後台並且應用在後台 時調起
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler
{
     completionHandler(UIBackgroundFetchResultNewData);
    NSLog(@"********** iOS7.0之後 background **********");
    // 應用在前台 或者後台開啟狀態下,不跳轉頁面,讓用戶選擇。
    if (application.applicationState == UIApplicationStateActive || application.applicationState == UIApplicationStateBackground) {
        NSLog(@"acitve or background");
        UIAlertView *alertView =[[UIAlertView alloc]initWithTitle:@"收到一條消息" message:userInfo[@"aps"][@"alert"] delegate:self cancelButtonTitle:@"取消" otherButtonTitles:@"確定", nil];
        [alertView show];
    }
    else//殺死狀態下,直接跳轉到跳轉頁面。
    {
      //這裡實現頁面跳轉
    }
}

3)注冊推送服務

// 在 iOS8 系統中,還需要添加這個方法。通過新的 API 注冊推送服務
- (void)application:(UIApplication *)application didRegisterUserNotificationSettings:(UIUserNotificationSettings *)notificationSettings
{
    [application registerForRemoteNotifications];
}

- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken
{
    NSLog(@"test:%@",deviceToken);
    [BPush registerDeviceToken:deviceToken];
    [BPush bindChannelWithCompleteHandler:^(id result, NSError *error) {

        // 需要在綁定成功後進行 settag listtag deletetag unbind 操作否則會失敗
        if (result) {
            [BPush setTag:@"Mytag" withCompleteHandler:^(id result, NSError *error) {
                if (result) {
                    NSLog(@"設置tag成功");
                }
            }];
        }
    }];
}

// 當 DeviceToken 獲取失敗時,系統會回調此方法
- (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error
{
    NSLog(@"DeviceToken 獲取失敗,原因:%@",error);
}

4)收到推送消息時

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo
{
    // App 收到推送的通知
    [BPush handleNotification:userInfo];
    NSLog(@"********** ios7.0之前 **********");
    // 應用在前台 或者後台開啟狀態下,不跳轉頁面,讓用戶選擇。
    if (application.applicationState == UIApplicationStateActive || application.applicationState == UIApplicationStateBackground) {
        NSLog(@"acitve or background");
        UIAlertView *alertView =[[UIAlertView alloc]initWithTitle:@"收到一條消息" message:userInfo[@"aps"][@"alert"] delegate:self cancelButtonTitle:@"取消" otherButtonTitles:@"確定", nil];
        [alertView show];
    }
    else//殺死狀態下,直接跳轉到跳轉頁面。
    {

    }
}

- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification
{
    NSLog(@"接收本地通知啦!!!");
    [BPush showLocalNotificationAtFront:notification identifierKey:nil];
}

1.4 開啟和關閉推送按鈕

說說我的思路和做法:本地存一個參數1或者0 ,例如:status用於存放狀態。加一個按鈕,點擊關閉狀態status存放0,同時UIUserNotificationType設置為:UIUserNotificationTypeNone UIRemoteNotificationType設置為:UIRemoteNotificationTypeNone 反之設置回聲音、徽章、彈窗提醒。
其他的跳轉頁面等操作可以預判所存放狀態status.

  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved