서버 측을 사용하여 app in purchases의 유효성을 검사하고 싶습니다.영수증 데이터의 base64EncodedStringWithOptions에서 nil을 반환합니다.
- (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions
{
for (SKPaymentTransaction * transaction in transactions) {
switch (transaction.transactionState)
{
case SKPaymentTransactionStatePurchased:
{
NSData *reciptData = [NSData dataWithContentsOfURL:[[NSBundle mainBundle] appStoreReceiptURL]];
if(reciptData) {
NSDictionary *parameters = @{@"receipt_data" : [reciptData base64EncodedStringWithOptions:0]};//App crashes here -[__NSPlaceholderDictionary initWithObjects:forKeys:count:]: attempt to insert nil object from objects[0]
}
}
break;
default:
break;
}
};
}
별난 일이 아이폰 OS 8.0.2 하나의 iPad에서 해당 응용 프로그램 충돌과 같은 iOS 버전과 다른에 충돌하지 않습니다 그래서 나는 다음과 같은 코드를 사용합니다.
최악의 경우 응용 프로그램이 충돌하는 장치에 액세스 할 수 없다는 것입니다.
내가 이해하는 한, - base64EncodedStringWithOptions:
은 nil
을 반환하지만 나는 이유를 모른다.
아무도 도와 줄 수 있습니까?
답변 해 주셔서 감사합니다. 하지만 응용 프로그램이 내 장치에서 실행 중이며 jailbroken이 아닙니다. 기능을 잠금 해제하지 않으면 사용자가 돈을 잃어 버리지 만 잠금을 해제하면 왜 유효성 검사를 사용해야합니까? –
일반적으로 해커/버그로 하여금 가상 제품을 얻게하는 것처럼 해독이 실패하더라도 잠금 해제를 권장합니다 (크래시는 발생하지 않음). 그러나 서버에 저장되어 유효성 검사가 필요한 경우 서버에서 유효성 검사를하지 않거나 서버에 전달하지 않아야합니다. – abdollar
서버 측 기능과 관련이 있으며이를 서버로 전달하지 않습니다. 케이스. 그러나 빈 영수증의 이유는 무엇이며 어떻게 피할 수 있습니까? –