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];
}

而已

显然,这个解决方案冒着让谷歌在没有先与你核实的情况下改变事情的风险。但是,在这种情况下发生的最糟糕的情况是电子邮件停止预填充,您的用户必须手动输入,至少在您可以发布更新之前。

希望这可以帮助。

于 2014-06-19T20:18:03.027 回答
1

我相信有比使用 Javascript 更简单的方法。创建控制器后,获取 GTMOAuth2SignIn 并使用用户电子邮件地址添加附加授权参数。

  #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 回答