ハイブリッドモバイルアプリケーション (ハイブリッドアプリ) 技術の成熟に伴い、アプリの WKWebView コンポーネントを使用して、モバイル HTML5 サービス用の Alibaba Cloud Captcha 2.0 と直接統合できます。これにより、アプリに人間と機械の検証が提供されます。このトピックでは、Swift を使用して Captcha 2.0 を iOS アプリに統合する方法について説明します。
背景情報
モバイル HTML5 バージョンの Captcha V2.0 は、迅速な反復や高い互換性などの利点を提供します。 Captcha V2.0 サービスをアプリに統合することで、ネイティブアプリコンポーネントの依存関係や参照によって引き起こされる互換性の問題を回避できます。モバイル HTML5 Captcha V2.0 の迅速な反復は、アプリが敵対性の高いシナリオにより適切に対応するのにも役立ちます。
統合の概要
サービスアーキテクチャが V2 の場合は、「iOS での V2 アーキテクチャとの統合」をご参照ください。
HTML5 アプリケーション用の Captcha 2.0 を iOS アプリに統合するには、次のステップが含まれます。
HTML5 サービスクライアント: Captcha 2.0 を HTML5 サービスクライアントに統合し、検証を開始します。
HTML5 サービス用サーバー: サーバーに Captcha 2.0 SDK を統合し、
VerifyIntelligentCaptchaAPI 操作を呼び出して、サービスの署名検証を開始します。iOS アプリ: WKWebView コンポーネントを使用して、アプリで Captcha 2.0 の統合が必要なサービスページを有効にしてデプロイします。
前提条件
Alibaba Cloud Captcha 2.0 サービスが有効化されている。
検証シナリオが作成されていること。 Integration Method が [Webview+H5 (アプリおよび WeChat ミニプログラムをサポート)] に設定されている。
iOS 10.0 以降を使用している。
手順
ステップ 1: Alibaba Cloud Captcha 2.0 を HTML5 サービスクライアントに統合する
HTML5 サービスクライアントのコードに、Captcha 2.0 が提供するクライアント側の統合コードを統合します。 HTML5 サービスクライアントの統合方法の詳細については、「Web および H5 クライアント向けの V3 アーキテクチャとの統合」をご参照ください。
説明サービスアーキテクチャが V2 の場合は、「Web および H5 クライアント向けの V2 アーキテクチャとの統合」をご参照ください。
成功コールバック関数に、対応する JavaScript 関数を追加します。 この関数では、ステップ 3 および ステップ 4 で構成されたメソッドを呼び出します。 このメソッドは、WkScriptMessageHandler プロトコルを使用して JavaScript と WKWebView 間の対話を有効にし、署名検証パラメーターを取得します。 パラメーターを取得した後、iOS アプリからサービスまたは署名検証リクエストを送信し、検証結果を処理できます。
// 成功コールバック関数 function success(captchaVerifyParam) { // WkScriptMessageHandler プロトコルによって実装された JavaScript メソッドを呼び出して、署名検証パラメーターを取得します。 window.webkit && window.webkit.messageHandlers.getCaptchaVerifyParam.postMessage(captchaVerifyParam) }
返されるデータ
Captcha 2.0 に接続された V3 アーキテクチャクライアントの動作検証中に、Captcha サーバーは回答を検証し、リクエストがマシンからのものかどうかを判断します。 次に、サーバーは Captcha コードとその他のパラメーターをクライアントに返します。 ブラウザのネットワーク機能を使用して、返されたデータを表示できます。 詳細については、「V3 アーキテクチャクライアントに対して返されるデータ」をご参照ください。

