我正在为iOS开发一个moblie应用程序,您可以在其中登录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-要销毁,该方法为“get”,仅限注册用户使用。
一旦我获得了信息并且我已经获得了facebook登录数据,我的问题是:
我该怎么办?我到现在所做的是:
1-我写了“路线”地址:
NSURL *url=[NSURL URLWithString:@"http://mi_url.com/session.json"];
2-我创建了一个nsmutablestring来创建一个字符串作为会话要求的数据,以及之前获得的数据。
3-我创建了一个带有我想要的数据和结构的nsmutablestring作为模板,之后,我用我获得的值修改它(虽然这些可以通过多种方式完成)。 / p>
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?或者我应该将“post2”数据(它是NSString)提供给其他数据类型(Json,...)?
此外,我想我也应该开发cookie来控制数据,但我不知道如何在这段代码中引入它们。事实上,如果没有cookie,它会工作吗?我知道必须完成它们的特定功能(保存,加载......),但是,它们必须在创建会话的同时生成还是紧接在之后生成?
现在,对我来说最重要的是实现创建会话,并且服务器提供200作为回报。这意味着“ok”,用户被正确记录。
但是,怎么知道呢?
在几个教程中,描述了在“所有输出”中编写“po [response statusCode]”,在代码中设置断点后,它会显示它,但是当我尝试时,我只能得到没有响应。
如何检查服务器是否回答会话创建请求?或者,它会给我一个饼干吗?如果确实如此,我该怎么办呢?
我知道这是一个漫长而复杂的问题(特别长),而且我的英语不太好,但我已经尝试了好几周而且我很绝望。
非常感谢!!