use*_*485 41 iphone storekit in-app-purchase iphone-sdk-3.0
基本上,我尝试在测试应用程序中设置应用程序购买,然后再将其应用到我公司正在开发的应用程序中.我已经阅读了商店套件pdf和其他片段大约1000次,但产品仍然是空的.这正是我到目前为止所做的:
设置测试应用程序和In App Purchase测试项目
我在iPhone开发人员中心的公司开发人员门户上为"Test App One"创建了一个新的应用程序ID.我确保前缀是com.mycompany.testappone
确保可以配置应用内购买.保持应用ID部分,我通过勾选"启用应用内购买"选项配置应用购买.
我在iTunes Connect中创建了"Test App One",并完成了常规程序,但选择了"稍后上传二进制文件"并且没有提交审核,因为该应用程序什么都不做.当然,我们不必提交应用程序来审查这个工作?!然后,我点击管理应用内购买并创建一个新产品ID为"test1"并批准它以便清除销售.
代码
我在XCode中设置了一个新项目TestAppOne
,这里是我现在使用的唯一两个类:
TestAppOneAppDelegate.h:
#import <UIKit/UIKit.h>
#import <StoreKit/StoreKit.h>
@interface TestAppOneAppDelegate : NSObject <UIApplicationDelegate, SKRequestDelegate, SKProductsRequestDelegate> {
UIWindow *window;
}
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
在设备上进行测试
我创建了一个沙箱测试帐户,并在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
Run Code Online (Sandbox Code Playgroud)
任何人都可以告诉我,如果我已经离开了任何阶段,或者是否有任何我做错了.不幸的是,Apple似乎没有任何示例应用程序.
AlB*_*ebe 30
另一个经常被忽视的重要步骤是你需要确保你有一个iOS付费应用程序合同设置,它位于iTunes连接的"合同,税收和银行"部分下.首先,您必须单击请求按钮,然后您必须单击3设置按钮(联系信息,银行信息,税务信息)
Rhy*_*man 22
实际上我认为你必须提交二进制文件才能工作.
您可以将发布日期设置为遥远的未来.
alp*_*ere 19
检查是否存在无效的产品ID.
- (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response {
for (NSString *invalidProductId in response.invalidProductIdentifiers)
{
NSLog(@"Invalid product id: %@" , invalidProductId);
}
}
Run Code Online (Sandbox Code Playgroud)
如果产品ID无效,请访问http://troybrant.net/blog/2010/01/invalid-product-ids/
这是一个非常全面的问题清单.
检查XCode中的Bundle Identifier(例如com.company.appname)是否与iTunes Connect中的Bundle Identifier匹配.
您无需提交二进制文件即可使用.
归档时间: |
|
查看次数: |
23716 次 |
最近记录: |