Discuz iOS應(yīng)用開發(fā) (bigApp iOS源碼分析 - 消息系統(tǒng))

關(guān)于站內(nèi)消息的頁(yè)面


站內(nèi)消息.png

這個(gè)頁(yè)面的功能,從代碼角度上來(lái)看历恐,并沒有完成。

  • 上圖上部4個(gè)按鈕的操作代碼并沒有實(shí)現(xiàn)专筷。
 - (IBAction)topButtonClick:(id)sender
{
    if (sender) {
        if (sender == _btn_tiezi || [sender tag] == 1001) {
            //帖子消息
        }
        else if (sender == _btn_tanyou || [sender tag] == 1002) {
            //壇友互動(dòng)            
        }
        else if (sender == _btn_tanyou || [sender tag] == 1003) {
            //系統(tǒng)提醒
        }
        else if (sender == _btn_gonggong || [sender tag] == 1004) {
            //公共消息
        }
    }
}

相關(guān)的實(shí)現(xiàn)是空的弱贼。

  • badge的變化也沒有實(shí)現(xiàn)。
    另外有一個(gè)名為DialogListViewController的VC磷蛹,有一部分相關(guān)的站內(nèi)信息的相關(guān)操作哮洽,包括數(shù)據(jù)查詢以及badge的更新。但這個(gè)VC沒有任何地方調(diào)用弦聂。

因?yàn)橐院笮枰肑Push來(lái)實(shí)現(xiàn)消息的推送鸟辅。所以這一部分需要更多的設(shè)計(jì)與考慮。

暫時(shí)就調(diào)查這些莺葫。

6.03 更新
來(lái)看看網(wǎng)頁(yè)版的消息界面匪凉,有消息,我的帖子捺檬,壇友互動(dòng)再层,以及系統(tǒng)提醒。


網(wǎng)頁(yè)版消息的界面.png

現(xiàn)在的狀態(tài)是:
手機(jī)iOS上的四個(gè)按鈕:
帖子消息:應(yīng)該對(duì)應(yīng)我的帖子
壇友互動(dòng):對(duì)應(yīng)壇友互動(dòng)
系統(tǒng)提醒:對(duì)應(yīng)系統(tǒng)提醒堡纬。
公共消息:暫時(shí)不知道對(duì)應(yīng)哪些聂受。

而手機(jī)上TableView顯示的消息對(duì)應(yīng)的是論壇的消息。
現(xiàn)在iOS上部4個(gè)按鈕的功能都無(wú)法實(shí)現(xiàn)烤镐,原因如下:

  1. iOS部分沒有實(shí)現(xiàn)相關(guān)的API去得到這些信息蛋济。
  2. BigApp插件也沒有提供相應(yīng)的php api。

消息部分有相關(guān)的代碼

  1. BigApp插件提供了checknewpm.php API
  2. 對(duì)應(yīng)這個(gè)API炮叶,iOS實(shí)現(xiàn)中有checkNewMessageComeWithResultBlock函數(shù)去查詢碗旅。

該函數(shù)僅通知有幾個(gè)新用戶發(fā)送消息給你渡处,并不提供有幾條新消息發(fā)送給你。

需要知道有多少條新消息祟辟,需要調(diào)用request_DialogListWithResultBlock函數(shù)去調(diào)用mypm.php去得到所有的消息列表医瘫,然后再發(fā)現(xiàn)每一個(gè)用戶發(fā)給你的新消息個(gè)數(shù)。

現(xiàn)在消息更新的機(jī)制是這樣的
在MainViewController中旧困,定義了一個(gè)計(jì)時(shí)器醇份,每60秒會(huì)觸發(fā)一次,調(diào)用:

- (void)doCheckIfHasNewMessage
{
    [[Clan_NetAPIManager sharedManager] checkNewMessageComeWithResultBlock:^(id data, NSError *error) {
        if (!error) {
            NSNumber *results = [data valueForKey:@"newpm"];
            if (!isNull(results) && results.intValue >= 1) {
                //有新消息
                [[NSUserDefaults standardUserDefaults] setObject:results forKey:@"KNEWS_MESSAGE"];
                [[NSNotificationCenter defaultCenter] postNotificationName:@"KNEWS_MESSAGE_COME" object:nil];
            } else {
                //無(wú)新消息
                [[NSUserDefaults standardUserDefaults] setObject:[NSNumber numberWithInt:0] forKey:@"KNEWS_MESSAGE"];
                [[NSNotificationCenter defaultCenter] postNotificationName:@"KNEWS_MESSAGE_COME" object:nil];
            }
        } else {
            
        }
    }];
}

