In-App Messagingとは
ユーザがアプリのプッシュ通知を許可していなくてもユーザにメッセージを配信できるアプリ内メッセージのことです。
アプリがフォアグラウンドの状態になる度にアプリ内メッセージが読み込まれ、SMCで作成したメッセージが、アプリのビュースタックの最上部に表示されます。(閉じたメッセージは再度表示されません)
メッセージのテンプレートは以下3つがあります
・フルページ
レイアウトが画面全体に表示される
・バナー
画面最下部または最上部に表示される
・モーダル
画面の一部に全面表示される
上記3つともSMCのContent Builderで設定可能です。
また色や、画像の配置、フォントサイズなどカスタマイズ可能になっています。
※文字のフォントに関してはデバイスのシステムフォントを使用しているため、アプリ側のフォント上書きの実装が必要です。
通知するにはJourneyBuilderからアプリ内メッセージの送信が必要です。
#実装
以下、公式ドキュメントから参照となります。
1.アプリ内メッセージング機能をViewControllerにデリゲートするためにsfmc_setEventDelegate
メソッドを使用を使用する
// クラス宣言のMarketingCloudSDKEventDelegateプロトコルに従います。
class MyViewController: UIViewController, MarketingCloudSDKEventDelegate
...
// 実装のどこかで、アプリ内メッセージイベントのためのSDKのデリゲートとしてクラスを設定します。
// 可能であれば、クラスの初期化の早い段階で行う必要があります。
MarketingCloudSDK.sharedInstance().sfmc_setEventDelegate(self)
2.ビューの表示や削除に対応するデリゲートメソッドを追加する
func sfmc_didShow(inAppMessage message: [AnyHashable : Any]) {
// message shown
}
func sfmc_didClose(inAppMessage message: [AnyHashable : Any]) {
// message closed
}
3.アプリ内メッセージの表示を遅延させたり、防止したりすることができる。例えば、ロード中、インストラクション中、サインインフロー中などにアプリ内メッセージが表示されないようにする。メッセージの表示を防ぐには、shouldShowInAppMessage
メソッドをfalseを返すようにする。
func sfmc_shouldShow(inAppMessage message: [AnyHashable : Any]) -> Bool {
// メッセージを表示するタイミングなどのロジックを書く
if (self.messageCanBeShown) {
return true
}
else {
// メッセージデータを取得するできる
self.showMessageId = self.sdk.sfmc_messageId(forMessage: message)
}
return false
}
4.メッセージデータを取得(sfmc_messageIdForMessage
)して、後から表示(sfmc_showInAppMessage
)することが可能
if (self.showMessageId != nil) {
MarketingCloudSDK.sharedInstance().sfmc_show(inAppMessage: self.showMessageId)
}
5.アプリ内メッセージのフォントを変更するなら以下のデリゲートメソッドを使用し、デバイスにインストールされているフォントまたはアプリのカスタムフォントの有効なフォント名をSDKに渡す。
MarketingCloudSDK.sharedInstance().sfmc_set(inAppMessageFontName: "Zapfino")