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.
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"')
})
})