如何在GTMOAuth2ViewControllerTouch视图中预先填写电子邮件字段?
有可能吗?有没有人试过这个?
我使用标准方法创建视图控制器类并以模态方式显示gtm视图
self.gtmVC = [[GTMOAuth2ViewControllerTouch alloc] initWithAuthentication:googleAuth authorizationURL:[GTMOAuth2SignIn googleAuthorizationURL] keychainItemName:kKeychainItemName 委托:自我 finishedSelector:@selector(的viewController:finishedWithAuth:错误:)];
答案 0 :(得分:5)
没有支持的方法这样做。但是,使用Javascript,您可以完成它。这是一些步骤/代码:
GTMOAuth2ViewControllerTouch定义了您可以通过NSNotificationCenter观察到的NSNotification。这是 kGTMOAuth2WebViewStoppedLoading :
[[NSNotificationCenter defaultCenter]
addObserver:self
selector:@selector(authControllerWebViewStoppedLoading:)
name:kGTMOAuth2WebViewStoppedLoading
object:nil];
NSNotification对象的userInfo字典将引用其中的webview。 GTMOAuth2ViewControllerTouch还允许公共访问webview。我在我的应用程序中使用了后者。
首先,您应该知道您可以获取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改变事情而不先与您核实的风险。但是,在这种情况下发生的最糟糕的情况是电子邮件停止预先填充,您的用户必须手动输入,至少在您发布更新之前。
希望这有帮助。
答案 1 :(得分: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
至少这对我有用。