2015-12-19 390 views
1

因此,我需要创建一个PhoneGap应用程序,在注册过程中,要求用户注册一个定期的每月订阅。PhoneGap - iOS - 周期性订阅应用程序 - 购买问题

我发现PhoneGap的这一优良教程在购买应用程式:https://fovea.cc/blog/index.php/3-steps-tutorial-for-phonegap-2x-in-app-purchase-on-ios/

并且遵循它(代码如下)。

所以我的问题是,我点击订阅按钮,并通过所有的iOS从对话框中行走,onPurchase似乎并不叫...

如果我关闭应用程序,回来并且onPurchase会立即被调用,然后每次加载应用程序时都会调用它。

一个想法是,iOS告诉我这个用户有一个积极的订阅,这很酷...但它似乎并没有告诉我什么时候第一次成功完成购买。

购买按钮只是说,他们开始的过程...他们可以随时取消,所以我不能离开。我需要告诉我用户已成功注册我的每月订阅。

想法?

var IAP = { 
    list: [config.IAP], 
    products: {} 
}; 

// Called when I load the app on a device 
function InitializePayment(){ 
    LogInfo("Loading IAPs " + IAP.list[0]); 

    // Check availability of the storekit plugin 
    if (!window.storekit) { 
     HandleError('In-App Purchases not available'); 
     return; 
    } 

    storekit.init({ 
     ready: IAP.onReady, 
     purchase: IAP.onPurchase, 
     restore: IAP.onRestore, 
     error: IAP.onError 
    }); 
} 

// IN APP PAYMENT 

IAP.onReady = function() { 
    // Once setup is done, load all product data. 
    storekit.load(IAP.list, function (products, invalidIds) { 
     LogInfo('IAPs Loaded...'); 

     for (var j = 0; j < products.length; ++j) { 
      var p = products[j]; 
      LogInfo('Loaded IAP(' + j + '). title:' + p.title + ' description:' + p.description + ' price:' + p.price + ' id:' + p.id); 
      IAP.products[p.id] = p; 
     } 

     IAP.loaded = true; 
     for (var i = 0; i < invalidIds.length; ++i) { 
      HandleError("Error: could not load " + invalidIds[i]); 
     } 
    }); 
}; 

IAP.onPurchase = function (transactionId, productId, receipt) { 
    LogInfo("IAP Purchase Success!!!"); 
    LogInfo("Transaction: " + transactionId); 
    LogInfo("Product: " + productId); 
    LogInfo("Receipt: " + receipt); 

    var n = (_localStorage['storekit.' + productId]|0) + 1; 
    _localStorage['storekit.' + productId] = n; 

    if (IAP.purchaseCallback) { 
     IAP.purchaseCallback(productId); 
     delete IAP.purchaseCallback; 
    } 

    PaymentSignup(transactionId, receipt, function() { 
     MovePageLeft("#pageSignupWelcome", _currentPage); 
    }); 
}; 

IAP.onError = function (errorCode, errorMessage) { 
    if (errorMessage == 'Cannot connect to iTunes Store'){ 
     // this just means that they cancelled a payment...no problem. 
     return; 
    } 

    HandleError('IAP Error: ' + errorMessage); 
}; 

IAP.buy = function (productId, callback) { 
    LogInfo("User clicked the subscribe button. Woot."); 
    IAP.purchaseCallback = callback; 
    storekit.purchase(productId); 
}; 

IAP.onRestore = function (transactionId, productId, transactionReceipt) { 
    var n = (localStorage['storekit.' + productId]|0) + 1; 
    localStorage['storekit.' + productId] = n; 
}; 

IAP.restore = function() { 
    storekit.restore(); 
}; 

var renderIAPs = function (el) { 
    if (IAP.loaded) { 
     var html = "<ul>"; 
     for(var id in IAP.products) { 
      var prod = IAP.products[id]; 
      html += "<li>" + 
     "<div class='iapTitle'>" + prod.title + "</div>" + 
     "<div class='iapDescription'>" + prod.description + "</div>" + 
     "<button type='button' " + 
     "onclick='IAP.buy(\"" + id + "\")'>Subscribe</button>" + 
     "</li>"; 
     } 
     html += "</ul>"; 
     el.innerHTML = html; 
    } 
    else { 
     el.innerHTML = "In-App Purchases not available."; 
    } 
}; 

回答

0

我没有用这个插件可以直接经验,但我查了GitHub上的开放性问题,发现问题#343其中提到购买法进行负荷连续调用。

问题#343引用问题#303作为与可消费下载相关的潜在问题的可能解决方案。该修复程序在4.1.0版中。

您正在运行哪个版本的iOS和插件?

+0

我正在运行4.0 ...将检查4.1。谢谢! – David