应用程序购买中的iPhone -Response。产品仍然空?
-
22-09-2019 - |
题
基本上,我尝试在测试应用程序上购买应用程序中的应用程序,然后再将其实施为我公司正在处理的适当应用程序。我已经阅读了大约1000次的商店套件PDF和其他片段,但是产品仍被归还为空。这正是我到目前为止所做的:
设置测试应用程序和应用程序购买测试项目
我在iPhone开发中心的公司开发人员门户网站上创建了一个新的应用程序ID。我确保前缀是 com.mycompany.testappone
确保在应用中购买中可以配置。在应用程序ID部分中,我在应用程序购买中配置了“应用程序购买”选项的勾选。
我在iTunes Connect中创建了“测试应用程序”并完成了通常的过程,但选择了“稍后上传二进制”,并且没有提交审核,因为该应用程序无能为力。当然,我们不必提交应用程序来审核它才能工作吗?然后,我单击了应用程序购买中的管理,并创建了一个带有产品ID“ Test1”的新产品,并批准了它,以便将其清除出售。
代码
我在xcode中设置了一个新项目 TestAppOne
这是我目前使用的仅有的两个类:
testapponeappdelegate.h:
#import <UIKit/UIKit.h>
#import <StoreKit/StoreKit.h>
@interface TestAppOneAppDelegate : NSObject <UIApplicationDelegate, SKRequestDelegate, SKProductsRequestDelegate> {
UIWindow *window;
}
testapponedelegate.m:
#import "TestAppOneAppDelegate.h"
static NSString *kMyFeatureIdentifier1 = @"com.mycompany.testappone.test1";
@implementation TestAppOneAppDelegate
@synthesize window;
- (void)applicationDidFinishLaunching:(UIApplication *)application {
if([SKPaymentQueue canMakePayments]) {
NSLog(@"IN-APP:can make payments");
}
else {
NSLog(@"IN-APP:can't make payments");
}
[self requestProductData];
[window makeKeyAndVisible];
}
- (void)requestProductData {
NSLog(@"IN-APP:requestProductData");
SKProductsRequest *request = [[SKProductsRequest alloc] initWithProductIdentifiers: [NSSet setWithObject:kMyFeatureIdentifier1]];
request.delegate = self;
[request start];
NSLog(@"IN-APP:requestProductData END");
}
- (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response {
NSLog(@"IN-APP:productsRequest");
NSArray *myProduct = response.products;
NSLog(@"IN-APP:array count: %i", [myProduct count]);
[request autorelease];
NSLog(@"IN-APP:productsRequest END");
}
- (void)dealloc {
[window release];
[super dealloc];
}
@end
在设备上进行测试
我创建了一个沙盒测试帐户,并从iPhone上登录了我的iTunes帐户,但是由于文档告诉我们在购买阶段提示之前,该文档告诉我们不执行此操作,因此没有登录测试帐户。然后,我构建该应用程序,这是我获取的日志:
IN-APP:can make payments
IN-APP:requestProductData
IN-APP:requestProductData END
IN-APP:productsRequest
IN-APP:array count: 0
IN-APP:productsRequest END
任何人都可以告诉我,我是否遗漏了任何阶段,或者我做错了什么。不幸的是,Apple似乎没有任何示例应用程序。
解决方案
实际上,我确实认为您必须提交二进制文件才能工作。
您可以将发布日期设置为遥远的未来。
其他提示
经常被忽略的另一个重要步骤是,您需要确保您拥有iTunes Connect的“合同,税收和银行业务”部分下的iOS付费申请合同设置。首先,您必须单击“请求”按钮,然后单击3个设置按钮(联系信息,银行信息,税收信息)
检查是否有无效的产品ID。
- (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response {
for (NSString *invalidProductId in response.invalidProductIdentifiers)
{
NSLog(@"Invalid product id: %@" , invalidProductId);
}
}
如果有无效的产品ID访问 http://troybrant.net/blog/2010/01/invalid-product-ids/
这是一个非常全面的检查列表。
检查XCode中的捆绑包标识符(例如com.com.company.appname)是否匹配iTunes Connect中的一个。
您不必提交二进制文件才能工作。
只需删除设备上的应用程序,然后从Xcode重新启动即可。它解决了我的问题。
无需上传二进制,或在iTunes Connect中创建应用内购买后等待几个小时。
多亏了Alpere的答案,我发现我使用了错误的产品ID。它是 不是 和我想的一样 de.company.appname.PROFESSIONAL_LICENSE
. 。只是使用 PROFESSIONAL_LICENSE
在我的情况下(没有领导捆绑ID的东西)可以工作:)
无需上传二进制以进行涂抹式估计的二进制测试。您只需要在iTunesConnect中添加InappCurchase项目,然后将其放入“准备提交”(必须)状态。如果您提交审核,它将始终给出OU响应。
尝试添加免费订阅产品。如果它出现在响应上,那么您的代码没有错。由于免费订阅是唯一不需要协议,税收和银行业务的类型,并且如果出现并且其他类型不需要,则与您的合同有关。
就我而言,原因是Apple托管内容的原因是错误地打开。仅当我关闭产品时,该产品才能使用
在我的情况下(MACOS),我正在创建一个测试应用程序(具有主应用程序的相同捆绑包ID)。 Skfetchrequest仅在我设置与原始应用程序中的捆绑包名称(二进制名称)之后才开始返回测试应用程序的产品ID。