Использование Flattr API v2 с iOS - PullRequest
       19

Использование Flattr API v2 с iOS

3 голосов
/ 19 декабря 2011

В настоящее время я создаю приложение для iOS и хочу включить поддержку Flattr через Flattr-API v2.

Я уже создал свое приложение на https://flattr.com/apps/ и получил ключ и секрет.

Проблема в том, что я должен предоставить callback-URL в настройках приложения на flattr, даже если я выберу «client» в качестве типа приложения. Кроме того, в поле ввода разрешено указывать только http: // ... callback-URL, поэтому я не могу установить URL обратного вызова для открытия приложения (что-то вроде myApp: // ...)

Как мне реализовать процесс Flattr oAuth для клиентских приложений? Существуют ли подробные инструкции о том, как реализовать аутентификацию flattr в приложении для iOS без веб-интерфейса?

Я планировал использовать библиотеку JDG OAuthConsumer, но, похоже, это не сработало - какие-нибудь другие библиотеки iOS, которые я мог бы использовать?

Ответы [ 3 ]

3 голосов
/ 21 декабря 2011

Краткое описание моей реализации, использующей Flattr API v2 для создания вещи из моего приложения iOS:

В настоящее время я использую «Google Toolbox для Mac - Контроллеры OAuth 2»: http://code.google.com/p/gtm-oauth2/

Создание токена для аутентификации:

- (GTMOAuth2Authentication *)flattrAuth {

NSURL *tokenURL = [NSURL URLWithString:@"https://flattr.com/oauth/token"];
// We'll make up an arbitrary redirectURI.  The controller will watch for
// the server to redirect the web view to this URI, but this URI will not be
// loaded, so it need not be for any actual web page.
NSString *redirectURI = @"http://localhost/"; //for me localhost with / didn't work

GTMOAuth2Authentication *auth;
auth = [GTMOAuth2Authentication authenticationWithServiceProvider:@"MyApplication"
                                                         tokenURL:tokenURL
                                                      redirectURI:redirectURI
                                                         clientID:clientKey
                                                     clientSecret:clientSecret];
return auth;
}

Создание ViewController для аутентификации токена:

- (GTMOAuth2ViewControllerTouch*)getSignInViewController{
GTMOAuth2Authentication *auth = [self flattrAuth];

// Specify the appropriate scope string, if any, according to the service's API documentation
auth.scope = @"flattr";

NSURL *authURL = [NSURL URLWithString:@"https://flattr.com/oauth/authorize"];

GTMOAuth2ViewControllerTouch *viewController;
viewController = [[[GTMOAuth2ViewControllerTouch alloc] initWithAuthentication:auth
                                                              authorizationURL:authURL
                                                              keychainItemName:keychainItemName
                                                                      delegate:self
                                                              finishedSelector:@selector(viewController:finishedWithAuth:error:)] autorelease];

return viewController;
}

и метода делегата:

- (void)viewController:(GTMOAuth2ViewControllerTouch *)viewController
  finishedWithAuth:(GTMOAuth2Authentication *)auth
             error:(NSError *)error {
if (error != nil) {
    DLog(@"Flattr sign-in failed with error: %@", [error localizedDescription]);
} else {
    DLog(@"Flattr Signin success");
    authToken = [auth retain];
}
}

Вы можете отобразить Viewcontroller в вашем приложении - он отображает flattr-логин для пользователя, чтобы он мог аутентифицировать приложение.

Вы можете с помощью токена аутентификации скомпоновать объект следующим образом:

NSString* flattrURL = @"https://api.flattr.com/rest/v2/things/%qi/flattr";
NSURL* u = [NSURL URLWithString:[NSString stringWithFormat:flattrURL, item.flattrThingID]];
NSMutableURLRequest* request = [NSMutableURLRequest requestWithURL:u];
[authToken authorizeRequest:request completionHandler:^(NSError *error){
    if (error == nil) {
        // the request has been authorized
        NSURLConnection* connection = [[[NSURLConnection alloc] initWithRequest:request delegate:self] autorelease];

        if(!connection){
            //TODO: handle error
        } else {
            [connection start];
        }
    } else {
        //TODO: handle error
    }
}];

Теперь реализуйте методы делегата NSURLConnectection и анализируйте ответы JSON.

Библиотека GTMOAuth2 позволяет сохранять аутентифицированный токен в цепочке для ключей.Посмотрите их введение в http://code.google.com/p/gtm-oauth2/wiki/Introduction#Retrieving_Authorization_from_the_Keychain для получения инструкций.

1 голос
/ 19 декабря 2011

Если вы не хотите аутентифицировать настольное / мобильное приложение, вы не захотите использовать неявный поток грантов oauth2. Когда вы регистрируете свое приложение flattr, используйте специальный URI приложения, который будет вызывать ваше приложение, напр. iphone-application://oauth-callback.

Когда вы аутентифицируете приложение у нас, вы используете response_type token вместо code. Это сразу создаст токен и перенаправит вас обратно в ваше приложение.

Ex. URL запроса: https://flattr.com/oauth/authorize?client_id=2134&redirect_uri=iphone-application://oauth-callback&response_type=token

Если владелец ресурса авторизует ваше приложение, мы отправим HTTP 302 и перенаправим вас обратно на ваш адрес перенаправления.

Ex. ответ 302 Расположение: iphone-application://oauth-callback#access_token=e5oNJ4917WAaJaO4zvoVV2dt3GYClPzp&token_type=bearer

В настоящее время у нас нет подробной документации, объясняющей, как сделать неявное предоставление, но мы работаем над документацией. Между тем я весь слух.

https://github.com/nxtbgthng/OAuth2Client - это библиотека iOS oauth2, но я не знаю, хорошо ли это.

0 голосов
/ 07 июля 2012

Это выглядит хорошо: https://github.com/neonichu/FlattrKit

...