2011年11月20日日曜日

認証からAPI利用まで


前回の投稿から丸一月経ってしまいましたorz



今回は認証とAPIの利用までを説明したいと思います。

大まかな認証からAPI利用までの流れは次の通りです

  1. ヘッダファイルのインクルード
  2. クラスMixiの初期化
  3. 認証
  4. APIの利用

1. ヘッダファイルのインクルード
SDKを利用するソースコードでヘッダファイルをインポート

#import "MixiSDK.h"

これでOK

2.クラスMixiの初期化
プログラムを起動するたびに、クラスを初期化する必要があります 


    
Mixi* mixi = [[Mixi sharedMixi] setupWithType:kMixiApiTypeSelectorGraphApi
                                   clientId:kMixiClientID
                                     secret:kMixiSecret 
                                      appId:kAppID];

clientIdやsecretはmixi Developer Centerより入手できます。
ログインしたら、Consumer IDやConsumer Secretと表示されているのがそれです。


3.認可
このアプリを、各ユーザーがアカウントを用いて利用することを認可します。
といっても、特別難しい事はありません。以下のコードで認可する事が出来ます。


[mixi authorize:@"r_profile", @"r_voice", @"w_voice", nil];    

Mixi#autorize:を用いる事で認可をすることができます。実際の動作としては、
mixi公式アプリに移り、そこから認可する、といった形に成ります。
このサンプルでは、profileのread、voiceの読み書きを認可しています。

認可の結果は
UIApplicationDelegate#application:openURL:sourceApplication:annotation:
で受け取る事が出来ます。

一度認可を行うと、この処理を呼ぶ必要はありません。認可されているかどうかは
[mixi isAuthorized]
で確認することが出来ます。
また、認可を外したい場合は、mixiの利用アプリ一覧からユーザーが解除します。

4.APIの利用
APIは

  1. HTTPリクエストを作る
  2. リクエストを投げる
  3. 結果を処理する
の三段階で行います。

まず、HTTPリクエストの作成です。エンドポイントを指定し、
リクエストのパラメータを決定します。
パラメータの取り方は何種類かあり、NSDictionaryで指定するもの、NSObjectで指定するものなどがあります。
例えば、NSObjectを列挙し、ボイスを投稿するのであれば

  
MixiRequest *request = [MixiRequest postRequestWithEndpoint:@"/voice/statuses" 
                 paramsAndKeys:voice, @"status", nil];

とすることで、POSTリクエストを作る事が出来ます。
voiceは投稿内容の入ったNSStringオブジェクトです。


つぎにリクエストを投げるのですが、これは
  [[Mixi sharedMixi] sendRequest:request delegate:self];
とすることで投げる事が出来ます。
delgateは結果を処理するクラスで、この場合は自分で受け取ってから処理を行います。


そして、結果の処理です。
今回はPOSTリクエストを投げました。成功した場合は、つぶやきの内容(多分)が帰ってきます。失敗した場合はエラーコードがおそらく帰ってくると思います。
APIを処理するメソッドは

- (void)mixi:(Mixi *)mixi didFinishLoading:(NSString *)data
- (void)mixi:(Mixi *)mixi didSuccessWithJson:(NSDictionary *)data
などがあります。API実行結果を表示するサンプルは以下のようになります。
- (void)mixi:(Mixi *)mixi didFinishLoading:(NSString *)data{
    NSLog(@"API実行結果%@", data);
}

以上でAPIの利用までができると思います。