Aller au contenu principal

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.
transactions.forEach((transaction) => {
const payment = transaction.payment

switch (transaction.transactionState) {
case 'purchasing':
console.log(`Purchasing ${payment.productIdentifier}...`)
break

case 'purchased': {
console.log(`${payment.productIdentifier} purchased.`)

// Obtenir l'URL de réception.
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
}
})
})

// Vérifier si l'utilisateur est autorisé à faire des achats dans l'application.
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('Impossible de réupérer les informations du produit.')
return
}

// Affiche le nom et le prix de chaque produit.
products.forEach(product => {
console.log(`Le prix de ${product.localizedTitle} est de
${product.formattedPrice}.`)
})

// Demander à l'utilisateur quel produit il désire acheter.
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"')
})
})