Реализация reCaptchav3 в iOS - PullRequest
       9

Реализация reCaptchav3 в iOS

0 голосов
/ 08 ноября 2018

Я пытаюсь реализовать reCaptchav3 в iOS, но не могу заставить его работать. reCaptchav2 невидимый работает отлично. Я не знаю, что не так с моим кодом.

HTML-заголовок:

<script src='https://www.google.com/recaptcha/api.js?render="SITE_KEY"'></script>
<script>
    grecaptcha.ready(function() {
      grecaptcha.execute('SITE_KEY', {action: 'OnSubmit'})
      .then(function(token) {
        // Verify the token on the server.
        document.getElementById("demo-form").submit();
      });
    });
</script>

Кнопка:

<div class="btn">
  <button class="g-recaptcha" data-callback="OnSubmit" data-expired-callback="OnExpired" data-error-callback="OnError" type="submit" disabled="">Button is disabled</button>
</div>

IOS:

- (void)initWebkitView {
    WKUserContentController *wkController = [[WKUserContentController alloc] init];

    [wkController addScriptMessageHandler:self name:@"reCaptchaiOS"];
    [wkController addUserScript:[self readScript]];

    WKWebViewConfiguration *wkConf = [[WKWebViewConfiguration alloc] init];
    [wkConf setUserContentController:wkController];

    wk = [[WKWebView alloc] initWithFrame:self.view.frame
                        configuration:wkConf];

    wk.backgroundColor = [UIColor clearColor];
    wk.opaque = NO;

    [wk setFrame:self.view.frame];
    [self.view addSubview:wk];
}

- (void)userContentController:(WKUserContentController *)userContentController didReceiveScriptMessage:(WKScriptMessage *)message {
    NSArray<NSString*> *args = (NSArray*)message.body;

    if ([args[0] isEqualToString:@"OnSubmit"])
       [self captchaDidSubmitted:args[1]];
    else if ([args[0] isEqualToString:@"OnError"])
       [self captchaDidError:args[1]];
    else if ([args[0] isEqualToString:@"OnExpired"])
       [self captchaDidExpired:args[1]];
}

В проект iOS добавлен скрипт:

function OnSubmit(response) {
    window.webkit.messageHandlers.reCaptchaiOS.postMessage(["OnSubmit", response]);
}

function OnError(response) {
    window.webkit.messageHandlers.reCaptchaiOS.postMessage(["OnError", response]);
}

function OnExpired(response) {
    window.webkit.messageHandlers.reCaptchaiOS.postMessage(["OnExpired", response]);
}

Я использовал тот же код для reCaptchav2 и следовал руководству по Google, но не смог получить ответ.

...