logoเอกสาร
ค้นหา
เข้าสู่ระบบ

คู่มือการรวม iOS

EngageLab Behavioral Verification iOS SDK ถูกออกแบบมาสำหรับนักพัฒนาที่ต้องการรวมเข้ากับการพัฒนาไคลเอนต์ iOS แบบเนทีฟ SDK นี้ไม่พึ่งพาไลบรารีของบุคคลที่สามใดๆ

ภาพรวมผลิตภัณฑ์

รายการ คำอธิบาย
คุณสมบัติหลัก CAPTCHA รุ่นใหม่ที่แก้ไขปัญหาการสูญเสียทางธุรกิจและความเสี่ยงด้านความปลอดภัยที่เกิดจากการโจมตีอัตโนมัติจากสคริปต์เครื่องจักรอย่างชาญฉลาด
นโยบายความเป็นส่วนตัวของ SDK นโยบาย
คู่มือการปฏิบัติตามข้อกำหนดของ SDK คู่มือ
ลิงก์ดาวน์โหลด SDK ดาวน์โหลด

ข้อกำหนดของสภาพแวดล้อม

รายการ ทรัพยากร
เป้าหมายการพัฒนา เข้ากันได้กับ iOS 9+
สภาพแวดล้อมการพัฒนา Xcode 13.0+
การพึ่งพาระบบ Webkit.framework
การพึ่งพาไลบรารีบุคคลที่สามของ SDK ไม่มี

การนำ SDK เข้ามาใช้

  1. หากคุณเพิ่ม SDK ด้วยตนเอง ให้ลากไฟล์ GTCaptcha4.framework ที่ได้จากการดาวน์โหลดเข้ามาในโปรเจกต์ของคุณ โดยตรวจสอบให้แน่ใจว่าได้เลือก Copy items if needed

    ใช้วิธี Linked Frameworks and Libraries เพื่อนำเข้าเฟรมเวิร์ก หลังจากลาก GTCaptcha4.framework เข้ามาในโปรเจกต์แล้ว ตรวจสอบให้แน่ใจว่าไฟล์ .framework ได้ถูกเพิ่มใน PROJECT -> Build Phases -> Linked Frameworks and Libraries

    linkedlibraries

    SDK มีรูปแบบ XCFramework ซึ่งอยู่ในไดเรกทอรี SDK -> XCFramework ภายใต้ไฟล์ที่ดาวน์โหลดในชื่อ GTCaptcha4.xcframework

  2. สำหรับ Category ในไลบรารีแบบสแตติก ให้เพิ่ม -ObjC ใน Other Linker Flags ภายใต้ Build Settings สำหรับเป้าหมายที่เกี่ยวข้อง

    linkerflags

  3. คุณยังต้องรวม GT4Captcha4.Bundle ในโปรเจกต์ของคุณด้วย มิฉะนั้นการยืนยันจะไม่ทำงาน ให้ลาก GTCaptcha4.Bundle จากไดเรกทอรี SDK เข้ามาในโปรเจกต์ของคุณ

    copyresource

ในงาน WWDC23 Apple ได้ประกาศนโยบายความเป็นส่วนตัวใหม่สำหรับแอปพลิเคชัน (รวมถึง SDK) โดยมีเซสชันเฉพาะ เริ่มต้นใช้งาน privacy manifests - WWDC23 - วิดีโอ - Apple Developer เมื่อวันที่ 27 กรกฎาคม Apple ได้เผยแพร่ข่าวสารอัปเดตว่าตั้งแต่ฤดูใบไม้ร่วงปี 2023 หากแอปพลิเคชันที่อัปโหลดใหม่ใช้ API ที่เกี่ยวข้องโดยไม่ได้ให้ privacy manifest คุณจะได้รับการแจ้งเตือนทางอีเมล ตั้งแต่ฤดูใบไม้ผลิปี 2024 privacy manifests จะกลายเป็นข้อบังคับ สำหรับ API ที่เกี่ยวข้องและเหตุผลการใช้งาน โปรดดูที่: Describing use of required reason API | Apple Developer Documentation หากเหตุผลการใช้งานไม่ได้ระบุไว้ คุณสามารถส่งคำอธิบายการใช้งานเฉพาะได้โดยตรง

ในการสร้าง privacy manifest ใหม่ โปรดดูที่ Privacy manifest files | Apple Developer Documentation

