2012-12-23 7 views
7

自分のYouTubeアカウントからデータを取得して表示するためにユーザーのGoogleアカウントを使用するiOSアプリケーションを作成しています。 最初の手順はgtm2を使用してユーザーを認証し、アクセストークンとリフレッシュトークンを取得する 問題は、アクセストークンが60分後に期限切れとなり、ログインしてアプリケーションを再度許可する必要があるということです... 私は、新しいアクセストークンを取得するリフレッシュトークン documetationからこれを使用して: - >私の質問は、目的のcでアクセストークンを取得するPOST要求を行う方法です これは私が使用する必要があるデータです:iOSのgoogle oauth 2.0から取得したトークンをリフレッシュする方法

POST /o/oauth2/token HTTP/1.1 

Host: accounts.google.com 
Content-Type: application/x-www-form-urlencoded 

client_id=21302922996.apps.googleusercontent.com& 
client_secret=XTHhXh1SlUNgvyWGwDk1EjXB& 
refresh_token=1/6BMfW9j53gdGImsixUH6kU5RsR4zwI9lUVX-tqf8JXQ& 
grant_type=refresh_token 

これは私が使用していたコードです:

NSString *post =[[NSString alloc] initWithFormat:@"client_secret=%@&grant_type=refresh_token&refresh_token=%@&client_id%@",kGoogleClientSecretKey,kRefreshToken,kGoogleClientIDKey]; 
    NSLog(@"%@",post); 
    NSURL *url=[NSURL URLWithString:@"https://accounts.google.com/o/oauth2/token"]; 

    NSData *postData = [post dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES]; 

    NSString *postLength = [NSString stringWithFormat:@"%d", [postData length]]; 

    NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init] ; 
    [request setURL:url]; 
    [request setHTTPMethod:@"POST"]; 
    [request setValue:postLength forHTTPHeaderField:@"Content-Length"]; 
    [request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"]; 
    [request setHTTPBody:postData]; 


    NSError *error; 
    NSURLResponse *response; 
    NSData *urlData=[NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error]; 

    NSString *data=[[NSString alloc]initWithData:urlData encoding:NSUTF8StringEncoding]; 
    NSLog(@"%@",data); 

を私が手にエラーがある: { "エラー": "INVALID_REQUEST" }

+0

に私はObjective-Cのクライアントライブラリに慣れていないんだけど、他の言語のクライアントライブラリのほとんどは自動的にOAuth 2トークンをリフレッシュするためのサポートを持っています有効期限が切れたアクセストークンを使用してリクエストを行うときにあなたのために。手動で更新する必要がありますか?もしそうなら、最も良い場所はおそらくhttps://groups.google.com/forum/?fromgroups#!forum/gdata-objectivec-client –

答えて

2

あなたはあなたの形式で=が欠落しています文字列。

変更

NSString *post =[[NSString alloc] initWithFormat:@"client_secret=%@&grant_type=refresh_token&refresh_token=%@&client_id%@",kGoogleClientSecretKey,kRefreshToken,kGoogleClientIDKey]; 

NSString *post =[[NSString alloc] initWithFormat:@"client_secret=%@&grant_type=refresh_token&refresh_token=%@&client_id=%@",kGoogleClientSecretKey,kRefreshToken,kGoogleClientIDKey]; 
+1

です。ありがとうございました+ Gabrieleあなたは人生の節約者です:) – Rifinio

+1

喜んで助けて。問題が解決したら回答を受け入れることを検討してください;) –

+0

完了.......... – Rifinio

関連する問題