はじめに
mixiはSNSだけではなくプラットフォームとしての側面も持っており、
mixiではスマートフォン上でのmixiプラットフォームの利用を促進するために、
mixi API SDK for iOSとは
mixi API SDK for iOS
MixiRequest *request = [MixiRequest
requestWithEndpoint:@"/people/@me/@self"];
[[Mixi sharedMixi] sendRequest:request
delegate:self];
mixi SDK
- シングルサインオンができる
- 認可・
トークンの期限切れなどを気にせずAPIの呼び出しだけに専念して開発できる - mixiアプリはmixi内の検索機能で探すことができ、
ユーザがアプリを見つけやすい
もちろん利点だけではありません。現時点では次のような欠点も存在します。
- 認可をmixi公式アプリに依存するため開発には実機が必要になる
- iPadには対応していない
これらの点が受け入れられない場合は、
mixi API SDK for iOSを準備する
mixi SDK
事前準備
先の項目に進む前に下記を済ませておいてください。誌面の都合上詳細な説明は省略します。
- iPhoneアプリを実機で動作させられるようmixi公式アプリがインストールされた実機を用意し、
各種登録を済ませる - mixiパートナー登録をする。個人パートナーの方はクレジットカード番号も登録する
[1]
アプリ登録
mixi SDK
アプリ情報の登録で重要な設定項目は次のとおりです。
- mixiアプリの場合
- アプリ対応範囲:
「iOS版」 にチェックを入れる - Graph APIの場合
- 起動URIスキーム:mixi SDK
(iOS) を使用するアプリの起動のためのURIスキームを入力する
プロジェクトの設定
mixi Developer Centerの
さらにmixi SDK
- CFNetwork.
framework - Security.
framework - SystemConfiguration.
framework
最後にmixi Developer Centerのアプリ情報に表示されている起動URIスキームをプロジェクトに追加してください。mixiアプリの場合はデフォルトではmixiapp-、
mixi API SDK for iOSを利用する
mixi SDK
APIを呼び出す準備をする
mixi SDK
(中略)
#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を使用して自分の友人一覧を取得してみましょう
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を見てみます
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のようなものがあります。これらはすべてオプショナルですので必要なメソッドだけを実装してください。
メソッド | 説明 |
---|---|
-(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実行結果をコンソール表示するには、
-(void)mixi:(Mixi*)mixi didFinishLoading:(NSString*)data {
NSLog(@"Result: %@", data);
}
さいごに
駆け足でしたが、
mixiでは開発エンジニアを募集しています。
詳細はこちら
→ http://