基本上,我尝试在测试应用程序上购买应用程序中的应用程序,然后再将其实施为我公司正在处理的适当应用程序。我已经阅读了大约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。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top