Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
应用内购买:如何在没有iOS5唯一标识符的情况下处理收据验证?_Ios_Objective C_Ios5_In App Purchase_Verification - Fatal编程技术网

应用内购买:如何在没有iOS5唯一标识符的情况下处理收据验证?

应用内购买:如何在没有iOS5唯一标识符的情况下处理收据验证?,ios,objective-c,ios5,in-app-purchase,verification,Ios,Objective C,Ios5,In App Purchase,Verification,为了在我的应用程序中启用应用程序内购买,我做了一个示例,其中引用了一个非最新的VerificationController进行收据验证 因此,我的应用程序被拒绝,因为它使用了iOS5的唯一标识符。由于我基本上喜欢支持iOS5和iOS6的想法,我认为可能有一个解决方案可以让“iOS6之前”的代码运行,但我只找到了解决方案,建议(在配套文件中)删除所有“iOS6之前”的代码 我的问题是:如何匹配iOS5的交易信息和收据? 为什么它不再在VerificationController中,不是很重要吗 任

为了在我的应用程序中启用应用程序内购买,我做了一个示例,其中引用了一个非最新的VerificationController进行收据验证

因此,我的应用程序被拒绝,因为它使用了iOS5的唯一标识符。由于我基本上喜欢支持iOS5和iOS6的想法,我认为可能有一个解决方案可以让“iOS6之前”的代码运行,但我只找到了解决方案,建议(在配套文件中)删除所有“iOS6之前”的代码

我的问题是:如何匹配iOS5的交易信息和收据? 为什么它不再在VerificationController中,不是很重要吗

任何想法都值得赞赏, Chris

请参见此处的解决方案:

您不需要VerificationController(它使用[UIDevice currentDevice].uniqueIdentifier),以便MKStoreKit正常工作。我只是 已删除文件,因为从未从中调用代码 MKStoreManager

或者创建自己的UDID:

请参见此处的解决方案:

您不需要VerificationController(它使用[UIDevice currentDevice].uniqueIdentifier),以便MKStoreKit正常工作。我只是 已删除文件,因为从未从中调用代码 MKStoreManager


或者创建自己的UDID:

您找到解决方案了吗?不幸的是,我没有找到。我最终扔掉了“iOS6之前”的代码,就像苹果在那里的示例验证控制器一样。我在iOS 5上测试了它,它成功了。。。但我对这个解决方案不满意…我也这么做了,我觉得有些地方不对劲。目前只有不到10%的iOS5用户。。。可能更糟;)你找到解决办法了吗?不幸的是我没有。我最终扔掉了“iOS6之前”的代码,就像苹果在那里的示例验证控制器一样。我在iOS 5上测试了它,它成功了。。。但我对这个解决方案不满意…我也这么做了,我觉得有些地方不对劲。目前只有不到10%的iOS5用户。。。可能更糟;)
- (BOOL)doesTransactionInfoMatchReceipt:(NSString*) receiptString
{
    // some code above
   
    if ([[UIDevice currentDevice] respondsToSelector:NSSelectorFromString(@"identifierForVendor")]) // iOS 6?
    {
#if IS_IOS6_AWARE
        // iOS 6 (or later)
        NSString *localIdentifier                   = [[[UIDevice currentDevice] identifierForVendor] UUIDString];
        NSString *purchaseInfoUniqueVendorId        = [purchaseInfoFromTransaction objectForKey:@"unique-vendor-identifier"];
        NSString *verifiedReceiptVendorIdentifier   = [verifiedReceiptReceiptDictionary objectForKey:@"unique_vendor_identifier"];
        
        
        if(verifiedReceiptVendorIdentifier)
        {
            if (![purchaseInfoUniqueVendorId isEqualToString:verifiedReceiptVendorIdentifier]
                || ![purchaseInfoUniqueVendorId isEqualToString:localIdentifier])
            {
                // Comment this line out to test in the Simulator.
                failCount++;
            }
        }
#endif
    } else {
        // Pre iOS 6 - this part is missing now
        NSString *localIdentifier           = [UIDevice currentDevice].uniqueIdentifier;
        NSString *purchaseInfoUniqueId      = [purchaseInfoFromTransaction objectForKey:@"unique-identifier"];

        
        if (![purchaseInfoUniqueId isEqualToString:verifiedReceiptUniqueIdentifier]
            || ![purchaseInfoUniqueId isEqualToString:localIdentifier])
        {
            // Comment this line out to test in the Simulator.
            failCount++;
        }        
    }
    
// more code
}