Achats intégrés
Préparation
Contrat des applications payantes
Si vous ne l'avez pas déjà fait, vous devrez signer le contrat des applications payantes et configurer vos informations bancaires et fiscales dans iTunes Connect.
Aide d' iTunes Connect: Contrat, taxes et résumé bancaire
Création des articles en vente dans l'application
Ensuite, vous devrez configurer vos articles dans iTunes Connect, et inclure des détails, come le nom, le prix, et une description qui indique les fonctionnalités de ceux-ci.
Aide d' iTunes Connect: Créer des articles à vendre dans l'application
Modification du CFBundleIdentifier
Pour tester les achats dans l'application avec Electron, vous devez changer le CFBundleIdentifier
dans node_modules/electron/dist/Electron.app/Contents/Info.plist
. Vous devez remplacer com.github.electron
par l'identifiant de l'application que vous avez créé avec iTunes Connect.
<key>CFBundleIdentifier</key>
<string>com.example.app</string>
Exemple de code
Voici un exemple qui montre comment utiliser les achats dans l'application en utilisant Electron. Vous devez remplacer les identifiants des produits par les identiifants des produits créés avec iTunes Connect (l'identifiant de com.example.app.product1
est product1
). Notez que vous devez écouter l'événement transactions-updated
dès que possible dans votre application.
// Processus principal
const { inAppPurchase } = require('electron')
const PRODUCT_IDS = ['id1', 'id2']
// Écouter les transactions dès que possible.
inAppPurchase.on('transactions-updated', (event, transactions) => {
if (!Array.isArray(transactions)) {
return
}
// Vérifier chaque transaction.
for (const transaction of transactions) {
const payment = transaction.payment
switch (transaction.transactionState) {
case 'purchasing':
console.log(`Purchasing ${payment.productIdentifier}...`)
break
case 'purchased': {
console.log(`${payment.productIdentifier} purchased.`)
// Get the receipt url.
const receiptURL = inAppPurchase.getReceiptURL()
console.log(`Receipt URL: ${receiptURL}`)
// Envoyez le fichier de réception au serveur et vérifier si il est valide.
// @see https://developer.apple.com/library/content/releasenotes/General/ValidateAppStoreReceipt/Chapters/ValidateRemotely.html
// ...
// Si la réponse est valide, le produit est acheté
// ...
// Terminer la transaction.
inAppPurchase.finishTransactionByDate(transaction.transactionDate)
break
}
case 'failed':
console.log(`L achat de ${payment.productIdentifier} a échoué.`)
// Terminer la transaction.
inAppPurchase.finishTransactionByDate(transaction.transactionDate)
break
case 'restored':
console.log(`The purchase of ${payment.productIdentifier} has been restored.`)
break
case 'deferred':
console.log(`The purchase of ${payment.productIdentifier} has been deferred.`)
break
default:
break
}
}
})
// Check if the user is allowed to make in-app purchase.
if (!inAppPurchase.canMakePayments()) {
console.log('L'utilisateur n'est pas autoriser à acheter avec cette appli.')n
}
// Récupère et affiche la description du produit.
inAppPurchase.getProducts(PRODUCT_IDS).then(products => {
// Vérifier les paramètres.
if (!Array.isArray(products) || products.length <= 0) {
console.log('Unable to retrieve the product information.')
return
}
// Affiche le nom et le prix de chaque produit.
for (const product of products) {
console.log(`The price of ${product.localizedTitle} is ${product.formattedPrice}.`)
}
// Ask the user which product they want to purchase.
const selectedProduct = products[0]
const selectedQuantity = 1
// Acheter le produit sélectionné.
inAppPurchase.purchaseProduct(selectedProduct.productIdentifier, selectedQuantity).then(isProductValid => {
if (!isProductValid) {
console.log('Le produit n'est pas valide.')
return
}
console.log('Le paiement a été ajouté la liste d'attente des paiements"')
})
})