iOS個(gè)推推送瘫拣,推送跳轉(zhuǎn)及紅點(diǎn)角標(biāo)

最近因?yàn)楣镜臉I(yè)務(wù)需求,對推送做了相應(yīng)的修改告喊。因?yàn)橹坝玫氖菢O光的推送麸拄,對于推送也沒有太多的要求,來消息就在通知欄展示黔姜,有角標(biāo)展示即可拢切。可是因?yàn)樽罱枨笞兏殉常瑢τ谕扑托枨笠灿辛嗽敿?xì)的要求淮椰。這也讓我從新來review遍關(guān)于推送方面的知識(shí)。尤其是iOS10之后,推送的細(xì)分化主穗,有了更多的認(rèn)識(shí)泻拦。特在此做一個(gè)總結(jié)。
這里不再對原理進(jìn)行闡述黔牵。
一聪轿、遠(yuǎn)程推送
iphone在接受到遠(yuǎn)端推送的通知,打開App后猾浦,程序會(huì)運(yùn)行appDelegate的代理陆错,這里分三種狀態(tài)
1.APP在未運(yùn)行,已殺死進(jìn)程的狀態(tài)金赦,遠(yuǎn)程推送過來消息
2.APP在已運(yùn)行音瓷,但APP未在前臺(tái),就是在后臺(tái)夹抗,APP展示的不是此時(shí)的這個(gè)程序绳慎,這個(gè)時(shí)候,遠(yuǎn)程推送過來消息
3.APP已運(yùn)行漠烧,此時(shí)程序在前臺(tái)杏愤,就是我們正在玩我們的APP時(shí),遠(yuǎn)程推送過來消息
此時(shí)我們點(diǎn)擊通知欄消息后已脓,在AppDelegate.m文件中相應(yīng)的代理(代碼中對應(yīng)的是個(gè)推的一些特殊跳轉(zhuǎn)處理):
1.1下面是對應(yīng)1這種情況珊楼,app首次打開會(huì)進(jìn)入這個(gè)方法:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    //獲取 APNs(通知) 推送內(nèi)容(app未啟動(dòng)時(shí)接受推送消息)
    //推送的信息會(huì)含在launchOption的字典內(nèi),取出后度液,分析其對應(yīng)的key值
    NSDictionary *remoteDic = [launchOptions objectForKey: UIApplicationLaunchOptionsRemoteNotificationKey];
    if (remoteDic)
    {
       //這里因?yàn)閭€(gè)推平臺(tái)有一個(gè)所謂的透傳消息厕宗,從平臺(tái)推送過來和我們自己服務(wù)器搭建后臺(tái)推送的時(shí)候有所不同,所以做了處理堕担,以防止后面做跳轉(zhuǎn)崩潰
        NSString *url = nil;
        if ([remoteDic objectForKey:@"payload"])
        {
            NSString *payloadStr = [remoteDic objectForKey:@"payload"];
            NSDictionary *payload = [NSString zhGetJSONSerializationObjectFormString:payloadStr];
            url = [payload objectForKey:@"url"];
        }
        else
        {
            url = [remoteDic objectForKey:@"url"];
        }
      //這里寫自己的跳轉(zhuǎn)
        [WYUserDefaultManager setDidFinishLaunchRemoteNoti:url];
    }
}

1.2這里對應(yīng)2的情況已慢,因?yàn)閕OS10的原因所以,需要在兩個(gè)方法里都寫

//在iOS 10 以前霹购,為處理 APNs 通知點(diǎn)擊事件佑惠,統(tǒng)計(jì)有效用戶點(diǎn)擊數(shù),需在AppDelegate.m里的didReceiveRemoteNotification回調(diào)方法中調(diào)用個(gè)推SDK統(tǒng)計(jì)接口
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler {
    // 將收到的APNs信息傳給個(gè)推統(tǒng)計(jì)
    [GeTuiSdk handleRemoteNotification:userInfo];
    completionHandler(UIBackgroundFetchResultNewData);
    
    //推送后臺(tái)跳轉(zhuǎn)
    if (application.applicationState == UIApplicationStateActive) {
        NSLog(@"active");
        //程序當(dāng)前正處于前臺(tái)
    }
    else if(application.applicationState == UIApplicationStateInactive)
    {
        [GeTuiSdk setBadge:0];
        NSLog(@"inactive");
        //程序處于后臺(tái)
        [self jumpPage:userInfo];
    }
}

