個(gè)推遇到的問題記錄

公司集成的個(gè)推推送旬蟋,在處理推送消息的時(shí)候遇到了一些問題,在此記錄一下巾陕,以防犯同樣的錯(cuò)誤终抽。剛開始沒有搞懂接到推送后所要走的方法,以至于處理的時(shí)候走了很長(zhǎng)時(shí)間的彎路蛛倦。
下面分以下三種情況來處理:

1. 應(yīng)用在后臺(tái):

應(yīng)用在后臺(tái)時(shí),用戶點(diǎn)擊通知欄查看推送消息時(shí)啦桌,走的方法是:

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

在此取出此條推送的詳細(xì)信息溯壶,并發(fā)送通知。

/** APP已經(jīng)接收到“遠(yuǎn)程”通知(推送) - 透?jìng)魍扑拖? */
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult result))completionHandler {
    
    [application setApplicationIconBadgeNumber: 0];        // 標(biāo)簽
    [[UIApplication sharedApplication] cancelAllLocalNotifications];
    // 處理APN
    NSString *payloadMsg = [userInfo objectForKey:@"payload"];
    // [4]: 收到個(gè)推消息
    //如果離線
    if([payloadMsg rangeOfString:@"RValue"].length>0)
    {
        //透?jìng)髟诰€提示
        NSDictionary *dict = [payloadMsg JSONValue];
        [self savePayloadMsgToUserDefaultsWithDict:dict];
        if ( application.applicationState == UIApplicationStateInactive) {
            [[NSNotificationCenter defaultCenter] postNotificationName:@"notificationOff" object:nil];
        }
    }
    completionHandler(UIBackgroundFetchResultNewData);
}

2.應(yīng)用被殺死甫男,未開啟的情況下:

當(dāng)點(diǎn)擊通知欄推送消息時(shí)且改,因?yàn)橐葐?dòng)應(yīng)用,會(huì)進(jìn)

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

因?yàn)槲业耐ㄖ挠^察者是寫在首頁的板驳,所以要等首頁加載完成之后又跛,才能在AppDelegate里面發(fā)送通知。要不就進(jìn)不到詳情頁若治。
當(dāng)時(shí)就因?yàn)闆]搞懂這個(gè)流程慨蓝,搞得推送調(diào)試了好幾天都弄不好,各種方法都試過了端幼,個(gè)推客服也被問的都不回我了...... 最后查了好久礼烈,還是這位大神的文檔幫助了我 http://www.reibang.com/p/69fd3dce35c2/comments/2117162
方法和大神寫的一樣,先把這條推送消息保存起來婆跑,在viewDidAppear里面發(fā)送了一個(gè)通知此熬,在AppDelegate里面來接收,然后來處理推送消息滑进,好進(jìn)入詳情頁犀忱。
AppDelegate didFinishLaunchingWithOptions里我是這樣寫的

// 程序在死亡狀態(tài),啟動(dòng)扶关,收到推送通知阴汇,跳轉(zhuǎn)至對(duì)應(yīng)頁面
    NSDictionary *userInfo = [launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey];
    if (userInfo) {
        // 緩存apns通知內(nèi)容到本地
        [[NSUserDefaults standardUserDefaults] setObject:userInfo forKey:@"payloadMsgDict"];
        [[NSUserDefaults standardUserDefaults ]synchronize];
        // 根據(jù)通知內(nèi)容,跳轉(zhuǎn)至不同頁面的通知
        [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(jumpToDetailVC) name:@"payloadDictAction" object:nil];
    }
- (void)jumpToDetailVC
{
   NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
   NSDictionary *dict = [defaults objectForKey:@"payloadMsgDict"];
   NSString *payloadMsg = [dict objectForKey:@"payload"];
   if([payloadMsg rangeOfString:@"RValue"].length>0)
   {
       //取出返回的推送信息
       NSDictionary *dict = [payloadMsg JSONValue];
      //保存字典里的字段
       [self savePayloadMsgToUserDefaultsWithDict:dict];
   }
   //發(fā)送對(duì)推送消息處理驮审,以此進(jìn)入詳情頁的通知
   [[NSNotificationCenter defaultCenter] postNotificationName:@"notificationOff" object:nil];
}

在首頁的

- (void)viewDidAppear:(BOOL)animated
{
    [super viewDidAppear: animated];
    // 應(yīng)用由死亡狀態(tài)進(jìn)入激活狀態(tài)鲫寄,這個(gè)時(shí)候發(fā)送通知,appdelegate接受通知疯淫,根據(jù)通知內(nèi)容進(jìn)行不同跳轉(zhuǎn)
    NSDictionary * notificationUserInfo =[[NSUserDefaults standardUserDefaults] valueForKey:@"payloadMsgDict"];
    if (notificationUserInfo) {
        [[NSNotificationCenter defaultCenter] postNotificationName:@"payloadDictAction" object:nil];
        [[NSUserDefaults standardUserDefaults]setObject:nil forKey:@"payloadMsgDict"];
        [[NSUserDefaults standardUserDefaults ]synchronize];
    }   
}

3.應(yīng)用在前臺(tái):

我是在個(gè)推的回調(diào)方法里面寫的地来,也就是因?yàn)檫@個(gè)方法,導(dǎo)致我走了好幾天的彎路... 其實(shí)到現(xiàn)在我還沒搞懂這個(gè)方法的用處主要是什么熙掺,有知道的大神還請(qǐng)幫我指點(diǎn)一下未斑。

