iOS收到推送后痊乾,跳轉到某一頁面

以前做過推送, 但只是那種最基本的廣播推送(向所有安裝appde設備通知)椭更, 列播組播這種對指定用戶推送消息還沒做過, 最近剛好有個項目蛾魄,向指定用戶推送物流信息虑瀑、物品狀態(tài)等等。于是前幾天就和也沒做過推送的后臺干起來了褐隆,詳情如下:

我用的是友盟推送复亏, 配置證書這一環(huán)節(jié)直接跳過了准验,這個網(wǎng)上有講的。給大家講一點常識痛侍,友盟推送分生產(chǎn)環(huán)境和開發(fā)環(huán)境。用手機刷上去的就是開發(fā)環(huán)境魔市, 發(fā)布到蘋果商店就是生產(chǎn)環(huán)境主届,沒發(fā)布前怎么模擬呢, 用普通賬號打的ad hoc 包待德, 用企業(yè)賬號打的ad hoc 包或者enterprise包都可以測試生產(chǎn)環(huán)境君丁。


** 開發(fā)環(huán)境下, 你把APP刪掉将宪,重新調試上來绘闷,就會生成一個新的device_token了橡庞!下面的幾個步驟是自己的理解結合網(wǎng)上的資料寫出的想法,大牛們輕的吐槽…… **

1印蔗、傳device_token的時機

后臺向指定用戶做推送扒最,那么必須知道某個用戶的device_token,那么怎么獲取token呢,APP啟動后會在appdelegate的didRegisterForRemoteNotificationsWithDeviceToken方法里返回device_token信息:

- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken
{
  [UMessage registerDeviceToken:deviceToken];
   NSString * token = [[[[deviceToken description] stringByReplacingOccurrencesOfString: @"<" withString: @""]
                     stringByReplacingOccurrencesOfString: @">" withString: @""]
                    stringByReplacingOccurrencesOfString: @" " withString: @""];
  }

但是后臺向指定用戶推送华嘹, 就必須把uid(用戶ID)和token關聯(lián)起來吧趣,我這里的做法時, 用戶登錄的時候就上傳token信息除呵, 退出登錄的時候再菊, 就清除用戶綁定的token信息, 這樣確保后臺會向用戶最后一次登錄的設備號做推送(只是自己的理解颜曾,當然了纠拔,iOS設備收到推送后,還要判斷用戶是否登錄而且登錄的是不是你要推送的用戶)泛豪。

2稠诲、 收到通知時app的狀態(tài)

收到通知的時候APP的狀態(tài)可能是未啟動、前臺活躍(任何界面)诡曙、后臺等三種臀叙。

  • 未啟動時,點擊通知欄啟動App, 會在didFinishLaunchingWithOptions方法里收到通知內容价卤。

  • 剩下兩種會在didReceiveRemoteNotification方法里收到通內容劝萤。

    - (void)application:(UIApplication *)application   didReceiveRemoteNotification:(NSDictionary *)userInfo{
     _userInfo = userInfo;
       //關閉友盟對話框
     [UMessage setAutoAlert:NO];
     [UMessage didReceiveRemoteNotification:userInfo];
     NSLog(@"_______________友盟系統(tǒng)方法 userInfo %@",userInfo);
    if(userInfo)// 調用appdelegate的分類處理業(yè)務邏輯
      [self dealWithMyMessagePush:userInfo];
    }
    

    ** 代碼里面刪減了一些和推送不相關的代碼,我的項目架構是tab+nav **

    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{
     self.window.rootViewController = [[FDIMGBarController alloc] init];
     //  分類
      [self UMengShareMethodAndCount:launchOptions];
     // 類別
    [self FD_updateAppVersion];
    NSDictionary* userInfo = [launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey];
    if(userInfo){//推送信息
      self.userInfo = userInfo;//[userInfo copy]
    }
     return YES;
    }
    
  • 未啟動時收到通知慎璧,就判斷字典userInfo是否為空床嫌, 不為空是說明有通知消息。我這里的做法是把她復制給AppDelegate的某個屬性胸私, 在首頁控制器取到AppDelegate的這個值厌处,判斷是否為空,不為空就進行下一步操作岁疼。

  • 用戶在前臺或后臺收到消息的時候阔涉, 我會彈出一個彈出框提醒用戶,是否前往我的消息界面捷绒。


