1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【Salesforce】InBoxMessage受信後、一定日数経過後にメッセージを削除する方法

Last updated at Posted at 2020-08-17

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の更新をするのがポイントかもです。

少しでも参考になれば幸いです😌

参考

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?