我正在尝试在我的iPhone上测试In App Purchases并遇到一个问题,我在那里请求信息,最终作为"didRecieveResponse"方法中的无效产品ID返回给我.
我有:
一切似乎都已到位,但我仍然将我的产品作为无效ID返回给我.
这是我正在使用的代码:
- (void)requestProductData {
SKProductRequest *request = [[SKProductsRequest alloc] initWithProductIdentifiers: [NSSet setWithObject: @"com.domain.appname.productid"]];
request.delegate = self;
[request start];
}
- (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response
{
NSArray *myProducts = response.products;
NSArray *myInvalidProducts = response.invalidProductIdentifiers;
for(int i = 1; i < myInvalidProducts.count; ++i)
{
std::cout <<"invalid product id = " << [[myInvalidProducts objectAtIndex:i] UTF8String] << std::endl;
}
for(int i = 0; i < myProducts.count; ++i)
{
SKProduct * myProduct = [myProducts objectAtIndex:i]; …Run Code Online (Sandbox Code Playgroud) 我正在开发一个应用程序并在其中使用应用程序内购买.我在iTunes Connect中创建了应用内商品.直到昨天一切正常.但今天.它开始给出这个错误.
"错误:付款请求仅限于通过Store Kit的didRecieveResponse方法返回的有效产品."
我不知道是什么问题.请回复
来自StoreKit指南:
如果用户尝试购买他们已购买的非消费产品或可续订订购,则您的应用程序将收到该项目的常规交易,而不是恢复交易.但是,不会再向该用户收取该产品的费用.您的应用程序应将这些事务视为与原始事务的事务相同.
这在我正在开发的应用程序中提出了一个巨大的问题.我们已通过应用内购买向发布商许可了大量内容.他们要求我们每次出售这些内容(即用户向我们支付)时,我们的服务器会在其服务器上调用API来报告交易.这是出于会计目的,并且最终用于根据我们与他们的协议确定我们在月底支付的金额.
我已经在SO和其他地方阅读了几个关于调用restoreCompletedTransactions的建议,并且在设备上保持了用户已经购买的内容的本地理解,因此不允许他们再次购买它.这对我来说似乎应该能够在服务器端实现.但是,正如StoreKit指南所承诺的那样,我们从Apple服务器返回的收据与购买和重新购买的收据完全相同.
如果来自StoreKit的付款回调在这种情况下无法被信任为有效的会计机制("你得到了报酬"而不是"你没有得到报酬"),那么还有什么其他实时的交易流量见解?如果我们告诉他们我们必须在月底之后等待45天才能从iTunes Connect中获得真正支付的美元金额,我认为我们正在合作的出版商会很高兴.
这是我的情况:我有一个免费的应用程序,我计划通过每月0.99美元(自动续订)订阅提供访问权限.
我仍然在沙箱中进行测试,因此我看到自动更新订阅如何真正起作用的方式可能会被扭曲.我的问题如下:
1)支持自动续订订阅的iOS的最低版本是多少?早期iOS版本的用户将如何体验所述功能?
2)如果我理解正确,可自动更新的订阅被归类为"非消费品",只能购买一次.当我尝试在到期日之前重新购买订阅时(或续订被设置为启动的日期)会发生什么:我不会再收费,是吗?
3)如果订阅自动续订,我的应用会收到通知吗?我想这个应用程序将自动发送到我的SKPaymentTransactionObserver中的paymentQueue:updatedTransactions:方法调用,但我在沙盒中工作时从未能看到这种情况.在我的情况下,我必须在启动期间针对购买收据的到期日期运行本地时间戳检查.
4)如果我必须与iTunes服务器通信,使用我从初次购买(或连续续订)保存的收据,如果订阅仍处于活动状态或用户已禁用自动,我如何正确检查iTunes?续期?
5)我的应用程序内购买项目是订阅本身,其产品代码为应用程序所知...当您已经知道它是什么时,是否真的有必要检索产品详细信息?Apple的IAP指南似乎很清楚我需要这样做,但这对我来说似乎只是开销.
我正在开发一个应用程序,我希望通过它来销售一些活动门票.
我是否可以将PayPal用于此目的,并且Apple将使用其他StoreKit Framework批准该应用程序.
我搜索了这个主题,但我找不到任何可能的解决方案.
一些搜索说可以使用paypal,另一个搜索表示Apple从未批准使用除inAppPurchase之外的支付网关的应用程序.
请帮我!
我正在尝试解决为什么我得到"无法连接到iTunes Store",错误代码为0.
我知道我的应用程序标识符很好,因为我检索应用程序启动时的产品信息并记录结果,我从iTunes获得正确的产品标识符和价格.当我将我的应用标识符更改为愚蠢的东西时,这会失败.
由于上述原因,我知道我的产品标识符也没问题(否则我将无法正常工作).
我尝试通过两种不同的方式创建SKPayment来解雇购买:
第一种方式
SKPayment *payment = [SKPayment paymentWithProductIdentifier:productIdentifier]; // This is deprecated in ios 5 but should work
[[SKPaymentQueue defaultQueue] addPayment:payment];
Run Code Online (Sandbox Code Playgroud)
第二种方式
SKPayment *payment = [SKPayment paymentWithProduct:foundProduct];
[[SKPaymentQueue defaultQueue] addPayment:payment];
Run Code Online (Sandbox Code Playgroud)
(foundProduct来自SKProductsRequest返回的SKProducts数组)
两种方式都失败,错误代码为0.
我已经在运行iOS 5.0.1的iPhone 4S和iOS 5上的模拟器中尝试了这两种方法.
我已经读过硬重置工作(2359739)似乎很疯狂,但我继续在模拟器(iOS模拟器=>重置内容和设置...)中尝试它无济于事.
我唯一能想到的是,iTunes沙盒服务器可能很糟糕......
我在应用内购买时遇到了一个奇怪的问题......
在我请求产品信息后,有时会因某种原因自动调用paymentQueue:updatedTransactions.
在我的商店的viewDidLoad方法中,我初始化并启动请求:
- (void)viewDidLoad
{
[super viewDidLoad];
productsArray = [[NSArray alloc] init];
[[SKPaymentQueue defaultQueue] addTransactionObserver:self];
NSSet *productIdentifiers = [NSSet setWithObjects:PRODUCT_ID, nil];
productsRequest = [[SKProductsRequest alloc] initWithProductIdentifiers:productIdentifiers];
productsRequest.delegate = self;
[productsRequest start];
}
Run Code Online (Sandbox Code Playgroud)
然后我收到回复:
- (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response
{
productsArray = [[NSArray alloc] initWithArray:response.products];
NSLog(@"Products Count: %d",[productsArray count]);
NSLog(@"Invalid Products Count: %d",[response.invalidProductIdentifiers count]);
if ([productsArray count] > 0)
{
NSLog(@"Product title: %@" ,[productsArray objectAtIndex:0]);
[self hideLoadingView];
} else {
UIAlertView* alertView = [[UIAlertView alloc] initWithTitle:@"No products found"
message:@"There might …Run Code Online (Sandbox Code Playgroud) 嘿StackOverflow ......
我的iOS应用程序允许用户购买视频作为非消耗性iAP,所有视频都非常重,每个大约300mb/650mb ...
Apple要求您使用StoreKit在应用中实施还原购买功能.这对我来说很好,但是,如果用户购买了几个不同的视频,那么尺寸可能真的开始加起来....我已经考虑过在这之前检查用户是否在wifi上,但是说实话,感觉就像一个解决方法而不是解决方案.我宁愿抓住用户下载的所有内容的数组,让/他们/决定他们现在要下载哪些内容.这是允许的,甚至是可能的吗?
谢谢
奥利
我正在开发一个tvOS应用程序,该应用程序链接(使用相同的应用程序ID)到iOS应用程序,其中应用程序购买功能完全正常,我使用与iOS应用程序相同的实现.
我正在使用开发苹果电视,而不仅仅是模拟器.
Apple TV无法识别我的沙箱测试程序帐户,我的productsRequest没有得到任何答案.
在tvOS上有StoreKit特有的东西吗?谢谢
我在我的应用程序中实现了自动续订。根据文档,此功能应每隔几分钟自动更新,每天最多更新六次。但是对于我的应用程序来说,这没有发生。
我在应用收据中寻找订阅的到期日期,这在第一次即可使用,但此后将无法使用。应用收据是否在沙盒环境中不会自动更新?我的理解是应该的。
in-app-purchase ×10
storekit ×10
ios ×5
iphone ×5
objective-c ×4
cocoa-touch ×1
swift ×1
tvos ×1
xcode4.2 ×1