5瑰排、 未啟動時首頁控制器邏輯處理

在viewDidLoad方法里:
AppDelegate * app = (AppDelegate *)[UIApplication sharedApplication].delegate;
//pushName 是我給后天約定的通知必傳值,所以我可以根據(jù)他是否為空來判斷是否有通知
NSString *  pushName = [[app.userInfo objectForKey:@"aps"] objectForKey:@"alert"];
if(![SYFCustomCLASS SYFIsEmptyOrNull:pushName])
    [self getPushInfo:app.userInfo];

如果有通知的話:

-(void)getPushInfo:(NSDictionary *)dict{
 if(!IsLogin){// 判斷用戶是否登錄
    LoginViewController * loginVC = [[LoginViewController alloc] initWithNibName:@"LoginViewController" bundle:nil];
//通知必返回要通知用戶的uid, 判斷登錄的用戶是不是你要通知的用戶
    loginVC.push_uid = dict[@"uid"];
    FDNavigationController * loginNav = [[FDNavigationController alloc] initWithRootViewController:loginVC];
    [self presentViewController:loginNav animated:YES completion:^{}];
}else
{// 這就文章標題說的某一界面
   MyUserMessageVC * messageVC = [[MyUserMessageVC alloc] initWithNibName:@"MyUserMessageVC" bundle:nil];
    [self.navigationController pushViewController:messageVC animated:YES];
 }
}

