Skip to main content
ユーザー属性とは、ユーザーについて把握している情報のことです。年齢や性別などのデモグラフィック情報、プランなどのアカウント固有の情報、あるいはユーザーが特定の A/B テストのバリエーションを見たかどうかなどが含まれます。ユーザー属性は、顧客のライフタイム全体を通じて参照できる顧客のアイデンティティです。

ユーザーの識別

SDK バージョン 9.23.0 未満については、こちらのドキュメントを参照してください。 識別子の設定は、次の目的で重要です。
  • iOS、Android、Web などのプラットフォーム間でユーザーの行動を結び付けるため。
  • 不要なユーザーや古いユーザーが作成されないようにするため。
  • インストール/再インストールをまたいでユーザーを識別するため。

単一の識別子

以下の API を呼び出して、識別子を MoEngage SDK に渡します。
このメソッドは、非推奨となった setUniqueId() の代替です。アプリケーションで ***setUniqueId() ***を使用している場合は、identifyUser() に置き換えることを検討してください_。_

複数の識別子

アプリケーションでユーザーを識別するための識別子が複数ある場合は、以下の API を使用してすべての識別子を SDK に渡すことができます。
異なる識別子名で identifyUser() を複数回呼び出した場合、SDK はその識別子を既に設定されている識別子に追加します。
情報ユーザー識別とセッション管理を改善するため、SDK の関数が更新されています。
  • 強制ログアウト:MoEngage SDK は、デバイス上で新しいユーザーが検出された場合でも、以前のユーザーを自動的にログアウトしなくなりました。データの破損を避けるため、Identity resolution が有効なワークスペースでは、ログアウトを明示的に呼び出す必要があります。
  • SetUniqueID:IdentifyUser 関数は複数の識別子をサポートしているため、ユーザー識別に SetUniqueID 関数を使用する必要はなくなりました。SetUniqueID は今後の SDK バージョンのリリースで削除予定となっています。特にワークスペースで Identity resolution を使用している場合は、代わりに identifyUser を使用することが重要です。
  • SetAlias:Identity resolution 機能が有効なワークスペースでは、MoEngage SDK は以前の識別子の値を保存します。IdentifyUser 関数を使用して新しい識別子の値をトラッキングすると、MoEngage SDK は識別子の値の変更を検出し、それに応じてレポートします。
  • ログアウトせずに IdentifyUser 関数を呼び出した場合、既存のログイン済みユーザーの ID が更新されます。
この機能の詳細については、ヘルプドキュメントを参照してください。
ネットワークの問題により識別子が MoEngage サーバーに届かなかった場合、SDK は identifyUser() の呼び出しをキャッシュし、ネットワークが利用可能になったとき、または次回アプリを開いたときに自動的に再試行します。
詳細については、以下を参照してください。

ログアウト

アプリケーションは、ユーザーがアプリケーションからログアウトするたびに MoEngage SDK に通知する必要があります。ユーザーがアプリケーションからログアウトするたびに API を呼び出して SDK に通知してください。
  • ログアウトは非同期です。次のユーザーの識別、ユーザー属性の設定、イベントのトラッキングは、ログアウトの完了後にのみ行ってください。
  • ログアウトの処理中に送信されたデータは、失われるか誤って帰属されます。タイミングによっては、SDK がそのデータを以前のユーザーに対して記録するか、そのユーザーのデータを消去する際に破棄します。これらの呼び出しの順序を制御するには、ログアウトコールバックを使用してください。
ログアウトすると、ユーザーの属性と ID が消去され、新しいセッションで新しい匿名ユーザーが開始されます。SDK はデバイス識別子とプッシュトークンを保持するため、ログアウトによってデバイスのプッシュ登録が解除されることはありません。resetUser() は、ユーザーがログアウトしたときにのみ呼び出してください。呼び出すたびに新しい匿名ユーザーが作成され、デバイスが再登録されます。

ログアウトコールバック

