1

我正在为 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 吗?如果是这样,我必须用它做什么?

我知道这是一个漫长而复杂的问题(特别是长),而且我的英语不是那么好,但我已经尝试了好几个星期,我很绝望。

非常感谢!!

4

0 回答 0