當用戶的登錄成功的時候疙驾,在上傳device_token的接口方法里凶伙, 需要判斷登錄用戶的uid是不是你要通知的用戶。如果不是你要通知的用戶它碎,dismiss就好了函荣,結束显押;如果是就要跳轉到我的消息界面。

   if(![self.push_uid isEqualToString:currentuid])
        [self dismissViewControllerAnimated:YES completion:NULL];
       else{
        [self dismissViewControllerAnimated:YES completion:^{
         AppDelegate * app = (AppDelegate *)[UIApplication sharedApplication].delegate;
   //AppDelegate的分類
         [app  testLoginerUidCorret];
         }];

方法如下:

- (void)testLoginerUidCorret{
// 取到tabbarcontroller
FDIMGBarController *tabBarController = ( FDIMGBarController*)self.window.rootViewController;
// 取到navigationcontroller
FDNavigationController * nav = (FDNavigationController *)tabBarController.selectedViewController;
//取到nav控制器當前顯示的控制器
  UIViewController * baseVC = (UIViewController *)nav.visibleViewController;
//如果是當前控制器是我的消息控制器的話傻挂,刷新數(shù)據(jù)即可
if([baseVC isKindOfClass:[MyUserMessageVC class]])
{
    MyUserMessageVC * vc = (MyUserMessageVC *)baseVC;
    [vc reloadMessageData];
    return;
}
// 否則乘碑,跳轉到我的消息
MyUserMessageVC * messageVC = [[MyUserMessageVC alloc] initWithNibName:@"MyUserMessageVC" bundle:nil];
[nav pushViewController:messageVC animated:YES];
}

6、應用在前臺或后臺的邏輯處理

邏輯和未啟動時很多情況都是類似金拒,彈出提醒框兽肤, 點擊立即前往時,判斷用戶是否登錄绪抛,如果用戶登錄资铡,直接跳轉到我的消息界面;沒有登錄請參考上面邏輯幢码。

** 由于第一次做推送某一頁面笤休,寫的不好處,請大家多多交流指點症副,有疑問或更好的想法的可以和我說店雅。 **

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市贞铣,隨后出現(xiàn)的幾起案子闹啦,更是在濱河造成了極大的恐慌,老刑警劉巖辕坝,帶你破解...
    沈念sama閱讀 219,539評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件窍奋,死亡現(xiàn)場離奇詭異,居然都是意外死亡酱畅,警方通過查閱死者的電腦和手機费变,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,594評論 3 396
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來圣贸,“玉大人,你說我怎么就攤上這事扛稽∮蹙” “怎么了?”我有些...
    開封第一講書人閱讀 165,871評論 0 356
  • 文/不壞的土叔 我叫張陵在张,是天一觀的道長用含。 經(jīng)常有香客問我,道長帮匾,這世上最難降的妖魔是什么啄骇? 我笑而不...
    開封第一講書人閱讀 58,963評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮瘟斜,結果婚禮上缸夹,老公的妹妹穿的比我還像新娘痪寻。我一直安慰自己,他們只是感情好虽惭,可當我...
    茶點故事閱讀 67,984評論 6 393
  • 文/花漫 我一把揭開白布橡类。 她就那樣靜靜地躺著,像睡著了一般芽唇。 火紅的嫁衣襯著肌膚如雪顾画。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,763評論 1 307
  • 那天匆笤,我揣著相機與錄音研侣,去河邊找鬼。 笑死炮捧,一個胖子當著我的面吹牛庶诡,可吹牛的內容都是我干的。 我是一名探鬼主播寓盗,決...
    沈念sama閱讀 40,468評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼灌砖,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了傀蚌?” 一聲冷哼從身側響起基显,我...
    開封第一講書人閱讀 39,357評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎善炫,沒想到半個月后撩幽,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,850評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡箩艺,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,002評論 3 338
  • 正文 我和宋清朗相戀三年窜醉,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片艺谆。...
    茶點故事閱讀 40,144評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡榨惰,死狀恐怖,靈堂內的尸體忽然破棺而出静汤,到底是詐尸還是另有隱情琅催,我是刑警寧澤,帶...
    沈念sama閱讀 35,823評論 5 346
  • 正文 年R本政府宣布虫给,位于F島的核電站藤抡,受9級特大地震影響,放射性物質發(fā)生泄漏抹估。R本人自食惡果不足惜缠黍,卻給世界環(huán)境...
    茶點故事閱讀 41,483評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望药蜻。 院中可真熱鬧瓷式,春花似錦替饿、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,026評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至瓤漏,卻和暖如春腾夯,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背蔬充。 一陣腳步聲響...
    開封第一講書人閱讀 33,150評論 1 272
  • 我被黑心中介騙來泰國打工蝶俱, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人饥漫。 一個月前我還...
    沈念sama閱讀 48,415評論 3 373
  • 正文 我出身青樓榨呆,卻偏偏與公主長得像,于是被迫代替她去往敵國和親庸队。 傳聞我的和親對象是個殘疾皇子积蜻,可洞房花燭夜當晚...
    茶點故事閱讀 45,092評論 2 355

推薦閱讀更多精彩內容

  • 概述 在多數(shù)移動應用中任何時候都只能有一個應用程序處于活躍狀態(tài),如果其他應用此刻發(fā)生了一些用戶感興趣的那么通過通知...
    莫離_焱閱讀 6,515評論 1 8
  • 極光推送: 1.JPush當前版本是1.8.2彻消,其SDK的開發(fā)除了正常的功能完善和擴展外也緊隨蘋果官方的步伐竿拆,SD...
    Isspace閱讀 6,722評論 10 16
  • 來源:崔江濤的博客 概述在多數(shù)移動應用中任何時候都只能有一個應用程序處于活躍狀態(tài),如果其他應用此刻發(fā)生了一些用戶感...
    李棲桐閱讀 925評論 0 0
  • 一宾尚、簡介 目前說的是基于ios10之前,所以有些類是過期的. 推送分為本地推送和遠程推送2種丙笋。可以在應用沒有打開甚...
    JingYa_Lu閱讀 926評論 0 0
  • 關于這個話題煌贴,我很早就想寫一篇文章了御板,來說說我一步一步獲得更多的知識和想法的來源。最早的時候牛郑,那當然就是看書了怠肋。這...
    質子陳閱讀 223評論 0 2