テスト購入を行うことができるため、アプリ (iOS 7 用) をサンドボックス環境用に正しく構成したことはわかっています。テスト購入が完了すると、[環境: サンドボックス] テキストのアラートが表示されます。同時に領収書が更新され、+[NSBundle appStoreReceiptURL]
メソッドを使用してアクセスできます。
しかし、クラス内のメソッドのみを使用して領収書を更新しようとすると、次のSKReceiptRefreshRequest
シーケンスしか得られません。
「サインイン」アラートが表示され、そこから「既存の Apple ID を使用」を選択します。
「Apple ID パスワード」アラートが表示されたら、テスト ユーザーの資格情報を入力します。
ただし、このアラートは、資格情報を入力した直後に常に表示されます。
「この Apple ID はまだ iTunes Store で使用されていません。レビューをタップしてサインインし、アカウント情報を確認してください。」</p>
もちろん、サンドボックス環境では必要のないクレジット カード情報を要求します。
アプリのデリゲートで次のコードを使用して、レシートの更新を開始します。
// in didFinishLaunchingWithOptions:
SKReceiptRefreshRequest *request = [[SKReceiptRefreshRequest alloc] initWithReceiptProperties:nil];
request.delegate = self;
[request start];
// with the delegate methods:
-(void)requestDidFinish:(SKRequest *)request
{
if ([request isKindOfClass:[SKReceiptRefreshRequest class]]) {
NSLog(@"Got a new receipt...");
}
}
-(void)request:(SKRequest *)request didFailWithError:(NSError *)error
{
NSLog(@“%@“, error.description);
}
ただし、呼び出される唯一のデリゲート メソッドは didFailWithError: であり、次のメッセージが表示されます。
エラー Domain=SSServerErrorDomain Code=5001 「サインインできませんでした」 UserInfo=0x14d8a780 {NSLocalizedFailureReason=この Apple ID は iTunes Store でまだ使用されていません。, NSLocalizedDescription=サインインできませんでした}
領収書を更新しようとする前に、私はいつも:
デバイスからアプリを削除する
[設定] -> [App Store] に Apple ID 資格情報が入力されていないことを確認してください
開発者の資格情報でアプリに署名する
領収書を生成できるように、テスト アカウントで以前の購入が行われていることを確認してください。
テスト アカウントの資格情報が App Store のログインに入力されないようにしてください (これにより、テスト目的で資格情報が無効になるため)。
サンドボックスで領収書の更新を行うことはできますか?
更新:現在動作中
私はついにそれを機能させました-しかし、重要なステップが何であったか正確にはわかりません-粘り強く努力し続けること以外は。
同じ問題を抱えている他の人の利益のために、私が従った手順は次のとおりです。
まったく新しいテスト ユーザーを作成しますが、アカウントでテスト購入を行っていません。
デバイスからアプリを削除し、[設定] -> [App Store] にログインしているアカウントがないことを確認しました。
Xcode でアプリを起動すると、コンソールにエラー メッセージが表示されました。
"Error Domain=SSServerErrorDomain Code=5001 "Could Not Sign In" UserInfo=0x155f5140 {NSLocalizedFailureReason=この Apple ID は iTunes Store でまだ使用されていません。, NSLocalizedDescription=Could Not Sign In}".
「この Apple ID は iTunes Store でまだ使用されていません。」というアラートが表示されたとき、キャンセル ボタンを押しました。
アプリをシャットダウンし、変更を加えずに、Xcode で再起動しました。再起動する前にデバイスからアプリを削除しませんでした。
今回は「<em>この Apple ID は iTunes Store でまだ使用されていません。」メッセージは表示されず、代わりに Apple ID とパスワードを求めるダイアログが表示されました。テスト アカウントの資格情報をダイアログに入力しました。
テスト ユーザーの資格情報を入力した後、
SKRequestDelegate requestDidFinish:
デリゲート メソッドが呼び出され、レシートがアプリ バンドルに配置されました。ちなみに、メソッドSKRequest
によって提供されたインスタンスのタイプは でした。requestDidFinish:
SKReceiptRefreshRequest
初めて機能すると、機能し続けることがわかりました-アプリを削除したり、設定->アプリストアから資格情報をクリアしたりする必要はありませんでした-領収書の更新は、その時点から [設定] -> [App Store] にキャッシュされた資格情報をテストします。