Logo Site EngageLab Mark Colored Transparent
文件

iOS SDK API

SDK 介面說明

  1. MTMAService,包含 SDK 所有介面。
  2. MTMAConfig,應用設定資訊類。
  3. MTMAInitResult,SDK 初始化結果類。
  4. MTMAUserID,使用者識別模型。
  5. MTMAUserContact, 使用者聯絡方式模型。
  6. MTMACollectControl, 資料蒐集控制模型。

啟動 MA 業務功能

支援的版本

開始支援的版本: 5.0.0

email、phone 識別開始支援的版本:5.5.0

獨立初始化開始支援的版本: 5.5.0

資料蒐集開關設定開始支援的版本:5.5.1,見 資料蒐集開關。

介面定義

  • + (void)start:(MTMAConfig * )config;
    • 介面說明:
      • 啟用 EngageLab MA 功能。
      • start 介面是其他介面的開始介面,所以必須先呼叫 start 介面,才能呼叫其他介面
      • 獨立版必須設定 MA AppKey,初始化不依賴 AppPush 的註冊結果。
      • 同一個 App 處理程序內可以重複初始化或切換 MA AppKey,無需重啟 App。每次有效呼叫都會單獨執行並回呼,不會合併。
      • start: 與 identifyAccount: 按呼叫順序執行,前一次呼叫及其回呼結束後,才執行下一次。排隊期間修改原設定物件,不影響已提交的初始化參數。
      • MA AppKey 的切換在該次初始化開始執行時生效,排隊期間不改變目前專案或身分。
      • 每次初始化都需要聯網確認使用者身分,請以本次回呼的 EUID 為準。裝置離線時等待網路恢復後繼續,後續呼叫按順序等待;失敗結果見 錯誤碼。
    • 參數說明
      • config 設定類

呼叫範例

MTMAConfig *config = [[MTMAConfig alloc] init]; config.appKey = @"你的 MA AppKey"; config.resultCompletion = ^(MTMAInitResult *result) { if (result.isSuccess) { NSLog(@"MTMA 初始化成功"); } else { NSLog(@"MTMA 初始化失敗,code=%ld,message=%@", (long)result.code, result.message); } }; [MTMAService start:config];
              
                  MTMAConfig *config = [[MTMAConfig alloc] init];
    config.appKey = @"你的 MA AppKey";
    config.resultCompletion = ^(MTMAInitResult *result) {
        if (result.isSuccess) {
            NSLog(@"MTMA 初始化成功");
        } else {
            NSLog(@"MTMA 初始化失敗,code=%ld,message=%@", (long)result.code, result.message);
        }
    };
    [MTMAService start:config];

            
此代碼塊在浮窗中顯示

設定使用者聯絡方式

支援的版本

開始支援的版本: 5.0.0

介面定義

  • + (void)setUserContact:(MTMAUserContact * )contact;
    • 介面說明:
      • 設定使用者聯絡方式
    • 參數說明
      • contacts:設定多個聯絡方式,目前支援 email、mobile_phone、landline_phone、whatsapp_phone。Key 必須為長度 1~256 的字串;value 必須為字串,"" 表示清空該聯絡方式,非空但全是空白的字串無效

呼叫範例

MTMAUserContact *contact = [[MTMAUserContact alloc] init]; contact.contacts = @{@"mobile_phone":@"13*********"}; contact.completion = ^(NSInteger code, NSString * _Nonnull message) { }; [MTMAService setUserContact:contact];
              
                  MTMAUserContact *contact = [[MTMAUserContact alloc] init];
    contact.contacts = @{@"mobile_phone":@"13*********"};
    contact.completion = ^(NSInteger code, NSString * _Nonnull message) { };
    [MTMAService setUserContact:contact];

            
此代碼塊在浮窗中顯示

事件上報

支援的版本

開始支援的版本: 5.0.0

介面定義

  • **+ (void)eventRecord:(MTMAEventObject )event;*
    • 介面說明:
      • 上報事件
    • 參數說明
      • 上報事件模型
      • eventName:上報的事件名稱
      • property:事件屬性,Key為屬性名稱,value為屬性值

呼叫範例

MTMAEventObject *object = [[MTMAEventObject alloc] init]; object.eventName = @"sndefineevent2"; object.property = @{ @"key1":@"value1", @"key2":@"value2", }; [MTMAService eventRecord:object];
              
                  MTMAEventObject *object = [[MTMAEventObject alloc] init];
    object.eventName = @"sndefineevent2";
    object.property = @{
        @"key1":@"value1",
        @"key2":@"value2",
    };
    [MTMAService eventRecord:object];

            
此代碼塊在浮窗中顯示

設定使用者識別

