2014-10-03 6 views
3

서버 측을 사용하여 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을 반환하지만 나는 이유를 모른다.

아무도 도와 줄 수 있습니까?

답변

0

"IAP Free"나 "IAP Cracker"와 같은 인앱 구매 크래킹 프로그램의 일부 형태가 실행되기 전에 장치가 jailbroken 및 인앱 구매 균열이 발생했음을 알기 전에이 영수증 문제를 보았습니다. 도구가 설치되었습니다. 응용 프로그램이 충돌하는 장치가 인앱 구매 도구의 일부 형식을 실행하고 있지 않은지 확인합니다. 당신이 할 수있는 또 다른 일은 빈 영수증을 무시하는 것입니다. 그러나 충돌을 피하기 위해 물건을 반품하거나 지역에서만 사용할 수있는 물건을 반품하지 마십시오. 이는 인앱 구매를 해킹하는 사람에게 어떻게 대응할 것인지에 달려 있습니다. 때로는 모든 작품을 로컬로 가장하고 서버의 기능을 제한하는 것이 좋습니다.

+0

답변 해 주셔서 감사합니다. 하지만 응용 프로그램이 내 장치에서 실행 중이며 jailbroken이 아닙니다. 기능을 잠금 해제하지 않으면 사용자가 돈을 잃어 버리지 만 잠금을 해제하면 왜 유효성 검사를 사용해야합니까? –

+0

일반적으로 해커/버그로 하여금 가상 제품을 얻게하는 것처럼 해독이 실패하더라도 잠금 해제를 권장합니다 (크래시는 발생하지 않음). 그러나 서버에 저장되어 유효성 검사가 필요한 경우 서버에서 유효성 검사를하지 않거나 서버에 전달하지 않아야합니다. – abdollar

+0

서버 측 기능과 관련이 있으며이를 서버로 전달하지 않습니다. 케이스. 그러나 빈 영수증의 이유는 무엇이며 어떻게 피할 수 있습니까? –

관련 문제