消息個(gè)數(shù)會(huì)保存在@"KNEWS_MESSAGE"的鍵值中吼具。同是發(fā)送一個(gè)@"KNEWS_MESSAGE_COME"的通知僚纷。MainViewController會(huì)監(jiān)聽這個(gè)通知,并更新Tabbar的Badge標(biāo)記個(gè)數(shù)馍悟。

當(dāng)點(diǎn)擊用戶的消息之后畔濒,會(huì)彈出用戶的消息列表剩晴,此時(shí)锣咒,會(huì)更新Discuz數(shù)據(jù)庫(kù),告知該消息被閱讀(不知道這一步怎么實(shí)現(xiàn)的赞弥?)毅整,也就是說(shuō),下一次消息輪詢時(shí)绽左,消息的個(gè)數(shù)變0悼嫉。然后監(jiān)聽器處罰,然后更新Tabbar的Badge標(biāo)記個(gè)數(shù)拼窥。

新的方案:
取消定時(shí)器的消息輪詢戏蔑,當(dāng)接到推送時(shí),再去進(jìn)行消息查詢鲁纠。
因此需要在App打開狀態(tài)总棵,后臺(tái)狀態(tài)以及關(guān)閉狀態(tài)接到推送時(shí),進(jìn)行消息查詢改含。

通知及監(jiān)聽系統(tǒng)保留情龄,不過(guò)直接用直接用request_DialogListWithResultBlock獲取新消息個(gè)數(shù),Tabbar顯示新消息個(gè)數(shù)捍壤。
消息列表中骤视,每個(gè)Cell顯示當(dāng)前用戶的新消息個(gè)數(shù)。
當(dāng)點(diǎn)擊Cell是鹃觉,需要更新當(dāng)前Cell的新消息個(gè)數(shù)以及Tabbar的消息個(gè)數(shù)专酗。

關(guān)于JPush的Alias
使用uid作為JPush的Alias,每當(dāng)用戶登錄時(shí)盗扇,設(shè)置Alias笼裳,具體的在

+ (void)saveToLocal
{
    NSData *date = [NSKeyedArchiver archivedDataWithRootObject:[UserModel currentUserInfo]];
    [[NSUserDefaults standardUserDefaults] setObject:date forKey:kKEY_CURRENT_USER];
    
    if ([UserModel currentUserInfo].logined &&
        [UserModel currentUserInfo].uid != nil &&
        [[UserModel currentUserInfo].uid isEqualToString:@""]) {
        [JPUSHService setAlias:[UserModel currentUserInfo].uid callbackSelector:@selector(tagsAliasCallback:tags:alias:) object:self];
    } else {
        [JPUSHService setAlias:@"" callbackSelector:@selector(tagsAliasCallback:tags:alias:) object:self];
    }
}

大概就是登錄狀態(tài)唯卖,設(shè)置uid為JPush的alias,否則把Alias設(shè)置為空字符串躬柬。

關(guān)于JPush的Badge
服務(wù)器端采用Badge+1策略拜轨。
目前涉及到消息和好友邀請(qǐng)兩種類型的推送,但JPush僅支持一個(gè)總數(shù)允青。因此App Badge顯示為兩個(gè)推送的總和橄碾。
站內(nèi)信Tabbar顯示消息的Badge
我的Tabbar顯示好友的Badge

當(dāng)這些消息被閱讀后,再重新設(shè)置對(duì)應(yīng)的Tabbar的Badge颠锉,App的Badge法牲,同是更新JPush的Badge值。

