2

GTMOAuth2ViewControllerTouch ビューで電子メール フィールドを事前入力する方法は?

出来ますか ?誰もこれを試しましたか?

ビューコントローラークラスを作成し、gtmビューをモーダルに表示する標準的な方法を使用しています

self.gtmVC = [[GTMOAuth2ViewControllerTouch alloc] initWithAuthentication:googleAuth authorizationURL:[GTMOAuth2SignIn googleAuthorizationURL] keychainItemName:kKeychainItemName delegate:self finishedSelector:@selector(viewController:finishedWithAuth:error:)];

4

2 に答える 2

5

これを行う方法はサポートされていません。ただし、Javascript を使用すると、それを行うことができます。いくつかの手順/コードは次のとおりです。

Webview の読み込みが完了するまで待ちます

GTMOAuth2ViewControllerTouch は、NSNotificationCenter を通じて観察できる NSNotification を定義します。それはkGTMOAuth2WebViewStoppedLoadingです:

[[NSNotificationCenter defaultCenter]
 addObserver:self
 selector:@selector(authControllerWebViewStoppedLoading:)
 name:kGTMOAuth2WebViewStoppedLoading
 object:nil];

NSNotification オブジェクトの userInfo ディクショナリには、webview への参照が含まれます。GTMOAuth2ViewControllerTouch は、webview へのパブリック アクセスも許可します。私は自分のアプリで後者を使用しました。

Javascript を使用して電子メール入力エンティティを変更する

まず、webview が表示しているページの HTML を次のように取得できることを知っておく必要があります。

NSString *html = [self.authController.webView
                  stringByEvaluatingJavaScriptFromString:
                  @"document.body.innerHTML"];

このソリューションでは必要ありませんが、電子メール入力エンティティの HTML が次のようになっていることを確認できます。

<input id="Email" name="Email" type="email" 
      placeholder="Email" value="" spellcheck="false" class="">

電子メール入力エンティティがわかったら、javascript を使用してそのテキスト値を変更できます。

- (void)authControllerWebViewStoppedLoading:(NSNotification *)notification
{
    // Assume emailAddress is a property that holds the email address you
    // you want to pre-populate the Email entity with....

    NSString *javascript = [NSString stringWithFormat:
                            @"var elem = document.getElementById(\"Email\");"
                            @"elem.value = \"%@\";", self.emailAddress];
    [self.authController.webView
     stringByEvaluatingJavaScriptFromString:javascript];
}

それでおしまい

明らかに、このソリューションでは、Google が最初に確認せずに変更を加えてしまうリスクがあります。ただし、その場合に発生する最悪の事態は、少なくとも更新をリリースできるようになるまで、電子メールの事前入力が停止し、ユーザーが手動で入力する必要があることです。

お役に立てれば。

于 2014-06-19T20:18:03.027 に答える
1

Javascript を使用するよりも簡単な方法があると思います。コントローラーを作成したら、GTMOAuth2SignIn を取得し、ユーザーのメール アドレスを使用して additionalAuthorizationParameters を追加します。

  #import "GTMOAuth2SignIn.h"

  GTMOAuth2ViewControllerTouch *authViewController = 
  [[GTMOAuth2ViewControllerTouch alloc] initWithScope:kGTLAuthScopeDriveFile
                                             clientID:kClientId
                                         clientSecret:kClientSecret
                                     keychainItemName:kKeychainItemName
                                             delegate:self
                                     finishedSelector:finishedSelector];

  GTMOAuth2SignIn *signIn = authViewController.signIn;
  signIn.additionalAuthorizationParameters = @{@"login_hint" : @"example@gmail.com"};

これは、インストール済みアプリケーションの OAuth2 のパラメータ リストからのものです: https://developers.google.com/accounts/docs/OAuth2InstalledApp#formingtheurl

これは少なくとも私にとってはうまくいきました。

于 2014-07-04T02:20:30.903 に答える