- (void)GeTuiSdkDidReceivePayloadData:(NSData *)payloadData andTaskId:(NSString *)taskId andMsgId:(NSString *)msgId andOffLine:(BOOL)offLine fromGtAppId:(NSString *)appId{
NSString *payloadMsg = nil;
    if (payloadData) {
        payloadMsg = [[NSString alloc]initWithBytes:payloadData.bytes length:payloadData.length encoding:NSUTF8StringEncoding];
    }
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    if (offLine) {

    }else{
        if([payloadMsg rangeOfString:@"RValue"].length>0)
        {
            //透?jìng)髟诰€提示
            NSDictionary *dict = [payloadMsg JSONValue];
            NSString *messageCode=[[[dict objectForKey:@"RValue"] valueForKey:@"Code"]  objectAtIndex:0];
           //對(duì)messaCode類型進(jìn)行判斷,此為我們的功能需求
            [[NSNotificationCenter defaultCenter]postNotificationName:@"notificationOn" object:nil];
         }
}

因?yàn)樵诖蜷_應(yīng)用的時(shí)候币绩,之前收到的有多少條推送消息蜡秽,這個(gè)方法就走多少次府阀,所以若離線消息的處理寫到這里會(huì)連續(xù)打開多次詳情頁,用戶體驗(yàn)會(huì)很不好芽突。于是我就沒有在offLine的情況下處理试浙。
在線消息的處理是彈出一個(gè)alertView。同理在線時(shí)若同一時(shí)間段推多個(gè)也會(huì)重復(fù)彈出多個(gè)alertView,這個(gè)情況很莫名奇妙寞蚌,我還沒搞懂田巴,不過由于我們推送消息的間隔比較長(zhǎng),在線時(shí)一般不會(huì)收到多個(gè)挟秤,就暫時(shí)這樣寫了壹哺,還沒想到比較好的辦法。
以上就是我自己在做個(gè)推的時(shí)候所遇到的問題艘刚,第一次寫這么長(zhǎng)的文字管宵,條理可能不太清晰,以后得多多練習(xí)攀甚。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末箩朴,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子云稚,更是在濱河造成了極大的恐慌隧饼,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,252評(píng)論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件静陈,死亡現(xiàn)場(chǎng)離奇詭異燕雁,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)鲸拥,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,886評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門拐格,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人刑赶,你說我怎么就攤上這事捏浊。” “怎么了撞叨?”我有些...
    開封第一講書人閱讀 168,814評(píng)論 0 361
  • 文/不壞的土叔 我叫張陵金踪,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我牵敷,道長(zhǎng)胡岔,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,869評(píng)論 1 299
  • 正文 為了忘掉前任枷餐,我火速辦了婚禮靶瘸,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己屋剑,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,888評(píng)論 6 398
  • 文/花漫 我一把揭開白布诗眨。 她就那樣靜靜地躺著唉匾,像睡著了一般匠楚。 火紅的嫁衣襯著肌膚如雪肄鸽。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,475評(píng)論 1 312
  • 那天油啤,我揣著相機(jī)與錄音,去河邊找鬼蟀苛。 笑死益咬,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的帜平。 我是一名探鬼主播幽告,決...
    沈念sama閱讀 41,010評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼裆甩!你這毒婦竟也來了冗锁?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,924評(píng)論 0 277
  • 序言:老撾萬榮一對(duì)情侶失蹤嗤栓,失蹤者是張志新(化名)和其女友劉穎冻河,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體茉帅,經(jīng)...
    沈念sama閱讀 46,469評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡叨叙,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,552評(píng)論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了堪澎。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片擂错。...
    茶點(diǎn)故事閱讀 40,680評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖樱蛤,靈堂內(nèi)的尸體忽然破棺而出钮呀,到底是詐尸還是另有隱情,我是刑警寧澤昨凡,帶...
    沈念sama閱讀 36,362評(píng)論 5 351
  • 正文 年R本政府宣布爽醋,位于F島的核電站,受9級(jí)特大地震影響土匀,放射性物質(zhì)發(fā)生泄漏子房。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,037評(píng)論 3 335
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望证杭。 院中可真熱鬧田度,春花似錦、人聲如沸解愤。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,519評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽送讲。三九已至奸笤,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間哼鬓,已是汗流浹背监右。 一陣腳步聲響...
    開封第一講書人閱讀 33,621評(píng)論 1 274
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留异希,地道東北人健盒。 一個(gè)月前我還...
    沈念sama閱讀 49,099評(píng)論 3 378
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像称簿,于是被迫代替她去往敵國(guó)和親扣癣。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,691評(píng)論 2 361

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

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,310評(píng)論 25 707
  • 概述 在多數(shù)移動(dòng)應(yīng)用中任何時(shí)候都只能有一個(gè)應(yīng)用程序處于活躍狀態(tài)憨降,如果其他應(yīng)用此刻發(fā)生了一些用戶感興趣的那么通過通知...
    莫離_焱閱讀 6,519評(píng)論 1 8
  • 極光推送: 1.JPush當(dāng)前版本是1.8.2父虑,其SDK的開發(fā)除了正常的功能完善和擴(kuò)展外也緊隨蘋果官方的步伐,SD...
    Isspace閱讀 6,724評(píng)論 10 16
  • 附加題 1.一個(gè)新客人進(jìn)店(拓客卡第一次到店)授药,正確的接待流程士嚎。 答,首先進(jìn)店以后先問好烁焙,然后就是在給顧客換鞋航邢,然...
    花心偉爺閱讀 199評(píng)論 0 0
  • 不知道有多少人膳殷,分開后,仍說愛九火? 有些人赚窃,分了手,依然說著牽掛岔激,仍還表現(xiàn)關(guān)心勒极,你以為,你有多念舊虑鼎,你...
    ?小小閱讀 569評(píng)論 2 0