Facebookにログオンしてモバイルアプリケーションに許可を与えるiOS用のモバイルアプリケーションを開発しています。
これにより、彼のトークン、名前など、複数のユーザーデータを取得します...
ここで問題が発生します。サーバーにもログインしたいのです。そのためには、セッション (ユーザーがモバイル アプリケーションに接続している間に存在する一時的なオブジェクト。ログインが完了すると作成され、ログアウトが完了すると破棄される) を作成する必要があります。それを作成する方法を知っています。これらは、セッションの作成に関する技術仕様です。
1- 新しいユーザー セッションを作成するには:
「ルート」、メソッドは「ポスト」、パブリック「アクセス許可」、パラメーターは次のとおりです。
PARAMS:
provider : string [facebook] uid : string
credentials : [
token: string
secret: string ]
description : text location : string email : string
info : [
name : string nickname : string image : string email : string
]
2- 破棄するには、メソッドは「get」であり、登録ユーザーに制限されています。
情報を取得し、Facebookのログインデータを取得したら、私の質問は次のとおりです。
どうすればいいですか?私が今までやったことは次のとおりです。
1-「ルート」アドレスを書きました:
NSURL *url=[NSURL URLWithString:@"http://mi_url.com/session.json"];
2-以前に取得したデータを使用して、セッションが要求するデータとして文字列を作成するために、nsmutablestring を作成しました。
3-必要なデータと構造をテンプレートとして使用して nsmutablestring を作成し、その後、取得した値でそれを変更します (ただし、それらはさまざまな方法で実行できます)。
NSMutableString * miJson= [NSMutableString stringWithString: @"{\"uid\": *0, \"credentials\":facebook {\"token\" : *1, \"secret\": *2}, \"provider\": \"facebook\", \"info\": {\"name\" : *3, \"nickname\": *4,\"image\" : *5, \"email\": *6}}"];
[miJson replaceCharactersInRange: [miJson rangeOfString: @"*0"]withString:@"100000389990235"];
[miJson replaceCharactersInRange: [miJson rangeOfString: @"*1"]withString:_tokens];
[miJson replaceCharactersInRange: [miJson rangeOfString: @"*2"]withString:_tokens];
[miJson replaceCharactersInRange: [miJson rangeOfString: @"*5"]withString:@"https:\/\/graph.facebook.com\/*0\/picture"];
[miJson replaceCharactersInRange: [miJson rangeOfString: @"*0"]withString:@"100000389990235"];
[miJson replaceCharactersInRange: [miJson rangeOfString: @"*4"]withString:_name];
[miJson replaceCharactersInRange: [miJson rangeOfString: @"*3"]withString:_name];
[miJson replaceCharactersInRange: [miJson rangeOfString: @"*6"]withString:@"beruk@yahoo.es"];
//Here I have created a nsstring with the complete data:
NSString *post2=miJson;
4- ここでは、サーバーにログインする方法が 2 つあります。つまり、セッションを作成します。
4.1- 最初:
NSData *postData = [post2 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/json" forHTTPHeaderField:@"Accept"];
[request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];
[request setHTTPBody:postData];
4.2- 2 番目 (非常に類似)
NSData* postData= [post2 dataUsingEncoding:NSUTF8StringEncoding];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"POST"];
[request setValue:[NSString stringWithFormat:@"%d", postData.length] forHTTPHeaderField:@"Content-Length"];
[request setValue:@"application/x-www-form-urlencoded charset=utf-8" forHTTPHeaderField:@"Content-Type"];
[request setHTTPBody:postData];
NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:request
delegate:self];
[connection start];
私はたくさんのチュートリアルを見てきましたが、以前の方法が最善のようですが、以下に示すように、afnetworking で何かを行う必要があるかもしれません。
NSString *urlsAsString=@"http://mi_url.com/sessions.json";
NSURL *url= [NSURL URLWithString:urlsAsString];
NSURLRequest *request=[NSURLRequest requestWithURL:url];
AFJSONRequestOperation *operation =[AFJSONRequestOperation JSONRequestOperationWithRequest:request success:^(NSURLRequest *request, NSHTTPURLResponse *response, id JSON) {
} failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error, id JSON)
{
//ERROR
NSLog(@" Error contacting por Facebook: %@", [error localizedDescription]);
}];
[operation start];
または、asinhttprequest で行う必要がありますか? 多分nuserdefaultで?または、NSString である「post2」データを別のデータ型 (Json など) に指定する必要がありますか?
また、データを制御するために Cookie も開発する必要があると思いますが、このコードにそれらを導入する方法がわかりません。実際、Cookie がなくても機能しますか? それらの特定の機能を実行する必要があることは知っています(保存、ロードなど)が、セッションの作成と同時に、または直後に生成する必要がありますか?
さて、私にとっての主なことは、セッションを作成し、サーバーが 200 を返すことです。これは、ユーザーが正しくログに記録されていることを意味します。
しかし、それを知る方法は?
いくつかのチュートリアルで「すべての出力」に「po [response statusCode]」と書いて、コードにブレークポイントを設定したら表示されると書いてあるのですが、いざやってみると無反応しか出ません。
サーバーがセッション作成リクエストに応答するかどうかを確認するにはどうすればよいですか? または、それは私にクッキーを返しますか? もしそうなら、私はそれで何をしなければなりませんか?
これが長くて複雑な質問 (特に長い) であることと、私の英語があまり上手ではないことはわかっていますが、何週間もあらゆることを試してきましたが、必死です。
どうもありがとうございました!!