支援的版本

開始支援的版本: 5.0.0

email、phone 識別開始支援的版本:5.5.0

介面定義

  • + (void)identifyAccount:(MTMAUserID * )userID;
    • 介面說明:
      • 設定使用者識別
    • 參數說明
      • 使用者識別模型
      • userID:將唯一的登入使用者識別設定在此
      • anonymousID:當使用者未登入,但提供了其他可作為識別的資訊時,可將其設定為匿名ID,如電子郵件地址、第三方生成的識別ID
      • email:使用者的電子郵件地址,用於識別使用者身分
      • phone:使用者的手機號碼,需包含國家或地區代碼,如 +8613800000000
      • 至少提供一個有效識別,無需全部填寫。詳細要求見本文 使用者識別的類型、長度和格式說明

呼叫範例

MTMAUserID *userid = [[MTMAUserID alloc] init]; userid.userID = @"member_10001"; userid.anonymousID = @"anonymous_10001"; userid.email = @"member_10001@example.com"; userid.phone = @"+8613800000000"; userid.completion = ^(NSInteger code, NSString *message) { NSLog(@"result:%ld - %@", code, message); }; [MTMAService identifyAccount:userid];
              
                  MTMAUserID *userid = [[MTMAUserID alloc] init];
    userid.userID = @"member_10001";
    userid.anonymousID = @"anonymous_10001";
    userid.email = @"member_10001@example.com";
    userid.phone = @"+8613800000000";
    userid.completion = ^(NSInteger code, NSString *message) {
        NSLog(@"result:%ld - %@", code, message);
    };
    [MTMAService identifyAccount:userid];

            
此代碼塊在浮窗中顯示

email、phone 在這裡用於使用者身分比對,可能回傳新的 EUID,與 setUserContact: 設定的聯絡方式不能互相替代。

回呼 code=0 表示已取得可用 EUID,不代表所有識別都設定成功。message 中的 JSON 包含本地和伺服器端的逐項結果,key 為 user_id、anonymous_id、email、phone。請按對應欄位的 code 判斷結果,缺少欄位不代表成功。

伺服器端未提供逐項結果時,message 僅含本地拒絕結果;無本地拒絕時為 success。失敗 message 不保證是 JSON。逐項錯誤碼見 使用者識別逐項結果。

例如:

code=0 message={"email":{"code":0},"phone":{"code":3003,"msg":"使用者識別值超過限定長度"}}
              
              code=0
message={"email":{"code":0},"phone":{"code":3003,"msg":"使用者識別值超過限定長度"}}

            
此代碼塊在浮窗中顯示

設定通道聯絡ID

支援的版本

開始支援的版本: 5.5.0

介面定義

  • **+ (void)setChannelValueWithChannelId:(NSInteger)channelId values:(NSArray<NSString *> )values completion:(void (^)(NSInteger code, NSString message))completion;
    • 介面說明:
      • 為第三方 Push 通道設定 RID 或 Token
      • EngageLab AppPush 的通道關係由 SDK 自動處理,不需要呼叫該介面設定
      • 未集成 AppPush 或 AppPush 註冊失敗,不影響 MA 其他功能使用
      • 連續呼叫時,SDK 按呼叫順序依次請求,並分別回呼結果
      • 排隊期間 MA AppKey、專案或身分發生變化時,對應請求回傳 -2
    • 參數說明
      • channelId:MA 控制台中的第三方 Push 通道 ID,必須大於 0
      • values:目前通道的 RID 或 Token 陣列。SDK 去除每個值的首尾空白後傳送,陣列及裁剪後的元素均不能為空
      • completion:請求結果回呼,code 為 0 表示成功

呼叫範例

[MTMAService setChannelValueWithChannelId:136 values:@[@"第三方 Push RID 或 Token"] completion:^(NSInteger code, NSString *message) { }];
              
                  [MTMAService setChannelValueWithChannelId:136
                                       values:@[@"第三方 Push RID 或 Token"]
                                   completion:^(NSInteger code, NSString *message) {
    }];

            
此代碼塊在浮窗中顯示

設定上報資料間隔

支援的版本

開始支援的版本: 5.0.0

介面定義

  • + (void)setReportInterval:(NSInteger)interval;
    • 介面說明:
      • 設定上報資料間隔,不呼叫該介面時,預設為 10s 上報一次事件資料
      • 上報間隔記憶體快取,需要在應用程式每次生命週期中呼叫才會生效
    • 參數說明
      • interval 上報間隔,單位 s(秒)

呼叫範例

[MTMAService setReportInterval:10];
              
                  [MTMAService setReportInterval:10];

            
此代碼塊在浮窗中顯示

設定事件快取上限條數

