iOS-百度推送

公司在項目使用第三方的推送是百度推送 接下來學(xué)習(xí)一下
百度推送地址

第一章 生成AppKey

1.1 注冊百度賬號

1.2 創(chuàng)建應(yīng)用

Snip20170330_76.png

1.2.1 設(shè)置應(yīng)用名稱

Snip20170330_77.png

1.2.2 應(yīng)用配置

Snip20170330_80.png

1.2.2 應(yīng)用配置完成 得到API KEY

Snip20170330_81.png

第二章 生成推送所需的pem證書

2.1 在開發(fā)者這種找到我們的應(yīng)用對應(yīng)的APPID

Snip20170330_82.png

2.2 選擇證書關(guān)聯(lián)的APPID

Snip20170330_83.png

2.3 選擇電腦鑰匙串辦法的證書

Snip20170330_84.png

2.4 同樣的操作就會生成兩個cer證書痘番,雙擊安裝到我們的鑰匙串中

Snip20170330_85.png

2.5 導(dǎo)出兩個P12文件

2.6 將導(dǎo)出的P12通過命令導(dǎo)出百度需要的pem證書

Snip20170330_86.png

2.7證書與證書校驗

與 APNs 之間是加密的連接耿战,因此需要使用證書來加密連接员魏。每個的推送環(huán)境有自己單獨的推送證書践惑,即開發(fā)證書和生產(chǎn)證書驶赏。

在將證書最終轉(zhuǎn)為 pem 格式后墅茉,可通過與 APNs 連接來測試證書是否有效凡蜻。

開發(fā)環(huán)境:

openssl s_client -connect gateway.sandbox.push.apple.com:2195 -cert MyApnsDev.pem

生產(chǎn)環(huán)境:

openssl s_client -connect gateway.push.apple.com:2195 -cert MyApnsPro.pem

當輸入完命令回車后辣之,終端首先會輸出很多相關(guān)信息觅玻。

當連接建立失敗時想际,會直接關(guān)閉。

當連接建立成功時溪厘,終端會停止輸出胡本,并等待你輸入,你可以隨便輸入一些字符后摁回車畸悬,然后連接才會關(guān)閉侧甫。?

2.8 通知的兩種推送環(huán)境

在使用 iOS 遠程推送功能時,有兩種不同的環(huán)境。開發(fā)環(huán)境(Development)以及生產(chǎn)環(huán)境(Production)披粟。

App 當前使用的推送環(huán)境與 Xcode - Build Settings - Code Signing - Provisioning Profile 文件的模式一致咒锻。

2.7 將pem證書上傳到我們百度創(chuàng)建的應(yīng)用中

Snip20170330_87.png

這樣我們前期的配置工作就完成了。由于蘋果APNS是加密過的僻爽,所以我們需要將證書傳遞給百度虫碉,接下來我們在我們項目中將DeviceToken傳遞給百度,它會綁定生成一個對應(yīng)的channel_ID.
channel_id : channel_id是用于表示一臺設(shè)備的唯一標識, 在推送消息時,用于指定消息的目標接收設(shè)備.

第三章 創(chuàng)建我們的iOS工程胸梆,集成百度SDK

3.1 下載百度SDK 地址

Snip20170330_88.png

下載后的文件目錄

Snip20170330_89.png

3.2 將紅色的部分拖進項目中去敦捧,test.caf不需要

Snip20170330_90.png

3.3對于Xcode8.0配置

Snip20170330_91.png
Snip20170330_92.png

3.4 在AppDelegate中初始化百度推送

#import "AppDelegate.h"
#import <UserNotifications/UserNotifications.h>
#import "BPush.h"
#import "ViewController.h"
@interface AppDelegate ()

@end

@implementation AppDelegate


- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    
    
    // iOS10 下需要使用新的 API
    if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 10.0) {
#ifdef NSFoundationVersionNumber_iOS_9_x_Max
        UNUserNotificationCenter* center = [UNUserNotificationCenter currentNotificationCenter];
        
        [center requestAuthorizationWithOptions:(UNAuthorizationOptionAlert + UNAuthorizationOptionSound + UNAuthorizationOptionBadge)
                              completionHandler:^(BOOL granted, NSError * _Nullable error) {
                                  // Enable or disable features based on authorization.
                                  if (granted) {
                                      [application registerForRemoteNotifications];
                                  }
                              }];
#endif
    }
    else 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 測試 開發(fā)環(huán)境 時需要修改BPushMode為BPushModeDevelopment 需要修改Apikey為自己的Apikey
    
     [BPush registerChannel:launchOptions apiKey:@"M4a6DvXbCnl7rgvLcVeIwSFw" pushMode:BPushModeDevelopment withFirstAction:@"打開" withSecondAction:@"關(guān)閉" withCategory:@"test" useBehaviorTextInput:YES isDebug:YES];
    
    // App 使用戶點擊推送消息啟動
    NSDictionary *userInfo = [launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey];
    if (userInfo) {
        [BPush handleNotification:userInfo];
    }
    
    // 清除角標
    [[UIApplication sharedApplication] setApplicationIconBadgeNumber:1.0];
        
    return YES;
}

#pragma Gegistnotification

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



// 當 DeviceToken 獲取失敗時兢卵,系統(tǒng)會調(diào)用此回調(diào)方法
- (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error
{
    NSLog(@"DeviceToken 獲取失敗, 原因是: %@", error);
}

// 當注冊成功時候返回 deviceToken
- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken
{
    NSLog(@"%@-----", deviceToken);
    [BPush registerDeviceToken:deviceToken];
    
    // 綁定Push服務(wù)通道 error_code為0是綁定成功 綁定成功后可以獲取appid,channelid,userid等信息
    [BPush bindChannelWithCompleteHandler:^(id result, NSError *error) {
        
        if (result) {
            if ([result[@"error_code"] intValue] != 0) {
                return ;
            }
            
            // 獲取channel_id
            NSString *myChange_id = [BPush getChannelId];
//            [BPush getAppId];
//            [BPush getUserId];
            NSLog(@"%@", myChange_id);
            
            [BPush setTag:@"MyTag" withCompleteHandler:^(id result, NSError *error) {
                if (result) {
                    // BPushCallBack中有設(shè)置標簽結(jié)果的反饋,绪颖,error_code 為0時設(shè)置成功會得到設(shè)置結(jié)果秽荤。
                    NSLog(@"result==================%@", result);
                    
                }
            }];
            
        }
    }];
    
}



// 當用戶點擊了通知 應(yīng)用在前臺 或者開啟后臺并且應(yīng)用在后臺 是調(diào)用
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler
{
    
    NSLog(@"%@", userInfo);
    
    
    // 應(yīng)用在前臺 不跳轉(zhuǎn)頁面
    if (application.applicationState == UIApplicationStateActive) {
        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"收到一條消息" message:userInfo[@"aps"][@"alert"] delegate:self cancelButtonTitle:@"取消" otherButtonTitles:@"確定", nil];
        
        [alert show];
    }
    // 殺死情況下 直接跳轉(zhuǎn)到頁面
    if (application.applicationState == UIApplicationStateInactive) {
        
        /*
            SkipViewController *skipCtr = [[SkipViewController alloc] init];
            [_tabBarCtr.selectedViewController pushViewController:skipCtr animated: YES];
         */
    }
    
    // 應(yīng)用在后臺 當后臺設(shè)置apps字段里的
    if(application.applicationState == UIApplicationStateBackground){
        
         ViewController *vc = (ViewController *)self.window.rootViewController;
        
        
        vc.textView.text = userInfo.description;
        
    }
}

3.5在百度后臺創(chuàng)建發(fā)送通知

Snip20170330_93.png

3.6 查看推送列表

Snip20170330_94.png

第三章 PHP集成百度推送

1.1下載PHP對應(yīng)SDK

Snip20170330_95.png

下載后的SDK目錄

Snip20170330_97.png

將項目拖拽到我們本地的服務(wù)器站點

Snip20170330_98.png

1.2 配置項目

  • 修改configure.php中的defaultapiKey及defaultsecurekey,填入在Setp 2中獲得的apikey及secure key.
Snip20170330_99.png

1.2 在hello_for_ios.php 中腳本中發(fā)送一個推送

Snip20170330_102.png

推送消息的格式


第四章 對于證書過期的處理

Snip20170330_103.png

4.1到蘋果開發(fā)者中心,找到對應(yīng)的AppID

Snip20170330_104.png

4.2選擇過期的證書 重新生成對應(yīng)的證書

Snip20170330_105.png

