1

モバイル アプリに Google+ ログインを追加しています。iOS アプリ用に新しいクライアント ID ( https://console.developers.google.com ) を作成しましたiOS アプリのクライアント ID

ドキュメントによると ( https://developers.google.com/+/mobile/ios/sign-in#enable_server-side_api_access_for_your_app )

「サーバーのアクセス トークンとリフレッシュ トークンを取得するには、サーバーがこれら 2 つのトークンと交換する 1 回限りの認証コードを要求できます。」

#pragma mark - GPPSignInDelegate Methods

- (void)finishedWithAuth: (GTMOAuth2Authentication *)auth error: (NSError *) error
{
    if (error) {
        NSLog(@"%@", error);
    } else {
        NSString *serverCode = [GPPSignIn sharedInstance].homeServerAuthorizationCode;

        if (serverCode) {
            [[AFHTTPSessionManager manager] POST:@"http://localhost:3000/user/connect/google"
                                      parameters:@{@"device": [[[UIDevice currentDevice] identifierForVendor] UUIDString],
                                                   @"account": @"google",
                                                   @"info": serverCode}
                                         success:^(NSURLSessionDataTask *task, id responseObject) {
                                             NSLog(@"Google+ Reponse: %@", responseObject);
                                         } failure:^(NSURLSessionDataTask *task, NSError *error) {
                                             NSLog(@"%@", error);
                                         }];
        }
    }
}

サーバー側でNodejs と Google API ノード クライアント ( https://github.com/google/google-api-nodejs-client/ ) を使用しています。

var google = require('googleapis');
var OAuth2 = google.auth.OAuth2;

var oauth2Client = new OAuth2(CLIENT_ID, CLIENT_SECRET, REDIRECT_URL);
var scopes = [ 'https://www.googleapis.com/auth/plus.me' ];

oauth2Client.getToken('the token from ios', function(err, tokens) { 
    if (err) { 
        console.log(err); 
    } else { 
        console.log(tokens); 
        oauth2Client.setCredentials(tokens); 
    } 
});

「invalid_grant」の応答を受け取ります

サーバーのクライアント ID は、アプリのクライアント ID と同じですか?

何か案は?ありがとう!

4

1 に答える 1