豆弁OAuth 2.0モバイルプラットフォームに対するサードパーティアプリケーションのライセンス

7053 ワード

最近、オープンプラットフォームが提供する資源を探して、サードパーティの応用練習をしています.
微博類オープンプラットフォームについては、かなり前にAndroidをしていた時に一度やったことがあるので、新鮮さはあまりありません.
ちょうど私は以前豆弁を游んで、豆弁コミュニティのいくつかの资源に対してやはり比较的に兴味を持って、例えばグループ、评论、本の映画の音楽の资源.
最後にAPIをブラウズした後、開発されたいくつかのインタフェースを発見したが、相対的に拡張アプリケーションを作るのは心が弱い.
例えば、同城のapiについては比較的力がありますが、豆弁にはクライアントがあることに気づきました.
豆弁放送は、類微博のように、公式のクライアントもあります.
最後に、ユーザーの活躍度が最も高いグループだと思っていたが、提供されず、同じ本や映画の評価情報も検索インタフェースを提供しただけだ.
私はいくつかがほしいです.例えば、人気のあるニュース、コメント、最後にRSSを呼び出して実現するしかないことを発見しました.そして、お父さんの単一の情報の内容は、説明だけで、詳細はありません.
しかし、すでにやった以上、練習手として、前のプロジェクトでずっとやっていたネットワーク層、論理層、データ処理は、UIコントロールにちょうど熟練しています.
まず、OAuth 2について豆弁を見てみましょう.0:
      OAuth2.0     :

          Javascript       (user-agent flow)
     WEB       (server-side flow)
       、            (native-application flow)

http://developers.douban.com/wiki/?title=oauth2豆弁ドキュメント.
iosはモバイルクライアントアプリケーションとして、主に3つ目のブロックを見ています.大体の状況を熟知したら、ライセンスモジュールを作る準備をします.
まず、クライアントが実現した効果図を見てみましょう.
1.まず、ドキュメントのapiドキュメントの説明を参照します.
flow   native-application flow
           ,         access_token。

  authorization_code

              ,       ,   authorization_code

https://www.douban.com/service/auth2/auth
  :

    	    
client_id	    ,       ,   APIKey
redirect_uri	    ,            ,                    。                     。
response_type	    ,      code    token 。     ,    code
scope	    ,       ,    ,      scope。      scope,      。
state	    ,                 ,              ,                  。
  :      HTTP GET  

  :

https://www.douban.com/service/auth2/auth?
  client_id=0b5405e19c58e4cc21fc11a4d50aae64&
  redirect_uri=https://www.example.com/back&
  response_type=code&
  scope=shuo_basic_r,shuo_basic_w
    :

        ,        redirect_uri,       

https://www.example.com/back?error=access_denied
        ,        redirect_uri,   autorization_code

https://www.example.com/back?code=9b73a4248

