iOS上で開発をする上で、特にゲームを開発する上で重要となる主機能では以下の2つは避けられないといっても過言ではない今日この頃だったりします。
- InApp Purchase…アプリ内課金、アプリを先にダウンロードさせて機能を課金アンロックさせたり、オンラインゲームで仮想通貨を発行したり、新聞などの定期購読をサポートしたりと。
- Game Center…SNSとしての機能をゲームに絞ったようなもの。リーダーボード(スコアランキング)や、アーチブメント(実績解除)を始めとして、ゲームの招待なども。
もちろん、その他多くの機能をiOSは含んでいるのですが、上記は開発環境としてiOS4.x上でサンドボックスが提供されている3機能の2機能だったりします(多分あっているはず)。で、この2つの機能をサンドボックスで利用するに当たってここ数日間不可解なエラーに見舞われたりして非常に時間を無駄にしたりと。
なので、ネットを調べたり自分の経験則上でこうしたら直った説(あくまで「説」です。Apple公式解決法ではありません)を書きたいと思います。
Case.1 InApp Purchaseで「iTunesStoreに接続できません」「Cannot connect to itunes store」のエラーが通知され、InApp Purchaseのトランザクションがコミットできない
よくある話でてっきりアカウントがsandboxアカウントから本番アカウントに移ったとか憶測していましたが、In-App-Purchaseにテストアカウントから接続できない(自堕落なぺぇじ)を参照して直りました。こちらにも同様、手順を記載します(自分は1, 2が逆でも大丈夫でした)。
- 開発アプリケーションを削除
- 設定→ストア→サインアウト、でテストアカウントを破棄
- Xcodeよりデバッグを開始し、インストール & デバッガ実行
- InApp Purchsaeで「既存のアカウントを利用」を選択し、iTunesConnectのテストアカウントを入力
Case.2 Game Centerで「このゲームはGame Centerにより認識されません」「this game is not recognized by game center」のエラーが通知され、Game Centerにログインできない
これも1日毎に1回起きる現象で、当初はiTunesConnectよりGameCenterのenable/disableを切り替えていました。が、もちろんアプリがリリースされた後にこんな操作はしたくないわけで。恐らくググるとBundleIDが異なるとか、プロビジョニング周りのアドバイスが多いようですが、それが原因でないのであれば以下の操作で解決するかもしれません。
- アプリを終了し、ホーム画面に戻る
- GameCenter(OS標準のアプリ)を起動する
- GameCenterのログインアカウントをテストユーザ(sandboxアカウント)に切り替える
- ゲームのタブを押して、登録されている開発アプリケーションを選択する
- リーダーボード、アーチブメントなどを一通り表示してみる (表示されればOK)
- GameCenterを終了し、開発アプリケーションを再度起動する
どちらも不可解な操作ですが恐らくこれで直るかと思われます。他プラットフォームでエラーが意味不明とかイラっとしますがその期間が少しでも短くなることを祈っております。
# でもね、Microsoftの製品で不可解なエラーがでたら速攻で問い合わせインシデントを使うんだっ!