支援的版本

開始支援的版本: 5.0.0

介面定義

  • + (void)setMaxEventCacheCount:(NSInteger)count;
    • 介面說明:
      • 設定事件快取上限條數,預設 50 條,最高不能超過 500 條
      • 當超出快取數量時會上報全部資料
    • 參數說明
      • count 事件快取條數上限

呼叫範例

[MTMAService setMaxEventCacheCount:50];
              
                  [MTMAService setMaxEventCacheCount:50];

            
此代碼塊在浮窗中顯示

設定工作階段逾時時間

支援的版本

開始支援的版本: 5.0.0

介面定義

  • + (void)setNoActiveSessionEndDurationTime:(NSInteger)interval;
    • 介面說明:
      • 設定工作階段逾時時間,預設 30 分鐘
      • App 切換到背景,工作階段開始逾時計時,逾時時間內沒有活動,就結束目前工作階段
    • 參數說明
      • interval 逾時時長,單位s(秒)

呼叫範例

[MTMAService setNoActiveSessionEndDurationTime:50];
              
                  [MTMAService setNoActiveSessionEndDurationTime:50];

            
此代碼塊在浮窗中顯示

取得 EUID

支援的版本

開始支援的版本: 5.0.0

介面定義

  • + (nullable NSString * )EUID;
    • 介面說明:
      • 取得 EngageLab MA 的 EUID
      • SDK 未初始化成功時回傳 nil

呼叫範例

[MTMAService EUID];
              
                  [MTMAService EUID];

            
此代碼塊在浮窗中顯示

設定 UTM 屬性

支援的版本

開始支援的版本: 5.0.0

介面定義

  • + (void)setUtmProperties:(NSDictionary * )property;
    • 介面說明:
      • UTM 屬性為標準事件屬性,若開發者能識別使用者是從哪一個廣告跳轉訪問 App ,建議設定 UTM 資訊,我們將在事件上報時傳遞該參數。目前能夠設定 UTM 屬性為:
        • utm_source 廣告系列來源
        • utm_medium 廣告系列媒介
        • utm_term 廣告系列字詞
        • utm_content 廣告系列內容
        • utm_campaign 廣告系列名稱
        • utm_id 廣告系列ID

呼叫範例

[MTMAService setUtmProperties:@{@"utm_source":@"value"}];
              
                  [MTMAService setUtmProperties:@{@"utm_source":@"value"}];

            
此代碼塊在浮窗中顯示

設定使用者屬性

覆蓋更新使用者屬性

  • + (void)setProperty:(NSDictionary * )userinfo completion:(void (^)(NSInteger code, NSString * message))completion;
    • 介面說明:
      • 批量設定使用者屬性;一次最多 100 個。任意一個屬性在 SDK 驗證失敗時,整批請求都不會傳送。
      • 屬性名必須是 NSString:以小寫字母開頭,只能包含小寫字母、數字、底線,最長 50 個 UTF-8 位元組,且不能以 el、engagelab、metaverse 開頭。
      • Value 支援 NSString、有限數值 NSNumber、字串 NSSet/NSArray、NSDictionary(object)和 NSArray<NSDictionary *>(object_array)。
      • 普通類型已存在時覆蓋,不存在時建立;object 使用子欄位合併語義;object_array 使用整體替換語義並保持陣列順序。
    • 呼叫範例:
