mixi API SDK for iOSを利用する
mixi SDK
APIを呼び出す準備をする
mixi SDK
リスト2 API呼び出しの下準備
(中略)
#import "MixiSDK.h" // ―― ①
(中略)
@implementation MixiSDKSampleAppDelegate
(中略)
-(BOOL)application:(UIApplication *)application
didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
(中略)
Mixi *mixi = [Mixi sharedMixi]; ―― ②
[mixi setupWithType:kMixiApiTypeSelectorGraphApi ―― ③
clientId:kMixiGraphClientId secret:kMixiGraphClientSecret
appId:kAppId];
[mixi restore]; ―― ④
return YES;
}
(中略)
-(BOOL)application:(UIApplication *)application ―― ⑤
openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication
annotation:(id)annotation {
NSError *error = nil;
Mixi *mixi = [Mixi sharedMixi];
NSString *apiType = [mixi application:application ―― ⑥
openURL:url sourceApplication:sourceApplication
annotation:annotation error:&error];
if (error) {
NSLog(@"エラーが発生しました: %@", error);
} else if ([apiType isEqualToString:kMixiAppApiTypeToken]) {
NSLog(@"認可処理に成功しました");
} else if ([apiType isEqualToString:kMixiAppApiTypeRevoke]) {
NSLog(@"認可解除処理に成功しました");
[mixi logout] ―― ⑦
}
return YES;
}
(中略)
- ① mixi SDK
(iOS) を利用するには MixiSDK. h をインポートします - ② API実行のほとんどはMixiインスタンスを通して行われます。Mixiクラスは直接インスタンス化されることはほとんどなく,
通常はシングルトンインスタンスをsharedMixiメソッドで取得して利用します - ③ Mixiオブジェクトは使用前にセットアップが必要です。アプリケーションの起動時にMixi#setupWithType:clientId:secret:appId:メソッドを呼び出してシングルトンインスタンスをセットアップしましょう。本例では説明を簡単にするためクライアントシークレットを定数として保持していますが,
実際はリバースエンジニアリングなどでシークレットが流出する可能性を考えて, よりセキュアな保持方法を検討してください - ④ Mixi#restoreメソッドで前回終了時のトークンを復帰しておきます
- ⑤,
⑥ アクセストークン取得や認可解除の結果は公式アプリからSDKにURLを通じて渡されます。UIApplicationDelegate#application:openURL:sourceApplication:
annotation:で受け取った引数をそのままMixi#application:openURL:sourceApplication:annotation:error:に渡してください - ⑦ 公式アプリ経由で行う認可解除処理はあくまでもサーバ側での処理です。SDKは独自に認可情報を保持しているので,
サーバでの認可解除後にはMixi#logoutメソッドでSDK側の情報もクリアします
APIを実行する
まずはPeople APIを使用して自分の友人一覧を取得してみましょう
リスト3 People API呼び出しの例
Mixi *mixi = [Mixi sharedMixi];
if ([mixi isAuthorized]) { ―― ①
MixiRequest *request =
[MixiRequest requestWithEndpoint:@"/people/@me/@friends"]; ―― ②
[mixi sendRequest:request delegate:self]; ―― ③
} else if (![mixi authorize:@"r_profile", nil]) { ―― ④
MixiWebViewController *vc = MixiUtilDownloadViewController(self,
@selector(closeDownloadView)); ―― ⑤
[self presentModalViewController:vc animated:YES];
}
- ① APIを呼び出す前に認可が完了しているかをMixi#isAuthorizedで調べます
- ②,
③ 認可が完了していればAPIを呼び出せます。MixiRequestオブジェクトにAPI呼び出しに必要な情報を格納し, Mixi#sendRequest:delegate:メソッドに渡してください。Mixi#sendRequest:delegate:メソッドの第2引数はAPIの実行結果を受け取るデリゲートです。詳細は次の節を参照 - ④ 認可が完了していない場合はMixi#authorize:メソッドに必要なスコープを渡して認可画面を呼び出します。認可はmixi公式アプリが行いますので,
本メソッド呼び出し後に画面がmixi公式アプリと切り替わります。認可の結果は先の節で実装したUIApplicationDelegate#application:openURL:sourceApplication:
annotation:メソッドで受け取ります - ⑤ Mixi#authorize:がNOを返す場合はmixi公式アプリがインストールされていないか古いと判断できるので,
mixi公式アプリのダウンロード画面を開きます
次に投稿APIの例としてPhoto APIを見てみます
リスト4 Photo API呼び出しの例
NSString *path = [[NSBundle mainBundle] pathForResource:@"mixi_map_logo" ofType:@"png"];
UIImage *image = [[[UIImage alloc] initWithContentsOfFile:path] autorelease];
MixiRequest *request = [MixiRequest
postRequestWithEndpoint:@"/photo/mediaItems/"
body:image paramsAndKeys:@"mixiロゴ", @"title", nil]; ―― ①
[mixi sendRequest:request delegate:self]; ―― ②
- ① 情報の投稿にはMixiRequest#postRequestWith…系のメソッドが利用できます
- ② 情報の投稿でもMixi#sendRequest:delegate:の使用方法は先の例と同じです
APIを呼び出すために利用できるメソッドは上記以外にも存在します。詳細はmixi SDK
APIの実行結果を受け取る
非同期に実行したAPIの結果はMixiDelegateプロトコルを実装したデリゲートオブジェクトで受け取ります。MixiDelegateプロトコルで宣言されるメソッドには表1のようなものがあります。これらはすべてオプショナルですので必要なメソッドだけを実装してください。
表1 MixiDelegateプロトコルで宣言されるメソッド
メソッド | 説明 |
---|---|
-(void)mixi:(Mixi*)mixi didFinishLoading:(NSString*)data | APIの実行終了 |
-(void)mixi:(Mixi*)mixi didSuccessWithJson:(NSDictionary*)data | APIの実行成功 |
-(void)mixi:(Mixi*)mixi didCancelWithConnection:(NSURLConnection*)connection | APIの実行キャンセル |
-(void)mixi:(Mixi*)mixi didFailWithConnection:(NSURLConnection*)connection error:(NSError*)error | APIの呼び出し失敗 |
-(void)mixi:(Mixi*)mixi didFailWithError:(NSError*)error | API の実行失敗 |
たとえば成否によらずAPI実行結果をコンソール表示するには,
リスト5 API実行結果をコンソール表示する
-(void)mixi:(Mixi*)mixi didFinishLoading:(NSString*)data {
NSLog(@"Result: %@", data);
}
さいごに
駆け足でしたが,
mixiでは開発エンジニアを募集しています。
詳細はこちら
→ http://