Behavioral Verification iOS SDK ใช้ฟังก์ชันบางอย่างเพื่อรับข้อมูลความจุของดิสก์และการตรวจจับสภาพแวดล้อมเพื่อวัตถุประสงค์ในการควบคุมความเสี่ยง โดยเกี่ยวข้องกับหมวดหมู่ NSPrivacyAccessedAPICategoryDiskSpace และ NSPrivacyAccessedAPICategoryFileTimestamp ซึ่งได้ระบุไว้ในที่นี้

อินเทอร์เฟซการกำหนดค่า

อ้างอิงถึง กระบวนการโครงสร้างผลิตภัณฑ์ ของ Behavioral Verification คุณต้องตั้งค่า อินเทอร์เฟซฝั่งเซิร์ฟเวอร์ ที่เกี่ยวข้องบนแบ็กเอนด์ของคุณก่อน และกำหนดค่า captchaId และ Key ที่ได้รับจาก EngageLab Management Console

นักพัฒนาที่รวม SDK เข้าด้วยกันต้องใช้อินเทอร์เฟซต่อไปนี้ที่จัดเตรียมโดย iOS SDK:

  1. กำหนดค่าการเริ่มต้นการยืนยันโดยใช้ ID
  2. เริ่มการยืนยัน
  3. รับพารามิเตอร์ผลลัพธ์การยืนยันและทำการตรวจสอบความถูกต้องระดับที่สองบนพารามิเตอร์ผลลัพธ์ที่ส่งมาเพื่อป้องกันการปลอมแปลง
  4. จัดการปัญหาที่อาจเกิดขึ้นระหว่างการยืนยันโดยใช้วิธีการ delegate ข้อผิดพลาด

คุณต้องปฏิบัติตามโปรโตคอล <GTCaptcha4SessionTaskDelegate> เพื่อจัดการผลลัพธ์การยืนยันและข้อผิดพลาดที่อาจเกิดขึ้น

อ้างอิงถึง ตัวอย่างโค้ด ด้านล่างสำหรับโค้ดการรวม

คอมไพล์และรันโปรเจกต์ของคุณ

คอมไพล์โปรเจกต์ของคุณและสัมผัสประสบการณ์การยืนยันพฤติกรรม

build

ตัวอย่างโค้ด

การเริ่มต้นและการเรียกการยืนยัน

นำเข้าไฟล์เฮดเดอร์ของไลบรารียืนยันแบบไดนามิก GTCaptcha4.framework ในโปรเจกต์ของคุณ

#import <GTCaptcha4/GTCaptcha4.h>
              
              #import <GTCaptcha4/GTCaptcha4.h>

            
โค้ดนี้โชว์เป็นหน้าต่างลอย

