我正在为 iOS 开发一个移动应用程序,您可以在其中登录 facebook 并授予移动应用程序的权限。
因此,您会获得多个用户数据,例如他的令牌、姓名、...
问题来了:我们也想登录我们的服务器。为此,我们必须创建一个会话(在用户连接到移动应用程序期间存在的临时对象。它在登录完成时创建,在注销完成时销毁),我没有知道如何创建它。这些是有关创建会话的技术规范:
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-要销毁,方法是“获取”,并且仅限于注册用户。
一旦我获得了信息并获得了 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-在这里,我有两种方法可以登录到我的服务器,即创建一个会话。
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- 秒(非常相似)
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]”,在代码中设置断点后显示它,但是当我尝试时,我只得到没有响应。
如何检查服务器是否回答了会话创建请求?或者,它会返回给我一个 cookie 吗?如果是这样,我必须用它做什么?
我知道这是一个漫长而复杂的问题(特别是长),而且我的英语不是那么好,但我已经尝试了好几个星期,我很绝望。
非常感谢!!