SKPayment队列添加付款并不总是触发本机确认对话框
SKPaymentQueue addPayment doesn't always trigger native confirm dialog
好的,我正在将IAP实施到iOS应用程序中,只有商店中的某些产品实际上触发了本机购买处理对话框。
背景:
该应用程序使用带有javascript绑定的cocos2dx来实现跨平台性。我们正在涉足iOS原生领域,以实现商店处理。
这些调用都正常工作:
[[SKPaymentQueue defaultQueue] addTransactionObserver:self];
[SKPaymentQueue canMakePayments];
[[SKProductsRequest alloc] initWithProductIdentifiers:productIdentifiers];
最后一个注释。所有产品 ID 都会被检查并在productsRequest:request didReceiveResponse:response
回调中返回为有效,但前提是我没有在发送的标识符中包含捆绑 ID。我看到的大多数例子都说这是必需的,但如果包括这些例子,它们都返回为invalidProductIdentifiers
。这是否表明存在问题?
因此,目前某些产品在其(先前验证的)ID传递给[[SKPaymentQueue defaultQueue] addPayment:payment]
后会显示本机购买确认对话框。他们中的大多数人事后什么都不做。没有回调paymentQueue:queue updatedTransactions:transactions
,没有错误代码,没有崩溃。
我看不出为什么有些有效而大多数人不工作的模式。至少有一个消耗品,非消耗品和订阅工作,所以我不认为是这样。我发现,如果我在[[SKPaymentQueue defaultQueue] addPayment:payment]
后中断并逐步完成代码暂停,则一些产品工作的频率很小,尽管它并不一致。这让我认为这可能是一个线程问题,但您可以在下面看到我尝试过的内容,但没有帮助。
我尝试过的事情:
在SO和其他地方阅读,人们建议更改测试用户,用[[SKPaymentQueue defaultQueue] finishTransaction:transaction]
清除队列,并且Apple的沙盒服务器有时会"出现问题"。但是这些都没有解决它,而且让我感到奇怪的是,我没有遇到崩溃或错误,它只是对某些产品ID根本没有反应。
这是我尝试过的一些事情的实际通话:
- (void)purchaseProductWithId:(const char*)item_code
{
/** OCCASIONALLY MAY NEED TO CLEAR THE QUEUE **
NSArray *transactions = [[SKPaymentQueue defaultQueue] transactions];
for(id transaction in transactions){
[[SKPaymentQueue defaultQueue] finishTransaction:transaction];
}// */
// dispatch_async(dispatch_get_main_queue(),^ {
SKPayment *payment = [SKPayment paymentWithProductIdentifier:[NSString stringWithUTF8String:item_code]];
// [[SKPaymentQueue defaultQueue] performSelectorOnMainThread:@selector(addPayment:) withObject:payment waitUntilDone:NO];
[[SKPaymentQueue defaultQueue] addPayment:payment];
// } );
}
如果还有其他有用的代码,请告诉我。
感谢您的帮助。
编辑:我已经从这个问题中添加了hasAddObserver
检查,这也不是问题。
原来这是暂时的。我不想指责苹果的沙盒服务器是片状的,但什么都没有改变,然后几天后它突然起作用了。
因此,如果您有类似的问题,请休息一下,稍后再回来?
- 从C++本机插件更新Vector3数组
- GCC本机矩阵运算库
- VC++本机单元测试,找不到调试符号
- 在这种情况下,java对象是否可以调用本机函数
- PC中的程序和PHONE中的本机描述应用程序之间的数据连接
- 为什么导入Mixed native/CLR lib.dll的本机C++应用程序没有在Mixed lib.dll中的外部变
- 无法将标准库导入本机 android 项目中的头文件
- 使用本机 C++ 应用程序中的 C# 代码
- 在nodejs中使用本机代码的最佳方法是什么?
- 如何告诉本机节点模块所需的dll存储在哪里?
- 在自定义程序中使用本机 Windows 自然顺序排序
- 如何在C++非托管/本机 DLL 中从注册免费 COM C# 托管 DLL 创建 COM 对象
- MS 本机单元测试 - 断言::线程失败不起作用
- 将音频从浏览器流式传输到WebRTC本机C++应用程序
- Winapi - SetWindowLongPtr in ShutdownBlockReason创建/销毁JNI本机代码
- C++/CLI 混合托管/本机 DLL 不起作用
- 子系统中的异常处理:本机
- 多次调用本机方法时出现致命错误
- 如何使用 Malloc 调试来检查本机内存泄漏?
- SKPayment队列添加付款并不总是触发本机确认对话框