iOSでFlattr API v2を使用する

私は現在、iOSアプリケーションを構築しており、Flattr-API v2よりもFlattr-Supportを追加したいと考えています。

私は既に https://flattr.com/apps/ で自分のアプリケーションを作成し、鍵と秘密を手に入れました。

問題は、アプリケーションタイプとして「クライアント」を選択しても、flattrのアプリケーション設定にコールバックURLを指定する必要があることです。さらに、http:// ...コールバックURLだけが入力フィールドに許可されているように見えるので、アプリケーションを開くためのコールバックURLを設定できません(myApp:// ...など)

クライアントアプリケーション用にFlattr oAuthプロセスを実装するにはどうすればよいですか? ウェブベースではない/ iOSアプリケーションでflattr認証を実装する方法の詳細な指示はありますか?

私はJDG OAuthConsumerライブラリーを使用する予定でしたが、これはうまくいかないようです - 他のiOSライブラリーを使用することはできますか?

3
単に重要ではない重要なノート:Appleはflattr APIを使用するアプリケーションを拒否し始めたので、おそらくそれを使用すべきではありません。
追加された 著者 Tim Sullivan,
追加された 著者 Thilo,
説明を楽しみにしています。私はoauth2の流れを意図したあなたのアイデアを与えるために何とか質問に答えました。幸運と何かが不明な場合はお気軽に尋ねてください!
追加された 著者 Simon Gate,
flattrリソースにエラーがありました。今すぐ修正する必要があります。もう一度同じことをしてみてください!
追加された 著者 Simon Gate,
gtm-oauth2ライブラリを使って解決策を見つけたようです。私はそれが本当にうまくいくかどうかをチェックし、明日の解決策を説明します。
追加された 著者 JanR,
申し訳ありませんが、今日はお答えできません。私は明日の午後にそれに戻ることを願っています
追加された 著者 JanR,
それはまだ働きませんでした。 oauth認証プロセス中にエラーは発生しませんが、 api.flattr.com/rest/v2/things/:id/flattr URLと認証トークン
追加された 著者 JanR,
私のアプリケーションから何かをうまく納得させました。ありがとう!
追加された 著者 JanR,

3 答え

私のiOSアプリケーションからFlattr API v2を使用して実装を簡単に説明します。

I'm currently using the "Google Toolbox for Mac - OAuth 2 Controllers": 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-loginを表示して、アプリケーションを認証することができます。

あなたはこの方法で認証トークンを使って物を平らにすることができます:

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 /はじめに#取得_許可_キー_チェーンを参照してください。

3
追加された
共有してくれてありがとう!私はあなたがそれを働かせることを嬉しく思っており、道に沿っていくつかのバグを埋めることができました。
追加された 著者 Simon Gate,

あなたがデスクトップ/モバイルアプリケーションを認証することを望んでいないときは、oauth2暗黙のグラントフローを使用することはありません。 flattrアプリケーションを登録する際には、アプリケーション固有のURIを使用してアプリケーションにコールバックします(ex。 iphone-application:// oauth-callback

私たちと一緒にアプリケーションを認証するときは、 code の代わりに response_type token を使用します。これにより、すぐにトークンが作成され、アプリケーションにリダイレクトされます。

Ex. request URL: https://flattr.com/oauth/authorize?client_id=2134&redirect_uri=iphone-application://oauth-callback&response_type=token

リソースの所有者がアプリケーションを承認する場合は、HTTP 302を送信し、リダイレクトURIにリダイレクトします。

Ex. response 302 Location: iphone-application://oauth-callback#access_token=e5oNJ4917WAaJaO4zvoVV2dt3GYClPzp&token_type=bearer

現在のところ、暗黙的な付与を行う方法を説明している詳細な文書はありませんが、私たちは文書を作成中です。私はすべての耳です。

https://github.com/nxtbgthng/OAuth2Client is a iOS oauth2 library but I don't know if it's any good.

1
追加された
私は何かのURIを受け入れるようにアプリのページを変更しました。 :)
追加された 著者 Simon Gate,
それは私が最初にそれがうまくいくと思った方法です。しかし、私はapplcation設定でiphone-application:// oauth-callbackを設定できると確信していますか?私が設定できるURLはhttp://のみでした...
追加された 著者 JanR,
0
追加された