ใช้การรวมใน UIButton เป็นตัวอย่าง

  1. การเริ่มต้น

    สร้างอินสแตนซ์ของตัวจัดการการยืนยัน GTCaptcha4Session ในวิธีการเริ่มต้น UIButton ให้เรียกใช้วิธีการลงทะเบียนของอินสแตนซ์ GTCaptcha4Session เพื่อรับข้อมูลการลงทะเบียน:

    #define captchaID @"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" @interface ViewController () <GTCaptcha4SessionTaskDelegate> @property (strong, nonatomic) IBOutlet UIButton *startBtn; @property (nonatomic, strong) GTCaptcha4Session *captchaSession; @end @implementation ViewController - (GTCaptcha4Session *)captchaSession { if (!_captchaSession) { /// สร้างอินสแตนซ์ GTCaptcha4SessionConfiguration *config = [GTCaptcha4SessionConfiguration defaultConfiguration]; // config.timeout = 8.0f; /// ตั้งค่าที่อยู่หน้ากลาง ต้องตั้งค่าตามตัวอย่าง config.resourcePath = @"https://captcha-stat.engagelab.com/www/gt4-index.html"; /// ตั้งค่า apiServer และ staticServer ต้องตั้งค่าตามตัวอย่าง config.apiServers = @[@"captcha-api.engagelab.com"]; config.staticServers = @[@"captcha-stat.engagelab.com/www/js"]; /// โปรโตคอลการร้องขอ config.protocol = @"https"; _captchaSession = [GTCaptcha4Session sessionWithCaptchaID:captchaID configuration:config]; _captchaSession.delegate = self; } return _captchaSession; } - (void)viewDidLoad { [super viewDidLoad]; // เริ่มต้นเซสชันการยืนยันล่วงหน้า หากไม่ได้เรียกที่นี่ จะใช้การโหลดแบบ Lazy [self captchaSession]; [self.startBtn addTarget:self action:@selector(start) forControlEvents:UIControlEventTouchUpInside]; }
                  
                  #define captchaID @"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
    
    @interface ViewController () <GTCaptcha4SessionTaskDelegate>
    
    @property (strong, nonatomic) IBOutlet UIButton *startBtn;
    
    @property (nonatomic, strong) GTCaptcha4Session *captchaSession;
    
    @end
    
    @implementation ViewController
    
    - (GTCaptcha4Session *)captchaSession {
        if (!_captchaSession) {
            /// สร้างอินสแตนซ์
            GTCaptcha4SessionConfiguration *config = [GTCaptcha4SessionConfiguration defaultConfiguration];
            // config.timeout = 8.0f;
            /// ตั้งค่าที่อยู่หน้ากลาง ต้องตั้งค่าตามตัวอย่าง
            config.resourcePath = @"https://captcha-stat.engagelab.com/www/gt4-index.html";
            /// ตั้งค่า apiServer และ staticServer ต้องตั้งค่าตามตัวอย่าง
            config.apiServers = @[@"captcha-api.engagelab.com"];
            config.staticServers = @[@"captcha-stat.engagelab.com/www/js"];
            /// โปรโตคอลการร้องขอ
            config.protocol = @"https";
            _captchaSession = [GTCaptcha4Session sessionWithCaptchaID:captchaID configuration:config];
    
            _captchaSession.delegate = self;
        }
    
        return _captchaSession;
    }
    
    - (void)viewDidLoad {
        [super viewDidLoad];
    
        // เริ่มต้นเซสชันการยืนยันล่วงหน้า หากไม่ได้เรียกที่นี่ จะใช้การโหลดแบบ Lazy
        [self captchaSession];
    
        [self.startBtn addTarget:self action:@selector(start) forControlEvents:UIControlEventTouchUpInside];
    }
    
                
    โค้ดนี้โชว์เป็นหน้าต่างลอย

    สำหรับรายการการกำหนดค่าเพิ่มเติม ดูที่อินเทอร์เฟซหรือคุณสมบัติที่กำหนดใน GTCaptcha4SessionConfiguration

  2. การเรียกการยืนยัน

    หลังจากการเริ่มต้น ให้เรียกใช้วิธีการต่อไปนี้เพื่อทำการยืนยัน:

    - (void)start { [self.captchaSession verify]; }
                  
                  - (void)start {
        [self.captchaSession verify];
    }
    
                
    โค้ดนี้โชว์เป็นหน้าต่างลอย

การจัดการผลลัพธ์การยืนยัน

การยืนยันจะเสร็จสมบูรณ์หลังจากตรวจสอบผลลัพธ์การยืนยันแล้วเท่านั้น คุณต้องจัดการวิธีการ delegate ต่อไปนี้หลังจากปฏิบัติตามโปรโตคอล GTCaptcha4SessionTaskDelegate:

- (void)gtCaptchaSession:(GTCaptcha4Session *)captchaSession didReceive:(NSString *)code result:(NSDictionary *)result { NSLog(@"result: %@", result); // code คือ @"1" หากผู้ใช้ทำการยืนยันเสร็จสมบูรณ์, @"0" หากผู้ใช้ล้มเหลวในการยืนยัน if ([@"1" isEqualToString:code]) { if (result && result.count > 0) { // แปลงพจนานุกรมเป็นรูปแบบฟอร์มสำหรับการส่ง (สร้างตามข้อกำหนดรูปแบบข้อมูลอินเทอร์เฟซจริง) __block NSMutableArray<NSString *> *kvPairs = [NSMutableArray array]; [result enumerateKeysAndObjectsUsingBlock:^(id _Nonnull key, id _Nonnull obj, BOOL * _Nonnull stop) { if ([key isKindOfClass:[NSString class]] && [obj isKindOfClass:[NSString class]]) { NSString *kvPair = [NSString stringWithFormat:@"%@=%@", key, obj]; [kvPairs addObject:kvPair]; } }]; NSString *formStr = [kvPairs componentsJoinedByString:@"&"]; NSData *data = [formStr dataUsingEncoding:NSUTF8StringEncoding]; // อินเทอร์เฟซการตรวจสอบแบ็กเอนด์ที่จัดเตรียมโดยธุรกิจ ต้องตั้งค่าตามตัวอย่าง NSURL *url = [NSURL URLWithString:@"https://captcha-api.engagelab.com/validate"]; NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url]; request.HTTPMethod = @"POST"; request.HTTPBody = data; // ส่งไปยังแบ็กเอนด์เพื่อการตรวจสอบผลลัพธ์ [[[NSURLSession sharedSession] dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) { if (!error && data) { // จัดการผลลัพธ์การยืนยัน NSString *msg = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; NSLog(@"result: %@", msg); } else { NSLog(@"error: %@", error); } }] resume]; } } }
              
              - (void)gtCaptchaSession:(GTCaptcha4Session *)captchaSession didReceive:(NSString *)code result:(NSDictionary *)result {
    NSLog(@"result: %@", result);
    // code คือ @"1" หากผู้ใช้ทำการยืนยันเสร็จสมบูรณ์, @"0" หากผู้ใช้ล้มเหลวในการยืนยัน
    if ([@"1" isEqualToString:code]) {
        if (result && result.count > 0) {
            // แปลงพจนานุกรมเป็นรูปแบบฟอร์มสำหรับการส่ง (สร้างตามข้อกำหนดรูปแบบข้อมูลอินเทอร์เฟซจริง)
            __block NSMutableArray<NSString *> *kvPairs = [NSMutableArray array];

            [result enumerateKeysAndObjectsUsingBlock:^(id  _Nonnull key, id  _Nonnull obj, BOOL * _Nonnull stop) {
                if ([key isKindOfClass:[NSString class]] &&
                    [obj isKindOfClass:[NSString class]]) {
                    NSString *kvPair = [NSString stringWithFormat:@"%@=%@", key, obj];
                    [kvPairs addObject:kvPair];
                }
            }];

            NSString *formStr = [kvPairs componentsJoinedByString:@"&"];
            NSData *data = [formStr dataUsingEncoding:NSUTF8StringEncoding];

            // อินเทอร์เฟซการตรวจสอบแบ็กเอนด์ที่จัดเตรียมโดยธุรกิจ ต้องตั้งค่าตามตัวอย่าง
            NSURL *url = [NSURL URLWithString:@"https://captcha-api.engagelab.com/validate"];
            NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
            request.HTTPMethod  = @"POST";
            request.HTTPBody    = data;

            // ส่งไปยังแบ็กเอนด์เพื่อการตรวจสอบผลลัพธ์
            [[[NSURLSession sharedSession] dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
                if (!error && data) {
                    // จัดการผลลัพธ์การยืนยัน
                    NSString *msg = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
                    NSLog(@"result: %@", msg);
                }
                else {
                    NSLog(@"error: %@", error);
                }
            }] resume];
        }
    }
}

            
โค้ดนี้โชว์เป็นหน้าต่างลอย

การจัดการข้อผิดพลาดในการยืนยัน

อาจเกิดข้อผิดพลาดที่ไม่คาดคิดระหว่างการยืนยัน คุณสามารถจัดการข้อผิดพลาดเหล่านี้ในวิธีการ delegate ต่อไปนี้หลังจากปฏิบัติตามโปรโตคอล GTCaptcha4SessionTaskDelegate:

- (void)gtCaptchaSession:(GTCaptcha4Session *)captchaSession didReceiveError:(GTC4Error *)error { // แสดงข้อมูลข้อผิดพลาดและรหัสข้อผิดพลาดแก่ผู้ใช้ // บันทึกรายละเอียดข้อผิดพลาด NSLog(@"error: %@", error.description); }
              
              - (void)gtCaptchaSession:(GTCaptcha4Session *)captchaSession didReceiveError:(GTC4Error *)error {
    // แสดงข้อมูลข้อผิดพลาดและรหัสข้อผิดพลาดแก่ผู้ใช้

    // บันทึกรายละเอียดข้อผิดพลาด
    NSLog(@"error: %@", error.description);
}

            
โค้ดนี้โชว์เป็นหน้าต่างลอย

ขอแนะนำอย่างยิ่งให้แสดงทั้งเหตุผลข้อผิดพลาดและรหัสข้อผิดพลาดแก่ผู้ใช้เมื่อแสดงข้อผิดพลาดการยืนยัน เพื่ออำนวยความสะดวกในการแก้ไขปัญหาออนไลน์

ตัวอย่าง Swift

สำหรับโค้ดตัวอย่างที่ละเอียดมากขึ้น โปรดดูที่ Demo อย่างเป็นทางการที่จัดเตรียมไว้ สำหรับโค้ดตัวอย่าง Swift โปรดดูที่ไฟล์ DefaultDemoViewController.swift ในซอร์สโค้ด Demo

icon
ติดต่อฝ่ายขาย