ログアウトの完了時にコールバックを受け取るには、resetUser() が返すタスクを監視します。
iOS SDK 11.00.0 以降、resetUser() は Void ではなく型付きのタスクオブジェクト(MoEngageResetUserTask)を返します。結果は .onSuccess / .onFailure または非同期の result() メソッドで監視します。11.00.0 未満の SDK バージョンでは、同等の機能は resetUser(withCompletionBlock:) です。このバリアントは 11.00.0 から非推奨となり、上記の型付きタスクが推奨されます。

デフォルトのユーザー属性

メール ID、携帯電話番号、性別、ユーザー名、誕生日など、いくつかのデフォルトの SDK ユーザー属性を設定できます。SDK によってトラッキングされるデフォルト属性は、以下のように設定できます。
  • MoEngage のシステムで正しく機能させるには、ユーザーの電話番号/携帯電話番号を文字列としてトラッキングする必要があります。
  • サポートされているデータ型とデータトラッキングポリシーの詳細については、データトラッキングポリシーを参照してください。
検証ルールの完全な一覧と、DEBUG ビルドとリリースビルドでの動作の違いについては、検証と制限を参照してください。

カスタムユーザー属性

カスタム属性を設定するには、こちらに記載されているものとは異なるカスタムキーを指定するだけです。以下に例を示します。
iOS SDK 11.0.0 以降、setUserAttribute(_:withAttributeName:level:forAppID:) では、Swift の並行処理の安全性のために value パラメーターが Sendable に準拠している必要があります(Any → any Sendable)。これらの例で使用しているリテラル値(文字列、配列、およびこれらの辞書)は既に Sendable に準拠しているため、変更なしでコンパイルできます。Swift 6 言語モードまたは厳格な並行処理チェックでは、Sendable に準拠していない値を更新する必要があります。
検証ルールの完全な一覧については、検証と制限を参照してください。

JSON 属性

MoEngage-iOS-SDK v9.17.5 から、JSON および JSON の配列のユーザー属性がサポートされるようになりました。以下に例を示します。

ポートフォリオレベルのユーザー属性

前提条件
  • iOS SDK バージョン 10.07.0 以上。
  • MoEngage ワークスペースで複数のプロジェクトが構成されている必要があります。詳細については、Portfolio を参照するか、MoEngage のアカウントマネージャーにお問い合わせください。
Portfolio が有効なワークスペースでは、ユーザー属性をプロジェクトレベル(特定のプロジェクトにスコープ)またはポートフォリオレベル(ワークスペース内のすべてのプロジェクトで共有)のいずれかでトラッキングできます。

ポートフォリオレベルの属性の設定

ユーザー属性をポートフォリオレベルで設定するには、以下の API を使用します。level パラメーターには、属性を現在のプロジェクトにスコープする .project(Objective-C:MoEngageUserAttributeLevelProject)、またはポートフォリオ内のすべてのプロジェクトで共有する .portfolio(Objective-C:MoEngageUserAttributeLevelPortfolio)を指定できます。level パラメーターを省略した場合、属性はデフォルトでプロジェクトレベルになります。
ポートフォリオレベルでの一意の ID の設定はサポートされておらず、Xcode のデバッグビルドで致命的な例外が発生します。識別子の設定には、プロジェクトレベルの identifyUser API を使用してください。ユーザーの識別を参照してください。

日付と時刻のユーザー属性

日付と時刻の属性をユーザー属性として設定できます。これについては、以下のコードブロックのメソッドを参照してください。

位置属性

ユーザーの位置や任意の位置をユーザー属性として設定できます。これには setLocation(_:withAttributeName:) メソッドを使用し、次の例に示すように位置の緯度と経度の値を渡します。

検証と制限

ユーザー属性には、DEBUG ビルドとリリースビルドの両方に適用される 2 層の検証があります。
  • 命名と形式のルール — ビルド構成に関係なく常に適用されます。以下の命名と形式のルールを参照してください。
  • 型の検証 — 無効な属性値(null、カスタムモデル、NaN、Infinity、空のコレクション、NSURL、Array または Dictionary 内にネストされた Date/MoEngageGeoLocation などのサポートされていない型)は、DEBUG ビルドでは致命的な例外を引き起こし、リリースビルドではサイレントに破棄されます。以下のサポートされている属性値の型を参照してください。
