1. 程式人生 > >iOS百度推送的基本使用

iOS百度推送的基本使用

一.iOS證書指導

在 iOS App 中加入訊息推送功能時,必須要在 Apple 的開發者中心網站上申請推送證書,每一個 App 需要申請兩個證書,一個在開發測試環境下使用,另一個用於上線到 AppStore 後的生產環境。

7.1 為你的 App 建立 App ID

iOS 中每個 App 都需要對應一個 App ID,同一個公司可能會使用類似於 com.example.* 這樣通用的 App ID,但是如果要在 App 中加入訊息推送功能,那麼是不能使用通用 ID 的,需要為之單獨建立一個。

首先登陸 iOS Dev Center ,然後進入 Member Center,然後選擇 Certificates,Identifiers & profiles,如下圖:

Member Center

然後點選下圖紅框中的任意條目,進入證書介面,如下圖:

certifiates select

在進入證書介面後,在左邊的Identifiers選擇中選定App IDs,點右上角加號建立Appid,如下圖:

Create App ID

在建立 App ID 的過程中,需要勾選 Push 服務,如下圖:

select push notification

進入提交頁面,push服務處於configurable狀態,如下圖:

submit push notification

點選submit後到確認頁面,如下圖:

done push notification

點選done後到初始頁面,然後再次選擇自己建立的appid,如下圖:

choose push addid

在下圖中選擇edit按鈕,配置推送的環境,如圖:

edit push mode

然後配置好對應的推送環境,個人版和企業版的開發環境都是選擇建立Development SSL Certificate型別的。個人版和企業版的釋出環境。釋出環境分以下三種:1. in-house必須是企業開發賬戶(企業內)(299美金) 2.ad-hoc個人賬戶或公司Company賬戶(99美金),但只用於內部測試(總共100個裝置).3.上線Appstore只能是個人賬戶或公司Company賬戶(99美金))如下圖:

done push mode

如果你是為已有的 App 增加訊息推送功能,那麼開啟原有的 App ID,開啟 Push Notification 選項即可。流程跟上面的一樣。

7.2 建立及下載證書

點選 Create Certificate按鈕後會出現“About Creating a Certificate Signing Request (CSR)”,如下圖:

Select Certificate Signing Request

到了這裡,需要停下製作 CSR 檔案,製作過程比較簡單,下面是製作的過程。開啟 Mac 系統軟體'鑰匙串訪問',選擇 '證書助理' 及 '從證書頒發機構請求證書',製作 CSR 檔案,如下圖:

Open keyChain

Open keyChain

生成證書後,返回到 “About Creating a Certificate Signing Request (CSR)” 的介面,點選 continue,然後在 “Choose File” 選擇生成的CSR檔案,最後點選 Generate,生成證書。如下圖:

generate certifate 現在證書製作已經完成。下載並雙擊用“鑰匙串訪問” 程式開啟後,在左邊一欄,上面選擇登入,下面選擇證書,然後選擇剛剛開啟的證書,切記不要展開它,直接右擊匯出p12,如下圖:

open certifate

將檔案儲存為 .p12 格式,輸入密碼,如圖所示:

save as p12

最後進入終端,到證書目錄下,執行以下命令將p12檔案轉換為pem證書檔案:

openssl pkcs12 -in MyApnsCert.p12 -out MyApnsCert.pem -nodes

提示需要輸入密碼,輸入剛才匯出 p12 時的密碼即可。

Provisioning Profile的建立 點選下圖的+按鈕開始建立profile

save as p12

選擇profile的環境

save as p12

選擇建立profile的appid和開發者證書,並選擇裝置,最後生成profile

save as p12

最後下載profile配置到xcode中進行開發測試

最後得到的證書

2.建立工程:

點選進入新建或已有的工程,將會顯示出應用的基本資訊,其中 API key 和 appid 需要在 Demo 中使用,如圖所示:

進入左邊導航欄,選擇“雲推送”功能,首次選擇時,需要進行【推送設定】,如圖所示:

說明(iOS):

開發證書:需上傳推送證書的“開發版本” 的pem檔案。

生產證書:需上傳推送證書的“生產版本” 的pem檔案。

