SMC管理画面からではなくアプリ側からメッセージを削除したい場合がありました。
アプリ側からInBoxMessageを受信した際に一定日数経過後のメッセージを削除する方法を実装しました。
環境
'MarketingCloudSDK', '6.2.3'
メッセージの削除
特定のメッセージの削除には以下のメソッドを使用します。
// メッセージを削除済みとしてマークします。
- (BOOL)sfmc_markMessageDeleted:(NSDictionary *_Nonnull)messageDictionary
// 戻り値
メッセージを削除済みに設定したことを示す値
実装
import Foundation
import MarketingCloudSDK
class ViewController: UIViewController {
private let tableView = UITableView()
private var inboxMessages = [[String: Any]]()
override func viewDidLoad() {
fetchInboxMessage(completion: { [weak self] in
self?.tableView.reloadData()
})
}
private func fetchInboxMessages(completion: (() -> Void)? = nil) {
guard let messages = MarketingCloudSDK.sharedInstance().sfmc_getAllMessages() as? [[String: Any]] else { return }
let filterMessages = messages.filter { message -> Bool in
guard let sendDate = message["sendDateUtc"] as? Date,
let elapsedDays = Calendar.current.dateComponents([.day], from: sendDate, to: Date()).day else { return false }
// 受信日から30日後にメッセージを削除
guard elapsedDays < 30 else {
return !MarketingCloudSDK.sharedInstance().sfmc_markMessageDeleted(message)
}
return true
}
self.inboxMessages = filterMessages
completion?()
}
}
InboxMessageの構造
送信日以外にも条件を追加できます。
{
subject = inboxSubject; // inboxの件名
statusDirty = 2;
url = "https://hoge.com";
id = 12345678910; // someID
read = 0; // 未読・既読状態
startDateUtc = "2019-03-25 15:50:00 +0000"; // 開始日?
sendDateUtc = "2019-03-25 15:51:00 +0000"; // 送信日時
requestId = 12345678910; // someID
sound = default;
contentType = 2;
name = some name; // 管理画面上で設定。
alert = "Inbox Alert"; // 管理画面上で設定。
endDateUtc = "2020-11-11 08:11:00 +0000";
deleted = 0;
messageHash = 12345678910; // someID
messageDeleted = 0 // メッセージの削除状態
}
補足
受信時に削除する場合、配列の範囲外エラーになる可能性があるので、メッセージを受信後にViewの更新をするのがポイントかもです。
少しでも参考になれば幸いです😌