//  iOS 10: 點(diǎn)擊通知進(jìn)入App時(shí)觸發(fā)齐疙,在該方法內(nèi)統(tǒng)計(jì)有效用戶點(diǎn)擊數(shù)
- (void)userNotificationCenter:(UNUserNotificationCenter *)center didReceiveNotificationResponse:(UNNotificationResponse *)response withCompletionHandler:(void (^)())completionHandler {
    
    NSLog(@"didReceiveNotification:%@", response.notification.request.content.userInfo);
    // [ GTSdk ]:將收到的APNs信息傳給個(gè)推統(tǒng)計(jì)
    [GeTuiSdk handleRemoteNotification:response.notification.request.content.userInfo];
    completionHandler();
    [GeTuiSdk setBadge:0];
    //iOS10以上兢仰,點(diǎn)擊通知欄推送跳轉(zhuǎn)
    NSDictionary *dic = response.notification.request.content.userInfo;
    [self jumpPage:dic];
}

1.3第三種情況,這里要說下關(guān)于個(gè)推的透傳功能剂碴,個(gè)推的透傳功能說是為了補(bǔ)充APN的不穩(wěn)定的把将。但是在使用中,個(gè)推其實(shí)推送的到達(dá)率也并不是100%忆矛,而因?yàn)樵缙趯€(gè)推透傳功能的理解不太深入察蹲,尤其是在線和離線的消息推送请垛,走了不少坑。現(xiàn)在先說下在app開啟運(yùn)行的時(shí)候洽议,程序會(huì)運(yùn)行下面這個(gè)代理

- (void)GeTuiSdkDidReceivePayloadData:(NSData *)payloadData andTaskId:(NSString *)taskId andMsgId:(NSString *)msgId andOffLine:(BOOL)offLine fromGtAppId:(NSString *)appId {
    //收到個(gè)推消息
    NSString *payloadMsg = nil;
    if (payloadData) {
        payloadMsg = [[NSString alloc] initWithBytes:payloadData.bytes length:payloadData.length encoding:NSUTF8StringEncoding];
    }
    
    NSString *msg = [NSString stringWithFormat:@"taskId=%@,messageId:%@,payloadMsg:%@%@",taskId,msgId, payloadMsg,offLine ? @"<離線消息>" : @""];
    NSLog(@"\n>>>[GexinSdk ReceivePayload]:%@\n\n", msg);
    

    NSData *jsonData = [payloadMsg dataUsingEncoding:NSUTF8StringEncoding];
    NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingMutableContainers error:nil];
    
    NSString *type = [[dic objectForKey:@"extra"] objectForKey:@"type"];
    //不是離線消息處理   
    if (!offLine)
    {
    }
}

上面是當(dāng)app不在前臺(tái)的時(shí)候個(gè)推處于離線狀態(tài)宗收,app走APNS過來的。對于個(gè)推而言亚兄,當(dāng)點(diǎn)擊推送的通知欄混稽,打開app都會(huì)走上面的代碼,但由于app開啟后审胚,個(gè)推平臺(tái)有可能未能連接匈勋,會(huì)出現(xiàn)推送不出來,或者有時(shí)候一下好多條膳叨。所以洽洁,我對個(gè)推這個(gè)離線的隊(duì)列感到不可信。所以菲嘴,在離線的時(shí)候走APNS饿自,因此這樣寫的推送相關(guān)的代碼。

二龄坪、紅點(diǎn)昭雌,角標(biāo),通知欄
對于個(gè)推健田,角標(biāo)是由+ (void)setBadge:(NSUInteger)value這個(gè)方法來設(shè)置的城豁,而這個(gè)角標(biāo)就是在個(gè)推平臺(tái)計(jì)數(shù)的角標(biāo),所以當(dāng)使用+1的時(shí)候抄课,如果不把這個(gè)角標(biāo)設(shè)置的話,角標(biāo)都會(huì)+1的雳旅,所以當(dāng)再次來推送的時(shí)候跟磨,會(huì)在原有的基礎(chǔ)上+1,不會(huì)從0開始計(jì)數(shù)攒盈,所以抵拘,要在每個(gè)點(diǎn)擊通知欄后的代理方法里對個(gè)推的角標(biāo)設(shè)置

[GeTuiSdk setBadge:0];

而如果想把a(bǔ)pp圖標(biāo)角標(biāo)清除,需要用

[[UIApplication sharedApplication] setApplicationIconBadgeNumber:0];

但是使用這個(gè)的話型豁,通知欄也會(huì)完全清除掉僵蛛。當(dāng)然如果你需要清除所有通知欄,可以使用這個(gè)方法迎变,但是我們要求的是要保留通知欄充尉,可點(diǎn)擊app不是點(diǎn)擊通知欄的時(shí)候,角標(biāo)清除衣形。查看了許多網(wǎng)上的大家的處理方式驼侠,最后使用本地推送的折中方式來解決姿鸿。
在app進(jìn)入從后臺(tái)變?yōu)榍芭_(tái)的時(shí)候啟動(dòng)一條本地推送,并設(shè)置角標(biāo)為-1倒源,緊接著馬上取消本地推送苛预。