在具體實(shí)現(xiàn)的過(guò)程中的問(wèn)題:

  1. Discuz編碼和插件編碼的問(wèn)題琼掠。一定要統(tǒng)一拒垃,我們最終確定用中文簡(jiǎn)體UTF8。如果混了瓷蛙,或者自己轉(zhuǎn)換過(guò)編碼悼瓮,有可能會(huì)像我一樣遇到各種莫名其妙的問(wèn)題。

  2. Discuz針對(duì)消息艰猬,僅能獲得有多少個(gè)用戶向你發(fā)送了新消息横堡,而不能獲得某一個(gè)用戶發(fā)給你多少條新消息。因此冠桃,Badge的顯示是一個(gè)用戶顯示為一條新消息 (而不管他發(fā)給你多少條新消息)命贴。這就使的Badge+1的策略不能實(shí)行。

  3. 之前提到過(guò)的食听,好友邀請(qǐng)的Badge和消息的Badge分開胸蛛,而JPush僅有一個(gè)全局的。

  4. 內(nèi)部調(diào)用Http Request詢問(wèn)多少條新消息樱报,有時(shí)會(huì)失敗葬项。

  5. 因此這個(gè)Badge的顯示,有時(shí)候是不正確的肃弟。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末玷室,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子笤受,更是在濱河造成了極大的恐慌穷缤,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,294評(píng)論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件箩兽,死亡現(xiàn)場(chǎng)離奇詭異津肛,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)汗贫,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,493評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門身坐,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)秸脱,“玉大人,你說(shuō)我怎么就攤上這事部蛇√剑” “怎么了?”我有些...
    開封第一講書人閱讀 157,790評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵涯鲁,是天一觀的道長(zhǎng)巷查。 經(jīng)常有香客問(wèn)我,道長(zhǎng)抹腿,這世上最難降的妖魔是什么岛请? 我笑而不...
    開封第一講書人閱讀 56,595評(píng)論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮警绩,結(jié)果婚禮上崇败,老公的妹妹穿的比我還像新娘。我一直安慰自己肩祥,他們只是感情好后室,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,718評(píng)論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著搭幻,像睡著了一般咧擂。 火紅的嫁衣襯著肌膚如雪逞盆。 梳的紋絲不亂的頭發(fā)上檀蹋,一...
    開封第一講書人閱讀 49,906評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音云芦,去河邊找鬼俯逾。 笑死,一個(gè)胖子當(dāng)著我的面吹牛舅逸,可吹牛的內(nèi)容都是我干的桌肴。 我是一名探鬼主播,決...
    沈念sama閱讀 39,053評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼琉历,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼坠七!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起旗笔,我...
    開封第一講書人閱讀 37,797評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤彪置,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后蝇恶,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體拳魁,經(jīng)...
    沈念sama閱讀 44,250評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,570評(píng)論 2 327
  • 正文 我和宋清朗相戀三年撮弧,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了潘懊。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片姚糊。...
    茶點(diǎn)故事閱讀 38,711評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖授舟,靈堂內(nèi)的尸體忽然破棺而出救恨,到底是詐尸還是另有隱情,我是刑警寧澤释树,帶...
    沈念sama閱讀 34,388評(píng)論 4 332
  • 正文 年R本政府宣布忿薇,位于F島的核電站,受9級(jí)特大地震影響躏哩,放射性物質(zhì)發(fā)生泄漏署浩。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,018評(píng)論 3 316
  • 文/蒙蒙 一扫尺、第九天 我趴在偏房一處隱蔽的房頂上張望筋栋。 院中可真熱鬧,春花似錦正驻、人聲如沸弊攘。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,796評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)襟交。三九已至,卻和暖如春伤靠,著一層夾襖步出監(jiān)牢的瞬間捣域,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,023評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工宴合, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留焕梅,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,461評(píng)論 2 360
  • 正文 我出身青樓卦洽,卻偏偏與公主長(zhǎng)得像贞言,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子阀蒂,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,595評(píng)論 2 350

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

  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫(kù)该窗、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 12,066評(píng)論 4 62
  • 好像很長(zhǎng)時(shí)間沒有寫了,有時(shí)候感覺沒什么可寫的争便,因?yàn)槎际且恍┝闼榈募读悖⒙涞模怀善碌南敕ǘ选S行╇s亂無(wú)章奏纪,又似喃...
    夢(mèng)夕夢(mèng)閱讀 212評(píng)論 4 6
  • A題棋盤問(wèn)題鉴嗤,簡(jiǎn)單的遞歸問(wèn)題,1A序调,速度上還是可以加快的醉锅。B題Dungeon Master,簡(jiǎn)單的三維BFS发绢,1A...
    簡(jiǎn)為2016閱讀 322評(píng)論 0 1
  • 車窗外飄過(guò)楊柳的倩影硬耍,轉(zhuǎn)眼間已然一生。 一葉落而天下秋边酒。 要做那秋日里的楓葉经柴,悄然離去,無(wú)聲無(wú)息墩朦,或隨風(fēng)飄起坯认,落入...
    采香行處蹙連錢閱讀 241評(píng)論 0 0
  • 【20170925晚餐】晚餐老爸做的 下午妹開車接我回新村,吃完老爸做的豐盛晚餐氓涣,妹夫開車送我和妹去時(shí)代廣場(chǎng)參加中...
    122182c44b49閱讀 203評(píng)論 0 0