iOS 自动续费订阅错误码21003 处理方法 - StoreKit框架详解
错误码21003表示用户已订阅该产品,但还没有付款。以下是使用StoreKit框架处理该错误码的示例代码:\n\nobjective-c\n- (void)handleErrorCode21003 {\n // 检查用户是否已订阅\n if ([SKPaymentQueue canMakePayments]) {\n // 请求App Store获取用户的已购买产品信息\n NSSet *productIdentifiers = [NSSet setWithObject:@"your_product_identifier"];\n SKProductsRequest *productsRequest = [[SKProductsRequest alloc] initWithProductIdentifiers:productIdentifiers];\n productsRequest.delegate = self;\n [productsRequest start];\n } else {\n // 用户禁用了应用内购买功能\n NSLog(@"用户禁用了应用内购买功能");\n }\n}\n\n#pragma mark - SKProductsRequestDelegate\n\n- (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response {\n NSArray *products = response.products;\n if (products.count > 0) {\n SKProduct *product = products[0];\n \n // 检查用户已购买的产品列表\n for (SKPaymentTransaction *transaction in [[SKPaymentQueue defaultQueue] transactions]) {\n if ([transaction.payment.productIdentifier isEqualToString:product.productIdentifier]) {\n // 用户已购买该产品\n NSLog(@"用户已购买该产品");\n break;\n }\n }\n } else {\n // 未找到产品信息\n NSLog(@"未找到产品信息");\n }\n}\n\n- (void)request:(SKRequest *)request didFailWithError:(NSError *)error {\n // 获取产品信息失败\n NSLog(@"获取产品信息失败: %@", error.localizedDescription);\n}\n\n\n在上面的代码中,首先检查用户是否已启用应用内购买功能。如果已启用,则使用SKProductsRequest对象请求App Store获取用户的已购买产品信息。如果获取到产品信息,可以遍历已购买产品的交易列表来判断用户是否已购买该产品。如果未获取到产品信息,说明产品标识符无效或未在App Store Connect中配置。
原文地址: https://www.cveoy.top/t/topic/p28S 著作权归作者所有。请勿转载和采集!