4

我正在开发一个 ios 应用程序,最近我有一个新的要求,即为用户提供使用 gmail 登录的选项。当用户点击登录按钮时,我想打开 gmail 登录屏幕,在用户输入他的凭据后,如果凭据正确,那么我希望控件导航到我的应用程序主页,而不是打开他的邮件。谁能告诉我如何做到这一点

4

2 回答 2

2

最后我找到了解决方案。. .我认为这将帮助其他任何人按照以下步骤将 gmail 与您的应用程序集成。

1.将以下类添加到您的项目中。

GTMHTTPFetcher.h,GTMHTTPFetcher.m,GTMOAuth2Authentication.h,GTMOAuth2Authentication.m,GTMOAuth2SignIn.h,GTMOAuth2SignIn.m,GTMOAuth2ViewControllerTouch.h,GTMOAuth2ViewControllerTouch.m,GTMOAuth2ViewTouch.xib,SBJSON.h,SBJSON.m

您将在这里获得这些课程:https ://github.com/jonmountjoy/Force.com-iOS-oAuth-2.0-Example

注意:如果您在 ARC 环境下工作,则必须为以下文件禁用 ARC:
GTMHTTPFetcher.m、GTMOAuth2Authentication.m、GTMOAuth2SignIn.m、GTMOAuth2ViewControllerTouch.m

要在 Xcode 4 中禁用源文件的 ARC,请在 Xcode 中选择项目和目标。在目标“构建阶段”选项卡下,展开编译源构建阶段,选择库源文件,然后按 Enter 打开编辑字段,并键入 -fno-objc-arc 作为这些文件的编译器标志。

2.添加以下框架

security.framework , systemConfiguration.framework

3. 将您的应用注册到 google api 控制台...。这里: https ://code.google.com/apis/console

然后转到 ApiAccess 部分,为 iOS 应用程序创建客户端 ID。然后您将获得 clientID、ClientSecret 和 RedirectUrl

* 4. 现在是编码的时候了。. . . *
在您的控制器中创建一个登录按钮并为其设置操作。在这里,当用户单击按钮时,会调用 SignInGoogleButtonClicked 方法。

//import GTMOAuth2Authentication , GTMOAuth2ViewControllerTouch

#define GoogleClientID    @"paster your client id"
#define GoogleClientSecret @"paste your client secret"
#define GoogleAuthURL   @"https://accounts.google.com/o/oauth2/auth"
#define GoogleTokenURL  @"https://accounts.google.com/o/oauth2/token"

-(void) SignInGoogleButtonClicked
{

 NSURL * tokenURL = [NSURL URLWithString:GoogleTokenURL];

    NSString * redirectURI = @"urn:ietf:wg:oauth:2.0:oob";

    GTMOAuth2Authentication * auth;

    auth = [GTMOAuth2Authentication authenticationWithServiceProvider:@"google"
                                                             tokenURL:tokenURL
                                                          redirectURI:redirectURI
                                                             clientID:GoogleClientID
                                                         clientSecret:GoogleClientSecret];

    auth.scope = @"https://www.googleapis.com/auth/plus.me";

    GTMOAuth2ViewControllerTouch * viewcontroller = [[GTMOAuth2ViewControllerTouch alloc] initWithAuthentication:auth
                                                                                                authorizationURL:[NSURL URLWithString:GoogleAuthURL]
                                                                                                keychainItemName:@"GoogleKeychainName" delegate:self
                                                                                                finishedSelector:@selector(viewController:finishedWithAuth:error:)];

    [self.navigationController pushViewController:viewcontroller animated:YES];

}



//this method is called when authentication finished

- (void)viewController:(GTMOAuth2ViewControllerTouch * )viewController finishedWithAuth:(GTMOAuth2Authentication * )auth error:(NSError * )error
{

    if (error != nil) {

        UIAlertView * alert = [[UIAlertView alloc] initWithTitle:@"Error Authorizing with Google"
                                                         message:[error localizedDescription]
                                                        delegate:nil
                                                        cancelButtonTitle:@"OK"
                                                        otherButtonTitles:nil];
        [alert show];
    }
    else
    {

         UIAlertView * alert = [[UIAlertView alloc] initWithTitle:@"Alert !"
                                                         message:@"success"
                                                        delegate:nil
                                                        cancelButtonTitle:@"OK"
                                                        otherButtonTitles:nil];
        [alert show];

    }
}
于 2013-08-27T09:58:34.470 回答
0

我找到了。但后来我只能获取片段,即电子邮件正文的前几个词,而不是全部。我刚停下来,因为我没有找到任何其他方法。因为我使用的是 OAuth 2.0 。

于 2015-05-24T09:13:34.937 回答