4.3 按這上面的步驟上傳到百度我們創(chuàng)建的應(yīng)用中柠横,就可以正常的發(fā)送通知了窃款。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市牍氛,隨后出現(xiàn)的幾起案子晨继,更是在濱河造成了極大的恐慌,老刑警劉巖搬俊,帶你破解...
    沈念sama閱讀 217,277評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件紊扬,死亡現(xiàn)場離奇詭異,居然都是意外死亡唉擂,警方通過查閱死者的電腦和手機餐屎,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評論 3 393
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來玩祟,“玉大人腹缩,你說我怎么就攤上這事】赵” “怎么了庆聘?”我有些...
    開封第一講書人閱讀 163,624評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長勺卢。 經(jīng)常有香客問我伙判,道長,這世上最難降的妖魔是什么黑忱? 我笑而不...
    開封第一講書人閱讀 58,356評論 1 293
  • 正文 為了忘掉前任宴抚,我火速辦了婚禮勒魔,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘菇曲。我一直安慰自己冠绢,他們只是感情好,可當我...
    茶點故事閱讀 67,402評論 6 392
  • 文/花漫 我一把揭開白布常潮。 她就那樣靜靜地躺著弟胀,像睡著了一般。 火紅的嫁衣襯著肌膚如雪喊式。 梳的紋絲不亂的頭發(fā)上孵户,一...
    開封第一講書人閱讀 51,292評論 1 301
  • 那天,我揣著相機與錄音岔留,去河邊找鬼夏哭。 笑死,一個胖子當著我的面吹牛献联,可吹牛的內(nèi)容都是我干的竖配。 我是一名探鬼主播,決...
    沈念sama閱讀 40,135評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼里逆,長吁一口氣:“原來是場噩夢啊……” “哼进胯!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起原押,我...
    開封第一講書人閱讀 38,992評論 0 275
  • 序言:老撾萬榮一對情侶失蹤龄减,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后班眯,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,429評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡烁巫,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,636評論 3 334
  • 正文 我和宋清朗相戀三年署隘,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片亚隙。...
    茶點故事閱讀 39,785評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡磁餐,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出阿弃,到底是詐尸還是另有隱情诊霹,我是刑警寧澤,帶...
    沈念sama閱讀 35,492評論 5 345
  • 正文 年R本政府宣布渣淳,位于F島的核電站脾还,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏入愧。R本人自食惡果不足惜鄙漏,卻給世界環(huán)境...
    茶點故事閱讀 41,092評論 3 328
  • 文/蒙蒙 一嗤谚、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧怔蚌,春花似錦巩步、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,723評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至籍胯,卻和暖如春竟闪,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背芒炼。 一陣腳步聲響...
    開封第一講書人閱讀 32,858評論 1 269
  • 我被黑心中介騙來泰國打工瘫怜, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人本刽。 一個月前我還...
    沈念sama閱讀 47,891評論 2 370
  • 正文 我出身青樓鲸湃,卻偏偏與公主長得像,于是被迫代替她去往敵國和親子寓。 傳聞我的和親對象是個殘疾皇子暗挑,可洞房花燭夜當晚...
    茶點故事閱讀 44,713評論 2 354

推薦閱讀更多精彩內(nèi)容

  • 極光推送: 1.JPush當前版本是1.8.2,其SDK的開發(fā)除了正常的功能完善和擴展外也緊隨蘋果官方的步伐斜友,SD...
    Isspace閱讀 6,719評論 10 16
  • 1.生成推送的開發(fā)與生產(chǎn)證書 2.將兩個證書下載到本地在鑰匙串中導(dǎo)出p12文件 3.利用終端生成pem文件 0...
    猿姑涼閱讀 617評論 0 0
  • 前言:現(xiàn)在第三方推送也很多 炸裆,比如極光,融云鲜屏,信鴿烹看,其原理也是相同利用APNS推送機制 ,前段公司讓做自己的推送洛史,...
    OliviaZqy閱讀 2,958評論 0 5
  • 什么是APNS惯殊? 蘋果推送通知服務(wù)(APNs)是推送通知的網(wǎng)關(guān),iPhone ipad 對于應(yīng)用程序在后臺運行有諸...
    CoderZS閱讀 1,469評論 0 11
  • 前言:現(xiàn)在第三方推送也很多 也殖,比如極光土思,融云,信鴿忆嗜,其原理也是相同利用APNS推送機制 己儒,前段公司讓做自己的推送,...
    _方丈閱讀 21,349評論 15 133