[iOS IAP] このApp課金はすでに購入済みです。無料で復元できます。

タイトルのメッセージが返却され、アプリ内課金が反映されない。リストアしても未購入となるパターン。

同じ状況が、こちらのblogにも掲載されていました。
http://t9m.info/apps/in_app_purchase

対処方法は2つあります。

アプリ利用者側の対応

この件をiTunes Supportへ問い合わせたところ、以下の改善方法を返信していただけたので掲載しておきます。

– アプリケーションマルチタスク終了
http://support.apple.com/ja-jp/ht5137

– iOS アップデート
http://support.apple.com/kb/HT4623?viewlocale=ja_JP

– 本体再起動
https://support.apple.com/ja-jp/HT201559

– iTunes からサインアウト/サインイン
1) 「設定」、「iTunes & App Store」の順にアクセスします。
2) 「サインアウト」をタップします。
3) Apple ID とパスワードを入力し、サインインをタップします。

– Safari、Cookie のブロックを一時的にはずす
設定 > Safari > Cookie をブロック > 常に許可

– Safari、「履歴」と 「Web サイトデータ」 を消去
設定 > Safari > 履歴とWebサイトデータを消去

– 時間設定が正しいことを確認
設定 > 一般 > 日付と時刻 > 自動設定

上記の方法で改善しない場合は、

「iTunes Store サポートお問い合わせ先」
http://www.apple.com/jp/support/itunes/contact/

こちらの、

      「iTunes Storeサポートに問い合わせる。」から
      「接続とダウンロード」を選択、
      「App Storeから特定のコンテンツをダウンロードできない」

を選択し、サポート方法でメールを選択します。

入力欄を埋め、Apple IDの入力と、問題の概要(購入時メールに記載されているご注文番号などがわかれば)を記載して、送信します。

開発側として素早くサポートする場合、iTunes Storeサポートへは購入された本人からの連絡が必要ということなので、問題が発生している購入者へ、上記の内容をお伝えし、直接iTunes Storeサポートへ連絡してもらうのが良さそうです。

利用者側では、素早くどうにかしてほしい場合は、上記のiTunes Storeサポートへ。
開発側の対応を待ちたい場合は、以下の情報を、開発者側へもお伝えすると良さそうです。




アプリ開発側での対応

この状況は、購入処理がうまく完了されていない場合に発生するようです。

例えば、購入を行っている途中でアプリが閉じられた場合。
購入時、ユーザーの購入情報(クレジットカードなど)の入力が必要となった場合に、別の画面に遷移します。そういった場合です。

Appleが提供している購入処理のサンプルには、この状況の対応は含まれておらず、ごく一般的に発生してしまう問題と言えます。
iTunes Storeサポートでは、この問題となっている購入処理を、手動でうまく終了してくれるのかもしれません。

この問題は、以下のような噂程度の情報もありますので、他にも原因となるパターンがあるのかもしれませんね。

  • 数日待ってるといつの間にか改善した
  • iTunesアカウントのログオフ、再度のログインで改善した
  • iPhoneの再起動で改善した

具体的な対応は、画面遷移などで終了されていない、アカウントに紐付く購入トランザクションを、うまく終了させます。

- (void) closeUnfinishedTransaction
{
    if([[[SKPaymentQueue defaultQueue] transactions] count] >0){
        for(SKPaymentTransaction *skpt in [[SKPaymentQueue defaultQueue] transactions]){
            if(skpt.transactionState != SKPaymentTransactionStatePurchasing){
                [[SKPaymentQueue defaultQueue] finishTransaction:skpt];
            }
        }
    }
    return;
}

こういった処理で、transactionStateが購入中ではなく、購入した、リストアした、失敗したの状態を完了させます。
購入画面表示時や、購入&リストアボタンのタップ後のcanMakePayments直後などに行うとよいのかなと思います。

『購入した(SKPaymentTransactionStatePurchased)』の場合は、購入時の処理(フラグ立てやアイテム追加など)も行うと、内容次第で多重となっても問題にはならなそうにも。
終了や復元ができた際は、メッセージを表示して、この時の購入処理まで進ませないようにしたり。

SKPaymentTransactionの、transactionIdentifierで対象がわかります。
SKPaymentTransaction




シェアする

  • このエントリーをはてなブックマークに追加

フォロミー

コメントをどうぞ

メールアドレスが公開されることはありません。