[MTMAService setProperty:@{ @"level": @"gold", @"profile": @{ @"city": @"Singapore", @"score": @100 }, @"addresses": @[ @{ @"id": @"home", @"city": @"Singapore" }, @{ @"id": @"office", @"city": @"Tokyo" } ] } completion:^(NSInteger code, NSString * _Nonnull message) { // code == 0 表示伺服器端處理成功 }];
              
                 [MTMAService setProperty:@{
       @"level": @"gold",
       @"profile": @{ @"city": @"Singapore", @"score": @100 },
       @"addresses": @[
           @{ @"id": @"home", @"city": @"Singapore" },
           @{ @"id": @"office", @"city": @"Tokyo" }
       ]
   } completion:^(NSInteger code, NSString * _Nonnull message) {
       // code == 0 表示伺服器端處理成功
   }];

            
此代碼塊在浮窗中顯示
  • + (void)setProperty:(NSString * )key to:(id)value completion:(void (^)(NSInteger code, NSString * message))completion;
    • 介面說明:
      • 設定使用者的單個使用者屬性的內容。
      • 屬性名、Value 類型和更新語義與批量介面完全一致。
    • 呼叫範例:
[MTMAService setProperty:@"profile" to:@{ @"city": @"Singapore", @"score": @100 } completion:^(NSInteger code, NSString * _Nonnull message) { }];
              
                 [MTMAService setProperty:@"profile"
                         to:@{ @"city": @"Singapore", @"score": @100 }
                 completion:^(NSInteger code, NSString * _Nonnull message) {
   }];

            
此代碼塊在浮窗中顯示

object / object_array 規則

  • object 必須是非空 NSDictionary。子欄位名必須是非空 NSString,不能包含 . 或 $。
  • object 子欄位值支援 NSString、有限數值 NSNumber、字串 NSSet/NSArray 和 NSNull;不支援繼續巢狀嵌入 object 或 object_array。
  • 再次對 object 呼叫 setProperty 時,只合併本次傳入的子欄位;未傳子欄位保持不變。子欄位值傳 NSNull 表示移除該子欄位。
  • object_array 必須是 NSArray<NSDictionary *>;每個物件都必須非空,並遵守相同的子欄位規則。再次呼叫 setProperty 會整體替換陣列。
  • object_array 的每個元素必須至少保留一個非 NSNull 子欄位,不能傳入所有子欄位值均為 NSNull 的物件。
  • 空陣列可用於清空一個已經存在的陣列屬性,但首次建立時無法僅根據空陣列區分字串列表和 object_array;首次建立 object_array 請傳非空物件陣列。
  • NSNull 只允許作為 object/object_array 的子欄位值。不能用頂層 NSNull 刪除完整屬性;刪除完整屬性請呼叫 deleteProperty:completion:。

object 局部更新和移除子欄位範例:

// 只更新 profile.score,profile.city 保持不變 [MTMAService setProperty:@"profile" to:@{ @"score": @200 } completion:completion]; // 只移除 profile.city [MTMAService setProperty:@"profile" to:@{ @"city": NSNull.null } completion:completion];
              
              // 只更新 profile.score,profile.city 保持不變
[MTMAService setProperty:@"profile"
                      to:@{ @"score": @200 }
              completion:completion];

// 只移除 profile.city
[MTMAService setProperty:@"profile"
                      to:@{ @"city": NSNull.null }
              completion:completion];

            
此代碼塊在浮窗中顯示

局部更新 object_array 元素

開始支援的版本:5.5.0

  • **+ (void)updateObjectArrayProperty:(NSString *)key identifierKey:(NSString )identifierKey identifierValue:(id)identifierValue values:(NSDictionary<NSString *, id> )values completion:(void (^)(NSInteger code, NSString * message))completion;
    • 介面說明:
      • 在 object_array 中透過唯一子欄位定位一個物件,然後合併 values 中的子欄位。
      • identifierKey 對應的子欄位必須已經在伺服器端中繼資料中定義,類型只能是 string 或 number;identifierValue 必須是相同類型的 NSString 或非布林、有限數值 NSNumber,並且在目前陣列中只能比對一項。
      • values 必須是非空字典,不能包含 identifierKey,也不能巢狀嵌入 object/object_array。未傳欄位保持不變;值傳 NSNull 時移除該子欄位。
      • 該屬性必須已經在伺服器端中繼資料中定義為 object_array,且目前使用者已有該屬性值。首次建立可用 setProperty:to: 傳入非空物件陣列。
      • 屬性尚未定義,或已定義但目前使用者還沒有值時,伺服器端回傳 code=0 但不產生修改。code=0 僅表示請求處理成功,應透過 MA 控制台或伺服器端使用者屬性確認實際修改結果。
      • 已有陣列但沒有比對項、比對多項、識別欄位類型不一致或子欄位不符合中繼資料定義時,由伺服器端回傳失敗碼,不會建立或修改其他元素。
    • 呼叫範例:
// id == home 的物件:把 city 更新為 Tokyo,同時移除 zip [MTMAService updateObjectArrayProperty:@"addresses" identifierKey:@"id" identifierValue:@"home" values:@{ @"city": @"Tokyo", @"zip": NSNull.null } completion:^(NSInteger code, NSString *message) { }];
              
              // id == home 的物件:把 city 更新為 Tokyo,同時移除 zip
[MTMAService updateObjectArrayProperty:@"addresses"
                         identifierKey:@"id"
                       identifierValue:@"home"
                                values:@{
                                    @"city": @"Tokyo",
                                    @"zip": NSNull.null
                                }
                            completion:^(NSInteger code,
                                         NSString *message) {
}];

            
此代碼塊在浮窗中顯示

追加 object_array 元素

開始支援的版本:5.5.0

  • **+ (void)addObjectArrayProperty:(NSString )key object:(NSDictionary<NSString *, id> )object completion:(void (^)(NSInteger code, NSString * message))completion;
    • 介面說明:
      • 往 object_array 末尾追加一個物件元素,不影響已有元素。與 setProperty:to: 傳整個陣列的整體替換語義不同。
      • object 必須是非空 NSDictionary,至少保留一個非 NSNull 子欄位,子欄位規則與 object 一致,不支援巢狀嵌入 object/object_array。
      • 該屬性必須已經在伺服器端中繼資料中定義為 object_array。尚未定義時伺服器端回傳 code=0 但不產生修改,請先用 setProperty:to: 傳非空物件陣列完成首次建立。
      • 屬性已定義但目前使用者還沒有值時,本介面會用這一個元素建立陣列。
    • 呼叫範例:
[MTMAService addObjectArrayProperty:@"addresses" object:@{ @"id": @"school", @"city": @"Osaka" } completion:^(NSInteger code, NSString *message) { }];
              
              [MTMAService addObjectArrayProperty:@"addresses"
                                object:@{
                                    @"id": @"school",
                                    @"city": @"Osaka"
                                }
                            completion:^(NSInteger code,
                                         NSString *message) {
}];

            
此代碼塊在浮窗中顯示

移除 object_array 元素

開始支援的版本:5.5.0

  • **+ (void)removeObjectArrayProperty:(NSString )key identifierKey:(NSString )identifierKey identifierValue:(id)identifierValue completion:(void (^)(NSInteger code, NSString * message))completion;
    • 介面說明:
      • 透過唯一子欄位定位並移除整個陣列元素。只想移除元素裡的某個子欄位,請用 updateObjectArrayProperty: 把該子欄位傳 NSNull。
      • identifierKey / identifierValue 的約束與 updateObjectArrayProperty: 完全一致:子欄位必須已在中繼資料中定義,類型只能是 string 或 number,且在目前陣列中只能比對一項。
      • 該屬性尚未在伺服器端定義,或目前使用者沒有該屬性值、沒有比對項時,伺服器端忽略本次請求並回傳 code=0,需透過 MA 控制台或伺服器端使用者屬性確認實際修改結果。
      • 比對多項或識別欄位類型不一致時,由伺服器端回傳失敗碼,不會誤刪其他元素。
    • 呼叫範例:
// 刪掉 id == office 的那個地址 [MTMAService removeObjectArrayProperty:@"addresses" identifierKey:@"id" identifierValue:@"office" completion:^(NSInteger code, NSString *message) { }];
              
              // 刪掉 id == office 的那個地址
[MTMAService removeObjectArrayProperty:@"addresses"
                         identifierKey:@"id"
                       identifierValue:@"office"
                            completion:^(NSInteger code,
                                         NSString *message) {
}];

            
此代碼塊在浮窗中顯示

累加更新使用者屬性

  • **+ (void)increaseProperty:(NSString )key by:(NSNumber )amount completion:(void (^)(NSInteger code, NSString * message))completion;
    • 介面說明:
      • 給一個數值類型的使用者屬性增加一個數值,累加所有上報的資料,如累計消費金額。
      • 只能對 NSNumber 類型的使用者屬性呼叫這個介面,否則會被忽略, 如果這個使用者屬性之前不存在,則初始值當做 0 來處理。
    • 呼叫範例:
[MTMAService increaseProperty:@"key" by:@(2) completion:^(NSInteger code, NSString * _Nonnull message) { }];
              
                  [MTMAService increaseProperty:@"key" by:@(2) completion:^(NSInteger code, NSString * _Nonnull message) {

    }];

            
此代碼塊在浮窗中顯示
  • **+ (void)increaseProperty:(NSDictionary )userinfo completion:(void (^)(NSInteger code, NSString * message))completion;*
    • 介面說明:
      • 給多個數值類型的使用者屬性增加數值,累加所有上報的資料,如累計消費金額。
      • 只能對 NSNumber 類型的使用者屬性呼叫這個介面,否則會被忽略, 如果這個使用者屬性之前不存在,則初始值當做 0 來處理。
    • 呼叫範例:
[MTMAService increaseProperty:@{@"key1":@(5),@"key2":@(3)} completion:^(NSInteger code, NSString * _Nonnull message) { }];
              
                  [MTMAService increaseProperty:@{@"key1":@(5),@"key2":@(3)} completion:^(NSInteger code, NSString * _Nonnull message) {

    }];

            
此代碼塊在浮窗中顯示

追加使用者屬性

  • **+ (void)addProperty:(NSString )key by:(NSObject )content completion:(void (^)(NSInteger code, NSString * message))completion
    • 介面說明:
      • 向一個 NSSet 或者 NSArray 類型的屬性添加一些值。
      • 如前面所述,這個 NSSet 或者 NSArray 的元素必須是 NSString,否則,會忽略, 同時,如果要 add 的使用者屬性之前不存在,會初始化一個空的 NSSet 或者 NSArray。
    • 呼叫範例:
[MTMAService addProperty:@"key" by:@[@"value"] completion:^(NSInteger code, NSString * _Nonnull message) { }];
              
                  [MTMAService addProperty:@"key" by:@[@"value"] completion:^(NSInteger code, NSString * _Nonnull message) {

    }];

            
此代碼塊在浮窗中顯示
  • **+ (void)addProperty:(NSDictionary )userinfo completion:(void (^)(NSInteger, NSString * _Nonnull))completion;*
    • 介面說明:
      • 向多個 NSSet 或者 NSArray 類型的屬性添加一些值。
      • 如前面所述,這個 NSSet 或者 NSArray 的元素必須是 NSString,否則,會忽略, 同時,如果要 add 的使用者屬性之前不存在,會初始化一個空的 NSSet 或者 NSArray。
    • 呼叫範例:
[MTMAService addProperty:@{@"key1":@[@"value"],@"key2":@[@"value"]} completion:^(NSInteger code, NSString * _Nonnull message) { }];
              
                  [MTMAService addProperty:@{@"key1":@[@"value"],@"key2":@[@"value"]} completion:^(NSInteger code, NSString * _Nonnull message) {

    }];

            
此代碼塊在浮窗中顯示

移除使用者屬性

  • **+ (void)removeProperty:(NSString * )key by:(NSObject )content completion:(void (^)(NSInteger code, NSString * message))completion;*
    • 介面說明:
      • 向一個 NSSet 或者 NSArray 類型的屬性刪除一些值。
      • 參數 content 類型為 NSSet 或者 NSArray,裡面的元素必須是 NSString。
    • 呼叫範例:
[MTMAService removeProperty:@"key" by:@[@"value"] completion:^(NSInteger code, NSString * _Nonnull message) { }];
              
                  [MTMAService removeProperty:@"key" by:@[@"value"] completion:^(NSInteger code, NSString * _Nonnull message) {

    }];

            
此代碼塊在浮窗中顯示

刪除使用者屬性

支援的版本

開始支援的版本: 5.0.0

介面定義

  • + (void)deleteProperty:(NSString * )key completion:(void (^)(NSInteger code, NSString * message))completion;
    • 介面說明:
      • 刪除某個使用者屬性的全部內容,適用於普通類型、object 和 object_array。
      • 如果這個使用者屬性之前不存在,則直接忽略。

呼叫範例

[MTMAService deleteProperty:@"key" completion:^(NSInteger code, NSString * _Nonnull message) { }];
              
                  [MTMAService deleteProperty:@"key" completion:^(NSInteger code, NSString * _Nonnull message) {

    }];

            
此代碼塊在浮窗中顯示

資料蒐集開關

支援的版本

開始支援的版本:5.5.1

App 可根據使用者選擇開啟或關閉 MA 資料蒐集。關閉後,事件、使用者屬性、UTM 和裝置資訊停止蒐集;初始化、使用者識別、聯絡方式和訊息通道仍可使用。

初始化時設定蒐集狀態

在 MTMAConfig 中設定 dataCollectionEnabled,再呼叫 start:。

@property (nonatomic, strong, nullable) NSNumber *dataCollectionEnabled;
              
              @property (nonatomic, strong, nullable) NSNumber *dataCollectionEnabled;

            
此代碼塊在浮窗中顯示
值 說明
@YES 本次初始化設定為開啟蒐集
@NO 本次初始化設定為關閉蒐集
nil 或不設定 本次初始化設定為預設開啟

蒐集狀態按 MA AppKey 區分。每次呼叫 start: 都以本次設定為準:例如之前已關閉,再傳入 @YES 或不設定此項初始化,就會開啟。SDK 按 AppKey 儲存本地蒐集狀態,但每次 start: 都按本次參數生效,未傳仍預設開啟,不自動沿用歷史授權。使用者同意頁面和授權記錄由 App 管理;每次初始化請傳入使用者目前的選擇。

每次初始化時,請根據使用者目前的同意狀態設定 dataCollectionEnabled,避免固定傳入 @YES 或 @NO,因為會在下次呼叫 start: 時覆蓋使用者之前的選擇。

呼叫範例

例如,使用者尚未同意蒐集時,初始化傳入 @NO。在本次初始化成功回呼中可查詢目前狀態。

MTMAConfig *config = [[MTMAConfig alloc] init]; config.appKey = @"你的 MA AppKey"; config.dataCollectionEnabled = @NO; config.resultCompletion = ^(MTMAInitResult *result) { if (result.isSuccess) { NSNumber *enabled = [MTMAService isDataCollectionEnabled]; if (enabled == nil) { return; } NSLog(@"MA 資料蒐集:%@", enabled.boolValue ? @"開啟" : @"關閉"); } else { NSLog(@"MTMA 初始化失敗,code=%ld,message=%@", (long)result.code, result.message); } }; [MTMAService start:config];
              
              MTMAConfig *config = [[MTMAConfig alloc] init];
config.appKey = @"你的 MA AppKey";
config.dataCollectionEnabled = @NO;
config.resultCompletion = ^(MTMAInitResult *result) {
    if (result.isSuccess) {
        NSNumber *enabled = [MTMAService isDataCollectionEnabled];
        if (enabled == nil) {
            return;
        }
        NSLog(@"MA 資料蒐集:%@", enabled.boolValue ? @"開啟" : @"關閉");
    } else {
        NSLog(@"MTMA 初始化失敗,code=%ld,message=%@", (long)result.code, result.message);
    }
};
[MTMAService start:config];

            
此代碼塊在浮窗中顯示

設定蒐集狀態

介面定義

+ (void)setDataCollectionEnabled:(BOOL)enabled;
              
              + (void)setDataCollectionEnabled:(BOOL)enabled;

            
此代碼塊在浮窗中顯示
  • enabled:YES 開啟蒐集,NO 關閉蒐集。
  • 必須先呼叫 start: 指定 MA AppKey,再呼叫本介面;首次蒐集狀態透過初始化設定傳入。
  • 設定立即生效,作用於目前 MA AppKey。重複設定相同值不重複執行切換。
  • 關閉時清除此前設定的 UTM;重新開啟後不會恢復這些值。
  • 重新開啟後,只記錄開啟後的新行為,不補報關閉期間的事件。

呼叫範例

// 已呼叫 start: 初始化目前 MA AppKey。 // 使用者同意後開啟蒐集。 [MTMAService setDataCollectionEnabled:YES]; // 使用者拒絕或撤回同意時關閉蒐集。 [MTMAService setDataCollectionEnabled:NO];
              
              // 已呼叫 start: 初始化目前 MA AppKey。
// 使用者同意後開啟蒐集。
[MTMAService setDataCollectionEnabled:YES];

// 使用者拒絕或撤回同意時關閉蒐集。
[MTMAService setDataCollectionEnabled:NO];

            
此代碼塊在浮窗中顯示

對現有 API 的影響

API / 功能 蒐集關閉時
上報事件 忽略本次事件,無回呼
設定 UTM 參數 忽略本次設定,無回呼
所有使用者屬性介面 不執行屬性更新,透過回呼回傳 CODE_COLLECTION_DISABLED (-8)
MA 標準事件、MA 推送點擊事件和裝置資訊 停止蒐集
初始化、設定使用者識別、取得 EUID、取得 MA RID 行為不變,支援呼叫
設定聯絡方式 行為不變,支援呼叫
設定通道聯絡 ID、AppPush 通道綁定 行為不變,支援呼叫

setCollectControl: 仍控制 IDFA、IDFV、電信業者等欄位。整體蒐集關閉時,這些欄位也不蒐集;重新開啟後繼續按原欄位設定執行。

本開關僅控制 MA SDK。Push SDK 自身行為及系統通知權限繼續按各自設定執行。 關閉前已產生的資料將作為最後一批資料嘗試傳送,失敗不重試;已上報的歷史資料不會因關閉而刪除。錯誤碼定義見 iOS SDK 錯誤碼。

查詢蒐集狀態

介面定義

+ (nullable NSNumber *)isDataCollectionEnabled;
              
              + (nullable NSNumber *)isDataCollectionEnabled;

            
此代碼塊在浮窗中顯示

@YES 表示開啟,@NO 表示關閉;nil 表示 SDK 尚未就緒。讀取 boolValue 前,請先判斷是否為 nil。

資料蒐集控制

支援的版本

開始支援的版本: 5.0.0

介面定義

  • **+ (void)setCollectControl:(MTMACollectControl )control;*
    • 介面說明:
      • 控制 MTMACollectControl 類中資料項是否蒐集

呼叫範例

MTMACollectControl *collectControl = [[MTMACollectControl alloc] init]; collectControl.idfa = YES; collectControl.idfv = YES; collectControl.carrier = YES; [MTMAService setCollectControl:collectControl];
              
                  MTMACollectControl *collectControl = [[MTMACollectControl alloc] init];
    collectControl.idfa = YES;
    collectControl.idfv = YES;
    collectControl.carrier = YES;
    [MTMAService setCollectControl:collectControl];

            
此代碼塊在浮窗中顯示

MTMAConfig 類

應用設定資訊類。以下是屬性說明:

參數名稱 參數類型 參數說明
appKey NSString MA AppKey,獨立版必填,必須為 24 位字母或數字,與 Push AppKey 相互獨立
userID MTMAUserID 使用者識別模型,設定後會在初始化時提交使用者識別
dataCollectionEnabled NSNumber(可空) 5.5.1 起支援。@YES 開啟蒐集,@NO 關閉蒐集,nil 或未設定預設開啟;每次 start: 以本次設定為準,見 資料蒐集開關
resultCompletion ^(MTMAInitResult *result) 主執行緒非同步回呼,回傳 MTMAInitResult,優先於 completion
completion (^)(NSInteger code, NSString * message) 舊版初始化結果回呼,已廢棄,請使用 resultCompletion

MTMAInitResult 類

resultCompletion 回傳的 SDK 初始化結果物件,不需要單獨建立或呼叫。以下是屬性說明:

參數名稱 參數類型 參數說明
code NSInteger 初始化結果碼,僅用於問題定位,不建議根據具體的伺服器端業務碼編寫業務分支
message NSString 初始化結果說明,非預期失敗時可與 code 一並提供給技術支援
EUID NSString 初始化成功後的 MA EUID,失敗時為 nil
maRID NSString 初始化成功後的 MA Registration ID,失敗時為 nil
success BOOL 初始化是否成功,請透過 isSuccess 取得並據此判斷初始化結果

MTMAUserID 類

使用者識別模型類。初始化時透過 MTMAConfig.userID 傳入,執行期間透過 identifyAccount: 傳入。

四個識別均為可選欄位,統一去除首尾空格;空值及 0/null/undefined/nan(忽略大小寫)按未傳處理,不參與比對,也不產生逐欄位結果。以下約束適用於清洗後保留的值:

參數名稱 參數類型 參數說明
userID NSString 最長 255 個 Unicode 字元;空值和保留值按上述統一規則處理
anonymousID NSString 最長 256 個 Unicode 字元;空值和保留值按上述統一規則處理
email NSString 去除首尾空格後非空,最長 256 個 Unicode 字元,須比對 \A[^@\s]+@[^@\s]+\z
phone NSString 須比對 E.164 格式 \A\+[1-9]\d{1,14}\z
completion (^)(NSInteger code, NSString * message) 主執行緒非同步回呼;初始化時回傳初始化結果,執行期間回傳 identifyAccount: 的身分處理結果

非 NSString 或格式不合法的欄位按 3013、超長欄位按 3003 剔除並記錄結果,其餘合法欄位繼續提交。沒有合法欄位時,初始化按未傳身分繼續,identifyAccount: 回傳 -3 且不傳送請求。SDK 不修改呼叫方物件;email 由伺服器端轉為小寫。

初始化成功時,userID.completion 回傳 code=0,message 為空字串或僅含本地拒絕欄位 JSON,不包含伺服器端逐項結果,不能據此認為所有識別都已綁定。SDK 初始化結果以 config.resultCompletion 為準,該回呼不包含逐識別 JSON。執行期間回呼說明見 設定使用者識別。

MTMACollectControl 類

使用者資料蒐集控制模型類。以下是屬性說明:

參數名稱 參數類型 參數說明
idfa BOOL 是否蒐集idfa資訊。設定為NO,不蒐集idfa資訊。預設為NO。
idfv BOOL 是否蒐集idfv資訊。設定為NO,不蒐集idfv資訊。預設為NO。
carrier BOOL 是否蒐集電信業者資訊。設定為NO,不蒐集電信業者資訊。預設為YES。

MTMAUserContact 類

使用者通道模型類。以下是屬性說明:
如果不設定或者設定為 nil 則認為不修改,設定為 "" 空字串時認為清空該聯絡方式;非空但全是空白的字串無效

參數名稱 參數類型 參數說明
contacts NSDictionary 聯絡方式字典,支援 email、mobile_phone、landline_phone、whatsapp_phone 這 4 種聯絡方式
completion (^)(NSInteger code, NSString * message) 請求結果回呼, code:0 為成功

MTMAEventObject 類

自訂事件物件類。以下是屬性說明:

參數名稱 參數類型 參數說明
eventName NSString 事件 ID,必填,非空;以小寫字母開頭,只能包含小寫字母、數字、底線,最長 50 個 UTF-8 位元組,且不能以 el、engagelab、metaverse 開頭
property NSDictionary<NSString *, id> 自訂屬性(小於等於 100 個)。key 為 NSString,命名規則與 eventName 一致;value 可以是 NSString、NSNumber 或元素為 NSString 的 NSSet/NSArray
Icon Solid Transparent White Qiyu
聯繫銷售