Будучи новичком в iOS и Objective-C, я пытаюсь создать приложение, в котором пользователь может аутентифицироваться через Facebook, Google+ или еще 3 (российские) социальные сети.
Я знаю, что для Facebook я мог бы использовать Facebook SDK или Social.framework, но для остальных мне приходится использовать OAuth и UIWebView
, потому что для них пока нет хороших SDK.
(Однажды мне это уже удалось, но это было для приложения Adobe AIR, а теперь я пытаюсь научиться нативному...)
В Xcode 5.2 я подготовил очень простое приложение Master-Detail для iPhone и проверил его в GitHub:
Мой вопрос касается создания NSString для запроса GET (или тела в POST) -
В настоящее время у меня есть следующий неуклюжий исходный код в DetailViewController. ма>:
- (NSString*)buildUrl
{
NSString *key = _dict[kKey];
NSString *str = _dict[kAuthUrl];
if ([key isEqual: kFB]) {
str = [str stringByAppendingString:@"display=touch"];
str = [str stringByAppendingString:@"&response_time=token"];
str = [str stringByAppendingString:@"&client_id="];
str = [str stringByAppendingString:_dict[kAppId]];
str = [str stringByAppendingString:@"&redirect_uri="];
str = [str stringByAppendingString:_dict[kAppUrl]];
//str = [str stringByAppendingString:@"&state="];
//str = [str stringByAppendingString:rand(1000)];
} else if ([key isEqual: kGG]) {
} else if ([key isEqual: kMR]) {
} else if ([key isEqual: kOK]) {
} else if ([key isEqual: kVK]) {
}
return str;
}
Мои вопросы:
- Вместо
stringByAppendingString
могу ли я использовать что-нибудь получше? Например, NSArray (или даже лучше NSDictionary), а затем каким-то образом соединить его с амперсандом между ними? - Как избежать объектов HTML в значении
redirect_uri=
? - Мне нужно добавить случайное число в качестве значения
state=
, но я не уверен, какую функцию лучше всего использовать...
Вот что печатает мое приложение для приведенного выше кода. :
Запрос MyAuth[9626:70b]: { URL: https://graph.facebook.com/oauth/authorize?display=touch&response_time=token&client_id=432298283565593&redirect_uri=https://www.facebook.com/connect/login_success.html а> }
(что нехорошо: URL-адрес в конце не экранирован и нет случайного номера состояния).