大家在項目開發(fā)中都做過推送!例如:極光推送、信鴿推送、個推等,使用的都是集成過后的SDK,其原理都相同。
這里做一下百度推送。
- 百度賬號的注冊申請和審核
登錄百度云推送:http://push.baidu.com/fc。填寫相關(guān)資料、審核。 審核通過后下載SDK,創(chuàng)建應(yīng)用(上傳相應(yīng)的推送證書格式看要求到出),默認創(chuàng)建的應(yīng)用是,開發(fā)者測試的,上線后要改成生產(chǎn)的。 -
SDK的導入與配置
1)所使用的SDK很簡單。(里面有個測試音頻text.caf)
屏幕快照 2.19.28.png
2)相應(yīng)的庫是否導入
屏幕快照2.20.16.png
3)證書要帶推送功能 - SDK在項目中的使用
1)啟動時寫的
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{
//***********************關(guān)于如何設(shè)置badge角標加1的方法***********************
/*
服務(wù)端推送的badge是幾就會顯示幾,你只需要跟服務(wù)端同步消息數(shù)目,然后讓服務(wù)端自己,該推送幾,就推送幾,比如你應(yīng)用打開的時候,或者進入后臺的時候跟服務(wù)端同步,這個點,需要你們自己去設(shè)計,應(yīng)用沒有消息的時候,服務(wù)端推送了1,當應(yīng)用打開時候,告訴服務(wù)端,app沒點擊通知,那下次應(yīng)用推送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 測試 開發(fā)環(huán)境 時需要修改BPushMode為BPushModeDevelopment 需要修改Apikey為自己的Apikey
// 在 App 啟動時注冊百度云推送服務(wù),需要提供 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)點擊推送消息
// 此方法是 用戶點擊了通知,應(yīng)用在前臺 或者開啟后臺并且應(yīng)用在后臺 時調(diào)起
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler{
completionHandler(UIBackgroundFetchResultNewData);
NSLog(@"********** iOS7.0之后 background **********");
// 應(yīng)用在前臺 或者后臺開啟狀態(tài)下,不跳轉(zhuǎn)頁面,讓用戶選擇。
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//殺死狀態(tài)下,直接跳轉(zhuǎn)到跳轉(zhuǎn)頁面。
{
//這里實現(xiàn)頁面跳轉(zhuǎn)
}
}
3)注冊推送服務(wù)
// 在 iOS8 系統(tǒng)中,還需要添加這個方法。通過新的 API 注冊推送服務(wù)
- (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(@"設(shè)置tag成功");
}
}];
}
}];
}
// 當 DeviceToken 獲取失敗時,系統(tǒng)會回調(diào)此方法
- (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之前 **********");
// 應(yīng)用在前臺 或者后臺開啟狀態(tài)下,不跳轉(zhuǎn)頁面,讓用戶選擇。
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//殺死狀態(tài)下,直接跳轉(zhuǎn)到跳轉(zhuǎn)頁面。
{
}
}
- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification{
NSLog(@"接收本地通知啦?。?!");
[BPush showLocalNotificationAtFront:notification identifierKey:nil];
}
4.開啟和關(guān)閉推送按鈕
說說我的思路和做法:本地存一個參數(shù)1或者0 ,例如:status用于存放狀態(tài)。加一個按鈕,點擊關(guān)閉狀態(tài)status存放0,同時UIUserNotificationType設(shè)置為:UIUserNotificationTypeNone UIRemoteNotificationType設(shè)置為:UIRemoteNotificationTypeNone 反之設(shè)置回聲音、徽章、彈窗提醒。 其他的跳轉(zhuǎn)頁面等操作可以預判所存放狀態(tài)status.