iOS SDK における DEBUG モードとは、SDK が initializeDefaultTestInstance(_:)(TEST ワークスペース)を使用して初期化され、アプリが Xcode に接続された状態で実行されていることを意味します。これは、デバッグシンボルが有効になっているリリースビルドとは異なります。

命名と形式のルール

  • 属性名は空であってはなりません。 属性名として空の文字列("")を渡すと、DEBUG ビルドでは致命的な例外が発生します。リリースビルドでは、その属性は破棄されます。
  • 属性名にドット(.)を含めないでください。
  • 属性名をドル記号($)で始めないでください。
  • 予約済みのプレフィックス。 イベント、イベント属性、またはユーザー属性の名前に moe_ をプレフィックスとして使用することはできません。これはシステムのプレフィックスであり、使用すると事前の通知なしに定期的にブロックリストに登録される可能性があります。
  • 予約済みのキーワード。 ユーザー属性をトラッキングする際は、以下のキーを使用しないでください。これらは SDK およびシステム用に予約されています。
    • USER_ATTRIBUTE_UNIQUE_ID
    • USER_ATTRIBUTE_USER_EMAIL
    • USER_ATTRIBUTE_USER_MOBILE
    • USER_ATTRIBUTE_USER_NAME
    • USER_ATTRIBUTE_USER_GENDER
    • USER_ATTRIBUTE_USER_FIRST_NAME
    • USER_ATTRIBUTE_USER_LAST_NAME
    • USER_ATTRIBUTE_USER_BDAY
    • USER_ATTRIBUTE_NOTIFICATION_PREF
    • USER_ATTRIBUTE_OLD_ID
    • USER_ATTRIBUTE_DND_START_TIME
    • USER_ATTRIBUTE_DND_END_TIME
    • MOE_TIME_FORMAT
    • MOE_TIME_TIMEZONE
    • MOE_GAID
    • MOE_ISLAT
    • INSTALL
    • UPDATE
    • status
    • user_id
    • source

サポートされている属性値の型

属性値は、String、Number、Date、MoEngageGeoLocation、Dictionary、または Array(文字列または数値の配列)のいずれかである必要があります。NSURL はサポートされていないため、渡す前に文字列に変換してください。 サポートされていない値が渡された場合:
  • DEBUG ビルドでは、データの問題を早期に発見できるよう、SDK が致命的な例外をスローしてアプリをクラッシュさせます。
  • リリースビルドでは、SDK は該当する無効な属性を破棄します。ユーザーに設定された他の属性は影響を受けません。
DEBUG の例外が発生する一般的な原因:
  • null(NSNull())を渡す。
  • カスタムモデルや UI 要素(例:UIColor、UIImage)を渡す。
  • NaN や Infinity などの無効な数値を渡す。
  • 空の Array または Dictionary を渡す。
  • Array または Dictionary の中に Date または MoEngageGeoLocation オブジェクトをネストする。これらは値として直接渡す必要があります。
アップグレード中にこれらの DEBUG 検証によってアプリがクラッシュする場合は、SDK を初期化する前に MoEngageSDKCore.sharedInstance.disableIntegrationValidator() を呼び出して、一時的にオプトアウトしてください。問題が修正されたら、この呼び出しを削除してください。

サポートされていない属性値のフィルタリング

新しいバージョンの iOS SDK にアップグレードする際に、アプリが呼び出し箇所で型が検証されていない属性値を渡している場合は、setUserAttribute を呼び出す前に型チェックのガードを追加してください。これにより DEBUG でのクラッシュを防ぎ、すべてのビルドで有効なデータのみが SDK に渡されるようになります。
Date および MoEngageGeoLocation の値は、setUserAttribute:withAttributeName: ではなく、専用の setUserAttributeDate、setUserAttributeISODate、setUserAttributeEpochTime、setLocation:withAttributeName: メソッドを使用して渡す必要があります。