Mixi SDK for iOSを使う際の注意

mixi SDK for iOSを使ってGraph APIを叩く機会があり、ちょっとはまったのでメモ。

環境

iOS 5.0
Xcode 4.2
mixi SDK for iOS ver.1.2

注意点

基本的にはmixiのドキュメント通りに実装すれば問題ありませんが、いくつか注意したほうがいい点が。

mixi公式アプリがインストールされている環境のみで動作する

FacebookのSDKのように未インストールの場合はSafariで認証、といった機能はありません。そのため、シミュレータでは動作しません。

ドキュメントはdocs/index.htmlからアクセス

SDKをダウンロード・解凍してできたディレクトリの中のdocs/index.htmlを開くことで、詳細なドキュメントを読むことができます。

なぜかエラーしていないときにもerror != nilになる

公式ドキュメントにはUIApplicationDelegate#application:openURL:sourceApplication:annotation:に以下のコードを追加するように書いてあります。

NSError *error = nil;
NSString *apiType = [[Mixi sharedMixi] application:application openURL:url sourceApplication:sourceApplication annotation:annotation error:&error];
if (error) {
  // エラーが発生しました
}
else if ([apiType isEqualToString:kMixiAppApiTypeToken]) {
  // 認可処理に成功しました
}
else if ([apiType isEqualToString:kMixiAppApiTypeRevoke]) {
  // 認可解除処理に成功しました
}

しかし、エラーが発生していない場合でもif (error) {}に入ってしまいます。[error description]を見てみても原因はわかりませんでした。とりあえず、私はコメントアウトしておきました。

公式ドキュメントに[[Mixi sharedMixi] restore]は書いてあるのに[mixi store]は書いていない

最初、公式ドキュメント通りに実装したら、restoreしているにもかかわらず、起動するごとに認証を要求されました。トークンなどの情報を永続化するには[mixi store]を呼び出します。以下のようなコードをUIApplicationDelegate#application:openURL:sourceApplication:annotation:に追加しましょう。

NSError *error = nil;
NSString *apiType = [[Mixi sharedMixi] application:application openURL:url sourceApplication:sourceApplication annotation:annotation error:&error];
if ([apiType isEqualToString:kMixiAppApiTypeToken]) {
    // 認可処理に成功しました
    [[Mixi sharedMixi] store];
}
else if ([apiType isEqualToString:kMixiAppApiTypeRevoke]) {
    // 認可解除処理に成功しました
    [[Mixi sharedMixi] store];
}

通常、- (void)mixi:(Mixi *)mixi didFinishLoading:(NSString *)dataではなく

  • (void)mixi:(Mixi *)mixi didSuccessWithJson:(NSDictionary *)dataを使う

SBJsonが同梱されているので、デコードしたものを渡してくれます。