-(void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions{
for (SKPaymentTransaction* transaction in transactions)
{
CCLOG("transactionState = %ld", transaction.transactionState);
switch (transaction.transactionState)
{
case SKPaymentTransactionStatePurchased:
[self completeTransaction:transaction];
break;
case SKPaymentTransactionStateFailed:
[self failedTransaction:transaction];
break;
case SKPaymentTransactionStateRestored:
[self completeTransaction:transaction];
break;
default:
break;
}
}
上述代码用于跟踪我们所知的购买状态。 但似乎该代码不会跟踪“已经购买了应用程序内购买”的事件。
[[SKPaymentQueue defaultQueue] addPayment:payment];
每次我使用上面的代码购买已购买的IAP时,IOS确认购买对话框将显示transactionState = SKPaymentTransactionStatePurchasing(输出为“transactionState = 0”)。然后我买了这个项目并且“已经购买了应用内购买”对话框显示出来,没有其他州代码输出。
我想赶上上面的事件。我打赌它一定是可以捕获的。该活动是否被扔到其他地方?
答案 0 :(得分:1)
在我的情况下,问题是由于$scope.signin = function(){
var promise = $scope.system_connect($scope.formData);
promise.then(function(){
console.log("formData:"+JSON.stringify($scope.formData));
});
}
$scope.system_connect = function(formData){
var promise = $http.post('http://mysite/angularjs-headless/api/v1/system/connect',
{
'username': formData.username,
'password': formData.password
},
{
'Content-type' : 'application/json',
'Accept' : 'application/json'
}
)
.then(
function(response){
console.log('Success callback');
$scope.formData = response;
},
function(response){
console.log('errorCallback');
$scope.formData = response;
}
);
return promise;
}
在另一个库已经注册了自己的观察者之后添加到SKPaymentTransactionObserver
引起的。切换初始化顺序,以便我的应用程序注册自己的观察者首先解决问题。
答案 1 :(得分:0)
当我们的服务器收据验证停止工作且交易未完成时,我们遇到了类似的问题。因此,我修改了购买流程。在应用添加新产品付款之前,应用会立即遍历所有未完成交易([SKPaymentQueue defaultQueue].transactions
),并在未完成交易具有与新产品付款相同的产品标识符时停止付款。