部署狀態:開發測試期間選擇 【開發狀態】,待 App 上線完成後可更改為【生產狀態】。

這裡選 擇了什麼狀態就要上傳什麼證書要一一對應

3.用百度Demo進行測試 (一般選擇開發測試)

開啟下載好的百度推送SDK選擇開發測試Demo:

 修改工程設定

選擇相應的Demo分開發Demo和釋出Demo開啟.xcodeproj 工程,首先需要修改 Bundle Identifier ,修改為在建立證書時所選擇的 Bundle ID,如下圖:

Demo 配置引數

修改下面方法中的apikey的值為自己的apikey,並配置為自己的證書,如下圖:

Demo 配置引數

3.5 執行Demo應用

若以上步驟均無誤,即可對 Demo 進行真機測試(推送通知必須在真機環境下進行測試)。如下圖所示 Demo 執行截圖

3.6 Demo客戶端檢視訊息

開啟Demo後,可以繫結、解綁以及新增刪除tag,Demo介面會顯示伺服器返回資料。在繫結成功後,使用百度開放服務平臺推送訊息,進入指定的應用,選擇雲推送,將顯示以下介面,如圖所示:

4.自己建立工程實現百度推送:

第一步:

新增SDK到工程中

新增到SDK到工程中的步驟如下:

• 將libBPush.a和BPush.h新增到自己的工程下,新增時需要注意勾選當前Target

2.新增依賴庫:

• SDK需要以下庫:Foundation.framework、CoreTelephony.framework、libz.dylib、SystemConfiguration.framework,請在工程中新增。

3.開啟Remote notifications:

客戶端設定開啟Remote notifications,需要在Xcode 中修改應用的 Capabilities 開啟Remote notifications,(紅框內的必須要做哦)請參考下圖:

ios7之後如果像上面一樣設定好了,並且服務端aps欄位中新增content-available欄位為1的話,了那麼收到遠端通知後,應用在後臺的話會在下面的方法中接受到遠端通知,對應程式中的程式碼是(注意,iOS7之後沒有開啟後臺的話也可以通過點選通知調起下面的方法只是不能在後臺狀態下執行一段程式碼):

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler

4.寫程式碼:

AppDelegate.m中

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

    // Override point for customization after application launch.

    ViewController *vc = [[ViewControlleralloc]init];

    UINavigationController *nav = [[UINavigationControlleralloc]initWithRootViewController:vc];

    self.window.rootViewController = nav;

    // iOS8下需要使用新的 API

    if ([[[UIDevicecurrentDevice]systemVersion]floatValue] >=8.0) {

        UIUserNotificationType myTypes =UIUserNotificationTypeBadge |UIUserNotificationTypeSound | UIUserNotificationTypeAlert;

        UIUserNotificationSettings *settings = [UIUserNotificationSettingssettingsForTypes:myTypescategories:nil];

        [[UIApplicationsharedApplication]registerUserNotificationSettings:settings];

    }else {

        UIRemoteNotificationType myTypes =UIRemoteNotificationTypeBadge|UIRemoteNotificationTypeAlert|UIRemoteNotificationTypeSound;

        [[UIApplicationsharedApplication]registerForRemoteNotificationTypes:myTypes];

    }

    [BPushregisterChannel:launchOptionsapiKey:@"0KLGrI7nYN3WOcHDTYGwobn3"pushMode:BPushModeDevelopmentwithFirstAction:nilwithSecondAction:nilwithCategory:nilisDebug:YES];

    // App是使用者點選推送訊息啟動

    NSDictionary *userInfo = [launchOptionsobjectForKey:UIApplicationLaunchOptionsRemoteNotificationKey];

    if (userInfo) {

        NSLog(@"從訊息啟動:%@",userInfo);

        [BPushhandleNotification:userInfo];

    }

#if TARGET_IPHONE_SIMULATOR

    Byte dt[32] = {0xc6,0x1e,0x5a,0x13,0x2d,0x04,0x83,0x82,0x12,0x4c,0x26,0xcd,0x0c,0x16,0xf6,0x7c,0x74,0x78,0xb3,0x5f,0x6b,0x37,0x0a,0x42,0x4f,0xe7,0x97,0xdc,0x9f,0x3a,0x54,0x10};

    [selfapplication:applicationdidRegisterForRemoteNotificationsWithDeviceToken:[NSDatadataWithBytes:dtlength:32]];