ステップ 2: HTML5 ページ用のサーバーに Alibaba Cloud Captcha 2.0 を統合する
HTML5 サービスページのサーバーに、Captcha 2.0 が提供するサーバーサイド SDK を統合します。 次に、VerifyIntelligentCaptcha API 操作を呼び出して、サービスの署名検証を開始します。 詳細については、「サーバーサイド統合」をご参照ください。
ステップ 3: iOS アプリでサービスページを有効にしてデプロイする
Swift
iOS アプリプロジェクトの
Controller.swiftファイルに、必要な依存関係をインポートします。import WebKitiOS アプリプロジェクトの
Controller.swiftファイルに、HTML5 サービスページを読み込みます。override func viewDidLoad() { super.viewDidLoad() view.addSubview(webView) let url = URL(string: "http://x.x.x.x/demo/") let request = URLRequest(url: url!); webView.load(request); // ページを読み込みます。 }WKWebView オブジェクトを設定します。 WKScriptMessageHandler プロトコルを使用して、JavaScript と WKWebView 間の対話を有効にします。
lazy var webView: WKWebView = { // アダプティブページスケーリングを構成します。 let javascript = "var meta = document.createElement('meta'); meta.setAttribute('name', 'viewport'); meta.setAttribute('content', 'width=device-width'); document.getElementsByTagName('head')[0].appendChild(meta)"; let configuration = WKWebViewConfiguration(); let userScript = WKUserScript(source: javascript, injectionTime: .atDocumentEnd, forMainFrameOnly: true); let usercontroller = WKUserContentController(); usercontroller.addUserScript(userScript); configuration.userContentController = usercontroller; // HTML ページから JavaScript を呼び出すメソッドを追加します。 必要に応じてメソッド名を変更できます。 configuration.userContentController.add(self, name: "getCaptchaVerifyParam"); // WKWebView を構成します。 let webView = WKWebView(frame: self.view.frame, configuration: configuration); webView.navigationDelegate = self; return webView; }()WKScriptMessageHandler プロトコルに対応するメソッドを設定します。 このメソッドを使用して、Captcha 2.0 からの戻り値を取得し、サービスロジックで処理してから、検証結果をカスタム API に返します。
func userContentController(_ userContentController: WKUserContentController, didReceive message: WKScriptMessage) { if(messsage.name == "getCaptchaVerifyParam"){ // 署名検証パラメーターを取得した後、サービスリクエストまたは署名検証リクエストを送信して、結果を処理できます。 print(message.body) } }
Objective-C
iOS アプリプロジェクトの
ViewController.mファイルに、必要な依存関係をインポートします。#import "ViewController.h" #import <WebKit/WebKit.h> @interface ViewController ()<WKScriptMessageHandler> @property(nonatomic,strong)WKWebView *webView; @endiOS アプリプロジェクトの
ViewController.mファイルに、HTML5 サービスページを読み込みます。- (void)viewDidLoad { [super viewDidLoad]; [self.view addSubview:self.webView]; self.webView.scrollView.backgroundColor = [UIColor redColor]; [self loadLocalHtmlForJs]; } - (void)loadLocalHtmlForJs{ NSString *path = [[NSBundle mainBundle] pathForResource:@"index" ofType:@"html"]; NSURLRequest *req = [NSURLRequest requestWithURL:[NSURL fileURLWithPath:path]]; [self.webView loadRequest:req]; }WKWebView オブジェクトを設定します。 WKScriptMessageHandler プロトコルを使用して、JavaScript と WKWebView 間の対話を有効にします。
- (WKWebView *)webView{ if (!_webView) { // アダプティブページスケーリングを構成します。 NSString *jscript = @"var meta = document.createElement('meta'); meta.setAttribute('name', 'viewport'); meta.setAttribute('content', 'width=device-width'); document.getElementsByTagName('head')[0].appendChild(meta)"; WKUserScript *userScript = [[WKUserScript alloc] initWithSource:jscript injectionTime:WKUserScriptInjectionTimeAtDocumentEnd forMainFrameOnly:YES]; WKUserContentController *userContentController = [[WKUserContentController alloc] init]; [userContentController addUserScript:userScript]; // HTML ページから JavaScript を呼び出すメソッドを追加します。 メソッド名は、HTML ページの成功コールバック関数で呼び出されるものと同じである必要があります。 [userContentController addScriptMessageHandler:self name:@"getCaptchaVerifyParam"]; // WKWebView を構成します。 WKWebViewConfiguration *configuration = [[WKWebViewConfiguration alloc] init]; configuration.userContentController = userContentController; // WKWebView を表示します。 WKWebView *webView = [[WKWebView alloc] initWithFrame:self.view.frame configuration:configuration]; webView.backgroundColor = [UIColor blackColor]; // デバッグモードを有効にします (オプション)。 [webView.configuration.preferences setValue:@YES forKey:@"developerExtrasEnabled"]; webView.inspectable = YES; _webView = webView; } return _webView; }WKScriptMessageHandler プロトコルに対応するメソッドを設定します。 このメソッドを使用して、Captcha 2.0 からの戻り値を取得し、サービスロジックで処理してから、検証結果をカスタム API に返します。
- (void)userContentController:(WKUserContentController *)userContentController didReceiveScriptMessage:(WKScriptMessage *)message { // HTML ページの JavaScript から対応するメソッドを呼び出して、Captcha サービスからの戻り値を取得します。 メソッド名は、JavaScript 呼び出し用に追加されたものと同じである必要があります。 if([message.name isEqualToString:@"getCaptchaVerifyParam"]){ // 署名検証パラメーターを取得した後、サービスまたは署名検証リクエストを送信して結果を処理できます。 NSLog(@"Captcha の署名検証パラメーター: %@", message.body); // ここにサービスロジックを追加できます。 例: // 1. 署名検証パラメーターをサーバーに送信して検証します。 // 2. 検証結果に基づいて後続のビジネスフローを処理します。 // 例: 署名検証パラメーターをサーバーに送信します。 [self sendCaptchaVerifyParamToServer:message.body]; } }
iOS V3 アーキテクチャデモのダウンロード
Swift: Swift アプリ統合デモ。
Objective-C: Objective-C アプリ統合デモ。