iPhone 4 / iOS 4デバイスでは、sandboxAppStoreが検証中にこのエラーを報告しています。
21002:recipient-dataプロパティのデータの形式が正しくありませんでした。
iPhone 5 / iOS 6デバイスでは、同じコードが問題なく機能します(ステータス== 0、レシートが返されます)。
デバイスを再起動し、Apple IDがログアウトされていることを確認し、新しいテストユーザーアカウントを作成しました。同じ結果。何か案は?
このエラーは、検証のために送信するために作成したJSONオブジェクトが正しい形式ではないことを意味します。
{
"receipt-data" : "(receipt bytes here)"
}
したがって、私の提案は、iPhone 4 / iOS 4で同じものをデバッグすることです。JsonFrameworkを使用してJSONオブジェクトを作成している場合(受信確認用)、iOS5.0以降でのみ機能します。
数か月間実装したコードの追加SBJsonを使用してN解析を記述しました。
NSString *base64TxReceiptStr=[NSData Base64Encode:transaction.transactionReceipt];
SBJsonWriter *writer = [[SBJsonWriter alloc] init];
NSDictionary *command = [NSDictionary dictionaryWithObjectsAndKeys:
base64TxReceiptStr, @"receipt-data",
nil];
NSString *jsonString = [writer stringWithObject:command];
NSData *requestBody=[jsonString dataUsingEncoding:NSUTF8StringEncoding];
NSMutableURLRequest *txReceiptVerificationRequest=[[NSMutableURLRequest alloc] initWithURL:[NSURL URLWithString:@"https://sandbox.itunes.apple.com/verifyReceipt"]];
[txReceiptVerificationRequest setHTTPBody:requestBody];
[txReceiptVerificationRequest setHTTPMethod:@"POST"];
NSURLResponse *response=nil;
NSError *error=nil;
NSData *responseData=[NSURLConnection sendSynchronousRequest:txReceiptVerificationRequest returningResponse:&response error:&error];
NSString * receivedString=[[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding];
SBJsonParser *parser = [[SBJsonParser alloc] init];
NSDictionary *aobject =[parser objectWithString:receivedString];`
サンドボックス環境では、https ://sandbox.itunes.apple.com/verifyReceiptを使用してください。
実際の検証には、https ://buy.itunes.apple.com/verifyReceiptを使用してください。
これはAppleの公式ページで確認できます。