#endif

    //角標清0

    [[UIApplicationsharedApplication]setApplicationIconBadgeNumber:0];

    returnYES;

}

- (void)application:(UIApplication *)application didRegisterUserNotificationSettings:(UIUserNotificationSettings *)notificationSettings

{

    [application registerForRemoteNotifications];

}

- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification

{

    NSLog(@"接收本地通知啦!!!");

    [BPushshowLocalNotificationAtFront:notificationidentifierKey:nil];

}

- (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error

{

    NSLog(@"DeviceToken獲取失敗,原因:%@",error);

}

- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken

{

    NSLog(@"test:%@",deviceToken);

    [BPushregisterDeviceToken:deviceToken];

    [BPushbindChannelWithCompleteHandler:^(id result,NSError *error) {

        //需要在繫結成功後進行 settag listtag deletetag unbind操作否則會失敗

        if (result) {

            [BPushsetTag:@"Mytag"withCompleteHandler:^(id result,NSError *error) {

                if (result) {

                    NSLog(@"設定tag成功");

                }

            }];

        }

    }];

}

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo

{

    // App收到推送的通知

    [BPushhandleNotification:userInfo];

    NSLog(@"********** ios7.0之前 **********");

    //應用在前臺或者後臺開啟狀態下,不跳轉頁面,讓使用者選擇。

    if (application.applicationState ==UIApplicationStateActive || application.applicationState ==UIApplicationStateBackground) {

        NSLog(@"acitve or background");

        UIAlertView *alertView =[[UIAlertViewalloc]initWithTitle:@"收到一條訊息"message:userInfo[@"aps"][@"alert"]delegate:selfcancelButtonTitle:@"取消"otherButtonTitles:@"確定",nil];

        [alertView show];

    }

    NSLog(@"%@",userInfo);

}

5.真機測試:由於推送功能在模擬器上無法除錯,所以只能在真機上進行測試

可以根據列印日誌裡面的

"channel_id"  實現單播(對指定的手機發送通知)


確定傳送,手機收到通知:

當傳送廣播時,所有的裝置都可以收到通知 :

手機收到通知:

相關推薦

iOS基本使用

一.iOS證書指導 在 iOS App 中加入訊息推送功能時,必須要在 Apple 的開發者中心網站上申請推送證書,每一個 App 需要申請兩個證書,一個在開發測試環境下使用,另一個用於上線到 AppStore 後的生產環境。 7.1 為你的 App 建立 App ID iOS 中每個 App 都需要對

iOS上傳pem證書提示‘證書無效’

以前上傳證書也遇到過這種類似的提示,按照官網配置流程經過一番折騰總能解決,然而這次折騰了大半天了。。。搞毛線啊,此事必有蹊蹺。最終發現是我Mac系統版本(剛從10.12.6升到10.13)太高了,因為10.12.6的openssl版本是0.9.8zh,而10.13的系統openssl的版本是2.x.x,具體多

ios

一.iOS證書指導 在 iOS App 中加入訊息推送功能時,必須要在 Apple 的開發者中心網站上申請推送證書,每一個 App 需要申請兩個證書,一個在開發測試環境下使用,另一個用於上線到 AppStore 後的生產環境。 7.1 為你的 App 建立 App ID iOS 中每個 App 都需

ios 獲取不到deviceToken原因

在下面方法獲取不到deviceToken, - (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)devic

ios 接入

iOS在接入百度推送時,需要百度開發者平臺建立應用生成app ID,在建立的過程中則需要上傳.pem檔案,(開發環境和生產環境)建立.pem檔案請參照官方給的步驟。 一、建立.pem完成並上傳,報錯:證書無效 解決辦法: 1、首先確保建立.pem檔案的每一個步驟都沒有錯 2、檢視

iOS

1.首先生成CertificateSigningRequest檔案。 點選鑰匙串訪問-->從證書頒發機構請求證書-->填寫使用者郵件地址-->常用名-->點選儲存-->繼續-->最後點選儲存。 在桌面上就可以看見Certificate

Unity+IOS

2.Untiy部分設定: 1.把SDK中idfaversion下的BPush.h和libBpush.a放入Unity中的Plugins/IOS/下 2.在Unity上新增PushManager物件。 3.Unity程式碼呼叫Object-C函式實現新增Tag和刪除Tag程

--iOS(一)

1、  百度推送封裝了蘋果的APNS和google的SMS推送,作為開發者可以通過百度來完成這兩個平臺的推送。百度推送開發指南:http://developer.baidu.com/wiki/index.php?title=docs/cplat/push/guideios 

iOS 探討之 證書無效

Tip: 這一步執行完後手動到 /usr/local/ 目錄下檢視是否有一個openssl 資料夾,如果沒有則說明當前使用者沒有許可權來建立 openssl 資料夾,此時我們手動在這個目錄下建立 openssl 資料夾,然後再次執行上面的命令

iOS

 1.首先生成CertificateSigningRequest檔案。 點選鑰匙串訪問-->從證書頒發機構請求證書-->填寫使用者郵件地址-->常用名-->點選儲存--&g

Android-淺談遇到的坑

背景 說到推送幾乎99%的APP都會整合推送功能以此來及時告知客戶新資訊,如今推送平臺也是琳琅滿目,如現今比較火的幾個平臺極光、信鴿、個推、百度... 過程 用的比較多的也就是極光和百度了,但是在使用百度的過程中總能遇到了一些奇葩問題: 1.推送到達率不高,根據官方文件需要在Manifa

android 的整合

  /*  * Push訊息處理receiver。請編寫您需要的回撥函式, 一般來說: onBind是必須的,用來處理startWork返回值;  *onMessage用來接收透傳訊息; onSetTags、onDelTags、onListTags是tag相關操作的

關於點選通知,跳轉的問題(Android)

      今天在跟同事測試百度推送,之前一直困擾我的一個問題得到了有效解決,挺高興的,所以記錄一下,同時告誡自己,遇到問題,解決解決再解決,一定能夠解決的!      切入正題,百度推送的demo跟我們的app有些不一樣

整合碰到的問題

今天在整合百度推送到我的.NET專案中的時候發現,百度官網上下的.NET DEMO是4.5版本的,但是WIN2003安裝不了.NET 4.5的, 然後又從網上搜索到4.0版本的整合進專案中了,結果在測試的時候總是出錯,但是用.NET 4.5版本的DEMO測試就不會出錯, 仔

Android Studio整合遇到的坑

之前做過友盟推送,感覺挺簡單的,因此做百度推送的時候也沒當回事,結果悲劇了!!! 看過文件之後,也挺失望,現在都用AS了,百度推送官網卻還是隻針對eclipse整合的文件,因此看了文件之後,又進行了一番度娘,以下進行重點總結: 1.首先需要在百度推送官網建立

SDK之開發指南(三)

概述 Android SDK是為Android平臺開發者接入“雲推送”服務而提供開發者工具包,開發者需要在應用中正確整合Android SDK才能使安裝該應用的Android裝置接收到雲推送服務端傳送的各類訊息。 關於如何開通雲推送服務,請參考 接入指南,在開通推送服

相關jar包 maven

<dependency> <groupId>commons-beanutils</groupId> <artifactId>commons-beanutils</artifactId> <ve

,終於整理完整了

<pre name="code" class="java">一定要注意application要繼承FrontiaApplication,如果繼承的是Application就會報錯 <pre name="code" class="java">忘了最重要

基於android notification的使用之合併通知欄

建立Notification public void showmynotification(Context context,int num) { NotificationManager manager = (NotificationManager)context. ge

iOS開發 - ANPs通知 標簽: 通知ANPs遠程、本地

control con 垃圾 pre 條件 %20 常用 建立連接 mod iOS開發 - ANPs推送通知 標簽: 推送通知ANPs遠程推送本地推送 2015-05-03 14:12 3510人閱讀 評論(0) 收藏 舉報 本文章已收錄於: iOS知識庫