2015-12-19 103 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