https://www.douban.com/service/auth2/authこのライセンスページです.このページをロードするときはurlアドレスにパラメータを入力する必要があります(keyとか、みんな知っていると思います)そのため、UIWebViewコントロールを自分で埋め込む必要があります(もちろん、ブラウザに直接ジャンプすればいいと言う人もいます)
これはtoken値を切り取るため、具体的に言及します.
ps:
ここでは主にこのリダイレクトアドレスパラメータの問題について説明します:redirect_uri=https://www.example.com/back
このパラメータは、アプリケーションを申請する際にも使用されます.これは、承認ページの「承認」または「拒否」後、ブラウザが自動的にこのアドレスページにリダイレクトし、urlアドレスにいくつか追加されたことを意味します.
コールバック情報は、この点にも言及されています(例えば、拒否をクリックした場合、https://www.example.com/back?error=access_denied、権限をクリックして成功したらtoken値に戻ります)
実はこのリダイレクトパラメータの意味はもっと多いと思いますが、実はwebクラスのアプリケーションのために設定されていると思います.webアプリケーションの最も基礎的なコンテナはブラウザであり、ライセンスや拒否にかかわらず、ライセンスインタフェースを離れた後、
ブラウザをジャンプさせる新しいアドレスを提供しなければなりませんが、モバイルアプリケーションでは、実際には必要ありません.
そのため、モバイルクラスクライアントが「oob」などを記入できるという資料が表示されます.また、モバイルクラスクライアントにとって最も良いライセンス方法も、リダイレクトアドレスを必要とせず、直接値を返す必要はありません.
気分がよくなるわけではありませんが、ここではapiプロセスが提供しているものをしばらく見てみましょう.
半日話したが、このパラメータはいったいどうやって記入するのか(そして豆弁申請時に記入しなければならず、自動的にフォーマットをチェックし、urlアドレスでなければならない).
我々の移動クラスアプリケーションは,このリダイレクトアドレスに対して実際には役に立たないが,1つのキャリアのためにいくつかの付加情報を返すために,これらの付加情報が必要であることを考慮した.
だから私は自分の趣味に基づいて「https://www.nono_lilith.com";
では、他のいくつかのパラメータについて、具体的にはドキュメントを参照してください.
例えば、私の認証urlアドレス+パラメータの結果:
    NSString *urlpath = [NSString stringWithFormat:@"https://www.douban.com/service/auth2/auth?client_id=%@&redirect_uri=%@&response_type=token&display=popup",_api_key,_redirect];.

2.次に、操作を許可および拒否した後の戻りです.
クライアントのコンセプトに従って、ライセンスが成功した場合、取得ライセンスコードを切り取って保存し、ユーザーにライセンス成功のプロンプトボックスを表示し、このライセンスインタフェースを閉じます.
同様に拒否も同様に,付加値を取得し,ユーザの拒否操作であることを判断し,同様にインタフェースを提示または閉じる.
ここでは,リダイレクトに返される付加的なパラメータの切り取りについて,文章全体の核心点について述べる.
#pragma mark UIWebViewDelegate methods
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
{
    BOOL b = YES;
    
    NSString *targetUrl = request.URL.absoluteString;
    if ([_douban_register isEqualToString:targetUrl]) {//  ,       
         [[UIApplication sharedApplication] openURL:[NSURL URLWithString:_douban_register]];
        b = NO;
    }else if ([targetUrl isEqualToString:_resure_url]) {//    
        b = NO;
        [self back];
    }
    
    NSRange range = [targetUrl rangeOfString:@"https://www.nono_lilith.com/#access_token="];
    if (range.length > 0) {//     ,     
        NSString *tokenMore = [targetUrl substringFromIndex:range.location+range.length];
        NSString *token = [[tokenMore componentsSeparatedByString:@"&"] objectAtIndex:0];
        NSLog(@"   token = %@",token);
        _delegate = (NLAppDelegate*)[[UIApplication sharedApplication] delegate];
        _delegate.isLogin = YES;
        _delegate.token = token;
        b = NO;
        [self back];
    }
    
    return b;
}
- (void)webViewDidStartLoad:(UIWebView *)webView
{
    
}
- (void)webViewDidFinishLoad:(UIWebView *)webView
{
//    NSString *url =  webView.request.URL.absoluteString;
    
    
}
- (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error
{
    
}


-(void)back
{
    [self.navigationController popViewControllerAnimated:YES];
}

こちらはwebviewのエージェントメソッドを利用して切り取りとジャンプを実現しています.
主な操作は、最初のエージェントメソッドにあります.
このメソッドはbool値を返し、webviewがリクエストを発生するかどうかを制御します.
NSString *targetUrl = request.URL.absoluteString;

Webviewがロードするurlアドレスを取得できます.
まず、前の行をスキップして登録したコメントを判断し、主にリダイレクトurlと彼が追加した値を切り取ることを見ます.
 NSRange range = [targetUrl rangeOfString:@"https://www.nono_lilith.com/#access_token="];
    if (range.length > 0) {//     ,     
        NSString *tokenMore = [targetUrl substringFromIndex:range.location+range.length];
        NSString *token = [[tokenMore componentsSeparatedByString:@"&"] objectAtIndex:0];
        NSLog(@"   token = %@",token);
        _delegate = (NLAppDelegate*)[[UIApplication sharedApplication] delegate];
        _delegate.isLogin = YES;
        _delegate.token = token;
        b = NO;
        [self back];
    }

具体的にどのように切り取るかは実はいくつかのマイクロ操作で、あなたの考えを見ています.実現できる限り.
このコードは、リダイレクト切り取りtokencodeをキャプチャすることです.その後boolはNOに設定され、つまりジャンプしたり、直接popしたり、インタフェースをキャンセルしたりする必要はありません.
そしてユーザ拒否操作の判断
else if ([targetUrl isEqualToString:_resure_url]) {//    
        b = NO;
        [self back];
    }
   NSString *_resure_url =  @"https://www.nono_lilith.com/?error=access_denied";
操作はほぼ同じです.
以上は基本的に豆弁OAuth 2である.0ライセンスのプロセスです.
ここでは小さな改善もできます.
ページから見ると、私たちがクリックできる2つの操作もあります.
1.豆弁オープンプラットフォームの条項は、クリックすると豆弁のトップページにジャンプします(現在のテスト)、私たちのwebviewは何のボタンを返す必要がありませんので、条項を見た後、ユーザーは許可したいと思っています.
あの授権ページのインタフェースに戻れないことに気づいた~~
同じようにその登録操作もあり、豆弁登録インタフェースにジャンプします.まず、上記の点に遭遇します.もっと重要なのは、豆弁登録が居住地を選択するとき、私たちが埋め込んだwebviewはインタラクティブではありません.
(どの属性やパラメータを開くか、Androidを覚えているときにjs属性を開始するなど)ので、safariブラウザにジャンプして関連操作を実行するのが一番簡単です.
つまりurlアドレスをキャプチャしてジャンプ操作を行います.
以上が現在の豆弁OAuth 2である.0モバイルクライアントのライセンスの処理方法です.apiの多くが実際に改善され、テストされているのを見たからです.
最後に言いたいのは、グループAPIを開かないことです.