7

さまざまな Google サービスへのアクセスを提供する Google のサービスを見つけましたGoogle APIs。iPhone でプロジェクトをセットアップし、iOS アプリケーション (を介してOAuth2.0) とネイティブ アプリケーションへの API アクセスを作成することができました。iPhone アプリにネイティブ API を使用したいと考えていました。この API は、email、fullname、firstname、lastname、google_id、gender、dob、profile_image を提供します。これらを iPhone アプリケーションで使用するにはどうすればよいですか? サンプル アプリやスニペットはありますか?

私を助けてください。

これが私のコードです:

-(void) loadGmail_Login
{
    NSString *keychainItemName = nil;
    if ([self shouldSaveInKeychain]) {
        keychainItemName = kKeychainItemName;
    }

    // For GTM applications, the scope is available as
    NSString *scope = @"http://www.google.com/m8/feeds/";

    // ### Important ###
    // GTMOAuthViewControllerTouch is not designed to be reused. Make a new
    // one each time you are going to show it.

    // Display the autentication view.
    GTMOAuthAuthentication *auth;
    auth = [GTMOAuthViewControllerTouch authForGoogleFromKeychainForName:kKeychainItemName];

    GTMOAuthViewControllerTouch *viewController = [[[GTMOAuthViewControllerTouch alloc]
                                                    initWithScope:scope
                                                    language:nil
                                                    appServiceName:keychainItemName
                                                    delegate:self
                                                    finishedSelector:@selector(viewController:finishedWithAuth:error:)] autorelease];

    // You can set the title of the navigationItem of the controller here, if you want.
    // Optional: display some html briefly before the sign-in page loads
    NSString *html = @"<html><body bgcolor=silver><div align=center>Loading sign-in page...</div></body></html>";
    [viewController setInitialHTMLString:html];

    [[self navigationController] pushViewController:viewController animated:YES];

}

- (void)viewController:(GTMOAuthViewControllerTouch *)viewController
      finishedWithAuth:(GTMOAuthAuthentication *)auth
                 error:(NSError *)error
{
    if (error != nil)
    {
        // Authentication failed (perhaps the user denied access, or closed the
        // window before granting access)
        NSLog(@"Authentication error: %@", error);
        NSData *responseData = [[error userInfo] objectForKey:@"data"]; // kGTMHTTPFetcherStatusDataKey
        if ([responseData length] > 0) {
            // show the body of the server's authentication failure response
            NSString *str = [[[NSString alloc] initWithData:responseData
                                                   encoding:NSUTF8StringEncoding] autorelease];
            NSLog(@"%@", str);
        }

        [self setAuthentication:nil];
    }
    else
    {
        // save the authentication object
        [self setAuthentication:auth];

        // Just to prove we're signed in, we'll attempt an authenticated fetch for the
        // signed-in user
        [self doAnAuthenticatedAPIFetch];
    }

}

- (void)doAnAuthenticatedAPIFetch
{
    NSString *urlStr;

    // Google Contacts feed
    //
    //    https://www.googleapis.com/oauth2/v2/userinfo
    urlStr = @"http://www.google.com/m8/feeds/contacts/default/thin";

    NSURL *url = [NSURL URLWithString:urlStr];
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
    [mAuth authorizeRequest:request];

    NSError *error = nil;
    NSURLResponse *response = nil;
    NSData *data = [NSURLConnection sendSynchronousRequest:request
                                         returningResponse:&response
                                                     error:&error];
    if (data) {
        // API fetch succeeded
        NSString *str = [[[NSString alloc] initWithData:data
                                               encoding:NSUTF8StringEncoding] autorelease];
        NSLog(@"API response: %@", str);

        GGCXml_Adaptor *localAlphabetXMLParser = [[GGCXml_Adaptor alloc] init];
        [localAlphabetXMLParser processBooksXML:data];
        [localAlphabetXMLParser release];
        //        [self updateUI];



    } else {
        // fetch failed
        NSLog(@"API fetch error: %@", error);
    }
}

- (void)setAuthentication:(GTMOAuthAuthentication *)auth {
    [mAuth autorelease];
    mAuth = [auth retain];
}
4

3 に答える 3

2

まず、Google API からトークンを取得する必要があります。この最初のステップでは、このチュートリアルに従う必要があります。このリンクの最後には、Google API からトークンを取得するための iOS のソース コード全体があります。

http://technogerms.com/login-with-google-using-oauth-2-0-for-ios-xcode-objective-c/

次に、次のステップで、そのトークンを Google API に送信してユーザー データを要求する必要があります。最初のステップが必要だったので、検索結果を共有します

于 2014-01-11T20:38:59.740 に答える
1

このチュートリアルとソースコードのリンクを試してください

..それは私にとってはうまくいきます。

1. チュートリアル リファレンス: http://technogerms.com/login-with-google-using-oauth-2-0-for-ios-xcode-objective-c/

2. API リファレンス : https://code.google.com/apis/console/

3. ソース コード: https://github.com/emysa341/Login-with-gmail-google-g--using-oath-2.0-protocol/archive/master.zip

于 2014-01-10T10:14:21.107 に答える
0

これは他の誰にも役立つと思います.以下の手順に従って、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 でプロジェクトとターゲットを選択します。ターゲットの [Build Phases] タブで、[Compile Sources] ビルド フェーズを展開し、ライブラリ ソース ファイルを選択してから、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];

    }
}
于 2014-07-08T10:56:24.117 に答える