คู่มือการผสานรวม iOS

EngageLab Behavioral CAPTCHA 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 ใน Build Settings -> Other Linker Flags สำหรับเป้าหมายที่เกี่ยวข้อง

    linkerflags

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

    copyresource

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

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

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

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

ผู้ใช้ที่ผสานรวมต้องใช้ iOS SDK เพื่อดำเนินการอินเทอร์เฟซที่ให้ไว้ดังต่อไปนี้:

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

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

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

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

คอมไพล์โปรเจ็กต์ของคุณและสัมผัสประสบการณ์ Behavioral CAPTCHA

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];
    }
    
                
    โค้ดนี้โชว์เป็นหน้าต่างลอย

การจัดการผลลัพธ์การตรวจสอบ

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

- (void)gtCaptchaSession:(GTCaptcha4Session *)captchaSession didReceive:(NSString *)code result:(NSDictionary *)result { NSLog(@"result: %@", result); // หาก code เป็น @"1" แสดงว่าผู้ใช้ได้ทำการตรวจสอบเสร็จสิ้น; หาก code เป็น @"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://***/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" แสดงว่าผู้ใช้ได้ทำการตรวจสอบเสร็จสิ้น; หาก code เป็น @"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://***/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];
        }
    }
}

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

การจัดการข้อผิดพลาดในการตรวจสอบ

อาจเกิดข้อผิดพลาดที่ไม่คาดคิดระหว่างการตรวจสอบ หลังจากปฏิบัติตามโปรโตคอล 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
ติดต่อฝ่ายขาย