Skip to content

6 メッセージの未読既読管理

メッセージの未読数の取得や、特定のメッセージを強制的に既読に変更する実装例をご説明します。

6.1 メッセージの未読数を取得し、タブにバッジを表示したい

メッセージの未読数を取得する場合、PopinfoReceiver クラスのgetUnreadMessagesCounts: メソッドを利用します。

このメソッドの引数はカテゴリ名です。
カテゴリ配信をしていない場合は空文字を指定します。

// バッジを付けたい UITabBarItem を指定する
UITabBarItem *tabBarItem = [self.tabBarController.tabBar.items objectAtIndex:1];

// 未読数を取得する
int number = [[PopinfoReceiver sharedReceiver] getUnreadMessagesCounts:@""];

// 未読がある場合はタブにバッジを付ける
if (number) {
    tabBarItem.badgeValue = [NSString stringWithFormat:@"%d", number];
} else {
    tabBarItem.badgeValue = nil;
}
// バッジを付けたい UITabBarItem を指定する
let tabBarItem = self.tabBarController?.tabBar.items?[1]

// 未読数を取得する
let number = PopinfoReceiver.shared.getUnreadMessagesCounts("")

// 未読がある場合はタブにバッジを付ける
if number > 0 {
    tabBarItem?.badgeValue = "\(number)"
} else {
    tabBarItem?.badgeValue = nil
}

6.2 特定のメッセージを強制的に既読に変更したい

特定のメッセージを強制的に既読に変更する場合、PopinfoReceiver クラスのchangeMessageToRead: メソッドを利用します。

このメソッドの引数は、対象とするメッセージ ID です。

ここでは、プッシュ通知到達時に、通知されたメッセージを強制的に既読に変更する例をご紹介します。
以下のように、プッシュ通知が到達した際にコールされる PopinfoReceiver デリゲートメソッド opinfoReceiver: didReceivePopinfoMessage: popup: payload: 内に記述します。

- (void)popinfoReceiver:(PopinfoReceiver *)popinfoReceiver didReceivePopinfoMessage:(NSInteger)messageId popup:(NSString *)popup payload:(NSDictionary *)payload
{
    [[PopinfoReceiver sharedReceiver] changeMessageToRead:messageId]; 
}
func popinfoReceiver(_ popinfoReceiver: PopinfoReceiver, didReceivePopinfoMessage messageId: Int, popup: String, payload: [AnyHashable : Any]) {
    PopinfoReceiver.shared.changeMessage(toRead: messageId)
}