Ios 如何在GTMOAuth2ViewControllerTouch视图中预填充电子邮件字段

Ios 如何在GTMOAuth2ViewControllerTouch视图中预填充电子邮件字段,ios,gtm-oauth2,Ios,Gtm Oauth2,如何在GTMOAuth2ViewControllerTouch视图中预填充电子邮件字段 可能吗?有人试过这个吗 我正在使用标准方法创建视图控制器类并以模式显示gtm视图 self.gtmVC=[[GTMOAuth2ViewControllerTouch alloc]initWithAuthentication:googleAuth 授权URL:[GTMOAuth2SignIn googleAuthorizationURL] keychainItemName:kKeychainItemName 代

如何在GTMOAuth2ViewControllerTouch视图中预填充电子邮件字段

可能吗?有人试过这个吗

我正在使用标准方法创建视图控制器类并以模式显示gtm视图

self.gtmVC=[[GTMOAuth2ViewControllerTouch alloc]initWithAuthentication:googleAuth 授权URL:[GTMOAuth2SignIn googleAuthorizationURL] keychainItemName:kKeychainItemName 代表:赛尔夫
finishedSelector:@选择器(viewController:finishedWithAuth:错误:)

没有支持的方法来执行此操作。然而,使用Javascript,您可以完成它。以下是一些步骤/代码:

等待Webview加载完成 GTMOAuth2ViewControllerTouch定义了一个NSNotification,您可以通过NSNotificationCenter观察该通知。这是kgtmoauth2webview已停止加载:

[[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更简单的方法。创建控制器后,获取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参数列表:


这至少对我来说是有效的。

一点也不……我没有真正注意到复选标记。你有没有看到过这一空白页,上面写着“请复制此代码……”等等,在登录到谷歌后,它就消失了。是的,我看到了代码的短暂闪烁。请注意,如果有什么要做的。如果我建议的新方法适用于您,您可以考虑将此标记为已接受的答案,因此当其他人遇到此页时,他们将在顶部看到这种方法,这将节省JavaScript方法的麻烦。
  #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"};