一、問題描述
在應用中經(jīng)常會添加推送似将,在我們的項目中也用到了推送,推送添加的是友盟的第三方推送方案蚀苛,接入友盟的SDK只要按照步驟在验,接進來也十分簡單,完全可以收到推送數(shù)據(jù)堵未,但問題是在收到推送數(shù)據(jù)時如何去處理收到的信息以及如何跳轉(zhuǎn)相應的界面腋舌?這是我這篇文章主要介紹的。
二渗蟹、解決思路
iOS提供收到推送時的處理方法块饺,但是收到推送應該從幾個方面來考慮這才是關鍵的點,對于一個剛接觸的人來說也是不知所措雌芽,之后再網(wǎng)上查找零零碎碎的找到了一些突破點授艰,才完成了對于收到推送的處理方式,主要從以下兩個方面來考慮世落。
1>當程序沒有死掉即在在前臺或者后臺時
/**
* 收到推送時會在AppDelegate的didReceiveRemoteNotification中響應事件
*/
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo
{
// 這里做收到推送時的處理userInfo為收到的數(shù)據(jù)
}
1)程序在運行在前臺即處于UIApplicationStateActive狀態(tài)
處于UIApplicationStateActive狀態(tài)時的處理.jpg
在UIApplicationStateActive時只需要定義一個alertView來處理淮腾,在代理方法里跳轉(zhuǎn)相應的詳情,當然這個跳轉(zhuǎn)必須要有navigationController來跳轉(zhuǎn)并且navigationController要作為一個屬性屉佳。
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo
{
// 保存推送數(shù)據(jù)
self.userInfos = userInfo;
// 定制自定義的彈框
if([UIApplication sharedApplication].applicationState == UIApplicationStateActive)
{
UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"有新的要聞推薦哦~"
message:userInfo[@"aps"][@"alert"]
delegate:self
cancelButtonTitle:@"取消"
otherButtonTitles:@"立即前往", nil];
[alertView show];
}
}
alerView的代理方法里執(zhí)行跳轉(zhuǎn)詳情
#pragma mark -跳轉(zhuǎn)到推送詳情頁
- (void)notificationDetailVc {
INHelpProtrolViewController *help = [[INHelpProtrolViewController alloc]init];
help.urlString = self.userInfos[@"src_link"];
[self.mainNavigationController pushViewController:help animated:YES];
}
2)程序在運行在后臺但沒死掉即處于UIApplicationStateInactive狀態(tài)時
處于UIApplicationStateInactive狀態(tài)時.jpg
當你點擊通知欄上的通知時程序程序會觸發(fā)didReceiveRemoteNotification方法
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo
{
if ([UIApplication sharedApplication].applicationState == UIApplicationStateInactive){
// 跳轉(zhuǎn)詳情頁面
INHelpProtrolViewController *help = [[INHelpProtrolViewController alloc]init];
help.urlString = self.userInfos[@"src_link"];
[self.mainNavigationController pushViewController:help animated:YES];
}
}
2>當程序完全死掉時
當程序完全死掉時.jpg
// 程序啟動時
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
/// 上面創(chuàng)建window谷朝,navgationController等操作,創(chuàng)建完成后判斷是否是由推送打開之后跳轉(zhuǎn)
#pragma mark -判斷是否由推送打開
// 判斷是否是通過推送打開app
NSDictionary *userInfos = [launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey];
if (userInfos) {
// 保存數(shù)據(jù)
self.userInfos = userInfos;
// 跳轉(zhuǎn)詳情
INHelpProtrolViewController *help = [[INHelpProtrolViewController alloc]init];
help.urlString = self.userInfos[@"src_link"];
[self.mainNavigationController pushViewController:help animated:YES];
}
return YES;
}