- (void)applicationDidBecomeActive:(UIApplication *)application {
    //設(shè)置推送紅點(diǎn)取消
    //1.設(shè)置本地推送
    UILocalNotification *localNote = [[UILocalNotification alloc] init];
    localNote.applicationIconBadgeNumber = -1;
    [[UIApplication sharedApplication] scheduleLocalNotification:localNote];
    [[UIApplication sharedApplication] cancelLocalNotification:localNote];
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市笋熬,隨后出現(xiàn)的幾起案子热某,更是在濱河造成了極大的恐慌,老刑警劉巖胳螟,帶你破解...
    沈念sama閱讀 217,657評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件昔馋,死亡現(xiàn)場離奇詭異,居然都是意外死亡旺隙,警方通過查閱死者的電腦和手機(jī)绒极,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,889評論 3 394
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來蔬捷,“玉大人垄提,你說我怎么就攤上這事≈芄眨” “怎么了铡俐?”我有些...
    開封第一講書人閱讀 164,057評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長妥粟。 經(jīng)常有香客問我审丘,道長,這世上最難降的妖魔是什么勾给? 我笑而不...
    開封第一講書人閱讀 58,509評論 1 293
  • 正文 為了忘掉前任滩报,我火速辦了婚禮,結(jié)果婚禮上播急,老公的妹妹穿的比我還像新娘脓钾。我一直安慰自己,他們只是感情好桩警,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,562評論 6 392
  • 文/花漫 我一把揭開白布可训。 她就那樣靜靜地躺著,像睡著了一般捶枢。 火紅的嫁衣襯著肌膚如雪握截。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,443評論 1 302
  • 那天烂叔,我揣著相機(jī)與錄音谨胞,去河邊找鬼。 笑死蒜鸡,一個(gè)胖子當(dāng)著我的面吹牛畜眨,可吹牛的內(nèi)容都是我干的昼牛。 我是一名探鬼主播,決...
    沈念sama閱讀 40,251評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼康聂,長吁一口氣:“原來是場噩夢啊……” “哼贰健!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起恬汁,我...
    開封第一講書人閱讀 39,129評論 0 276
  • 序言:老撾萬榮一對情侶失蹤伶椿,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后氓侧,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體脊另,經(jīng)...
    沈念sama閱讀 45,561評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,779評論 3 335
  • 正文 我和宋清朗相戀三年约巷,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了偎痛。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,902評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡独郎,死狀恐怖踩麦,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情氓癌,我是刑警寧澤谓谦,帶...
    沈念sama閱讀 35,621評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站贪婉,受9級特大地震影響反粥,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜疲迂,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,220評論 3 328
  • 文/蒙蒙 一才顿、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧尤蒿,春花似錦郑气、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,838評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽军洼。三九已至巩螃,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間匕争,已是汗流浹背避乏。 一陣腳步聲響...
    開封第一講書人閱讀 32,971評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留甘桑,地道東北人拍皮。 一個(gè)月前我還...
    沈念sama閱讀 48,025評論 2 370
  • 正文 我出身青樓歹叮,卻偏偏與公主長得像,于是被迫代替她去往敵國和親铆帽。 傳聞我的和親對象是個(gè)殘疾皇子咆耿,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,843評論 2 354

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

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,116評論 25 707
  • 極光推送: 1.JPush當(dāng)前版本是1.8.2,其SDK的開發(fā)除了正常的功能完善和擴(kuò)展外也緊隨蘋果官方的步伐爹橱,SD...
    Isspace閱讀 6,719評論 10 16
  • 許多集成的步驟個(gè)推官網(wǎng)都有了萨螺,這里只寫關(guān)于推送的遠(yuǎn)程推送和本地通知的步驟和代碼。APP在后臺(tái)時(shí):走蘋果的APNS通...
    AllureJM閱讀 2,722評論 1 9
  • 最近一段時(shí)間工作量比較大, 抽不出時(shí)間來整理博客, 趁今天任務(wù)量較小的時(shí)候整理下關(guān)于環(huán)信推送的問題, 介紹. 集成...
    imGeek閱讀 2,708評論 1 3
  • 《一》 這世上最美的遇見 你的出現(xiàn)愧驱,恰逢其時(shí) 《二》 喜歡晨光慰技,也喜歡夕陽 喜歡你的明朗,也喜歡你的憂傷 《三》 ...
    小洋妮閱讀 256評論 0 0