抓住“应用内购买已被购买”活动

时间:2016-06-21 10:07:05

标签: ios in-app-purchase

-(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”)。然后我买了这个项目并且“已经购买了应用内购买”对话框显示出来,没有其他州代码输出。

我想赶上上面的事件。我打赌它一定是可以捕获的。该活动是否被扔到其他地方?

2 个答案:

答案 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引起的。切换初始化顺序,以便我的应用程序注册自己的观察者首先解决问题。

I've provided in more detail here

答案 1 :(得分:0)

当我们的服务器收据验证停止工作且交易未完成时,我们遇到了类似的问题。因此,我修改了购买流程。在应用添加新产品付款之前,应用会立即遍历所有未完成交易([SKPaymentQueue defaultQueue].transactions),并在未完成交易具有与新产品付款相同的产品标识符时停止付款。

相关问题