Ce guide explique comment ajouter les transactions d'abonnement numérique à vos conversations pour que les utilisateurs puissent souscrire vos abonnements.
Termes clés: un produit numérique sous forme d'abonnement est un SKU qui gère les stocks nécessite que l'utilisateur soit facturé de façon récurrente, comme un magazine en ligne. C'est différent d'un produit numérique consommable qu'un utilisateur doit manuellement rachat, ou un produit numérique non consommable qui est automatiquement acheté qu'une seule fois.
Pour en savoir plus sur les abonnements numériques, consultez le documentation sur Fonctionnalités spécifiques aux abonnements.
Restrictions et consignes relatives aux avis
Des règles supplémentaires s'appliquent aux actions comportant des transactions. Cela peut nous prendre quelques afin d'examiner les actions incluant des transactions. planifier votre calendrier de publication. Pour faciliter le processus d'examen, assurez-vous de respecter avec le Règles et consignes concernant les transactions avant de soumettre votre action pour examen.
Les actions qui vendent des produits numériques ne peuvent être déployées que dans les pays suivants:
- Australie
- Brésil
- Canada
- Indonésie
- Japon
- Mexique
- Russie
- Singapour
- Thaïlande
- Turquie
- Royaume-Uni
- États-Unis
Flux de transactions
Ce guide décrit chaque étape de développement au fur et à mesure qu'elles se produisent dans le cas d'un produit numérique. le flux des transactions. Lorsque votre action gère des transactions pour des produits numériques, elle utilise le flux suivant:
- Configurez un client API d'achats numériques: votre action utilise le code Achats pour communiquer avec votre inventaire Google Play et effectuer des transactions. Avant d'effectuer toute autre action, votre action crée un client JWT avec une clé pour communiquer avec l'API des achats numériques.
- Recueillir des informations: votre action collecte des informations de base sur le
et votre inventaire Google Play pour préparer une transaction.
- Valider les exigences concernant les transactions: votre action utilise l'ID les exigences relatives aux transactions au début du parcours d'achat pour pour s'assurer que l'utilisateur peut effectuer une transaction.
- Rassembler l'inventaire disponible: votre action vérifie votre inventaire et identifie les articles actuellement disponibles à l’achat.
- Créez l'ordre: votre action présente les produits numériques disponibles aux l'utilisateur afin qu'il puisse en choisir un à acheter.
- Finaliser l'achat : votre action utilise l'API des achats numériques pour : effectuer un achat sur le Google Play Store à partir du choix de l'utilisateur ;
- Gérez le résultat: votre action reçoit un code d'état pour le paramètre transaction et notifie l'utilisateur que l'achat a réussi (ou qu'il prend étapes supplémentaires).
Prérequis
Avant d'intégrer des transactions numériques dans votre action, vous devez conditions préalables suivantes:
A compte de développeur et un compte marchand sur Google Play, pour gérer vos produits numériques Google Play Console :
Un domaine Web validées dans la Google Search Console. Il n'a pas besoin d'être associé à un site Web public. il suffit de référencer votre domaine Web.
Une application Android avec l'
com.android.vending.BILLING
autorisation dans la Google Play Console. Vos produits numériques seront des "achats via une application" associées à cette application dans la Google Play Console.Vous devez également créer une version dans la Play Console avec cette application, mais si si vous ne voulez pas que la version soit publique, créez une version alpha fermée version.
Si vous n'avez pas encore d'application Android, suivez les Associer des instructions pour une application Android
Un ou plusieurs abonnements dans le Google Play Console Il s'agit des produits numériques vendus avec votre action. Notez que vous devez ne peut pas créer d'abonnements dans la Play Console tant que vous n'avez pas configuré Conditions préalables à l'utilisation de l'application Android
Si vous n'avez pas encore d'abonnements, suivez les Créez vos instructions pour les produits numériques.
Associer une application Android
Si vous ne possédez pas d'application Android disposant de l'autorisation de facturation dans le dans la Google Play Console, procédez comme suit:
- Dans Android Studio ou l'IDE Android de votre choix, créez un projet. Choisir des options dans les invites de configuration du projet pour créer une application très basique.
- Attribuez au projet un nom de package, tel que
com.mycompany.myapp
. Ne laissez pas ce nom par défaut, car vous ne pouvez pas importer de packages qui inclurecom.example
à la Play Console. - Ouvrez le fichier
AndroidManifest.xml
de votre application. Ajoutez la ligne de code suivante dans l'élément
manifest
:<uses-permission android:name="com.android.vending.BILLING" />
Votre fichier
AndroidManifest.xml
doit se présenter comme suit:<manifest xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" package="com.mycompany.myapp"> <uses-permission android:name="com.android.vending.BILLING" /> <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/AppTheme" /> </manifest>
Créez votre application en tant qu'APK signé. Dans Android Studio, procédez comme suit:
- Accédez à Build (Compilation), puis à Generate Signed Bundle / APK (Générer un app bundle/APK signé).
- Cliquez sur Suivant.
- Sous Key Store Path (Chemin du keystore), cliquez sur Create new (Créer).
- Renseignez chaque champ, puis cliquez sur OK. Notez votre Key Store mot de passe et Mot de passe de la clé, et conservez-les en lieu sûr, vous les utiliserez plus tard.
- Cliquez sur Suivant.
- Sélectionnez Release (Version).
- Sélectionnez V1 (Signature JAR).
- Cliquez sur Terminer.
- Après quelques secondes, Android Studio génère un fichier
app-release.apk
. Localisez ce fichier pour une utilisation ultérieure.
Dans Google Play Console créer une application.
Accédez à Versions de l'application.
Sous Versions fermées, sélectionnez Gérer, puis Alpha.
Cliquez sur le bouton Créer une version.
Sous Laisser Google gérer et protéger votre clé de signature, saisissez votre identifiant les informations clés.
Importez votre fichier APK.
Cliquez sur Enregistrer.
Créer vos produits numériques
Si vous n'avez actuellement aucun produit numérique dans la Play Console, suivez ces étapes:
- Dans Google Play Console accédez à Produits intégrés, puis à Abonnements. Si un avertissement s'affiche, Suivez les instructions précédentes pour créer une application Android ou cliquez sur le lien. pour créer un profil de marchand.
- Cliquez sur Créer un abonnement.
- Remplissez les champs pour votre produit numérique. Notez l'identifiant produit, C'est ainsi que vous utiliserez ce produit à partir de votre action.
- Cliquez sur Enregistrer.
- Répétez les étapes 2 à 4 pour chaque produit que vous souhaitez vendre.
Préparer votre projet Actions
Une fois votre contenu numérique configuré dans la Google Play Console, vous devez activer transactions numériques et associer votre projet Actions à votre application Play.
Pour activer les transactions de produits numériques dans votre projet Actions, procédez comme suit : étapes:
- Dans la console Actions, ouvrez votre projet ou créez-en un.
- Accédez à Déployer, puis à Informations sur l'annuaire.
- Sous Informations supplémentaires et Transactions, cochez la case Oui. sous Vos actions utilisent-elles l'API d'achat numérique pour effectuer des transactions ? de produits numériques.
- Cliquez sur Enregistrer.
Créer une clé API pour le contenu numérique
Pour envoyer des requêtes à l'API Digital Goods, vous devez télécharger un service JSON associée à votre projet dans la console Actions.
Pour récupérer votre clé de compte de service, procédez comme suit:
- Dans la console Actions, cliquez sur l'icône à trois points en haut à droite. puis sur Paramètres du projet.
- Recherchez l'ID de projet de votre action.
- Suivez ce lien, qui remplace "
<project_id>
" par l'ID de votre projet:https://console.developers.google.com/apis/credentials?project=project_id
- Dans le menu de navigation principal, accédez à Identifiants.
- Sur la page qui s'affiche, cliquez sur Créer des identifiants, puis sur Service clé de compte Google Ads.
- Accédez à Compte de service, puis cliquez sur Nouveau compte de service.
- Nommez le compte de service, par exemple "digitaltransactions".
- Cliquez sur Créer.
- Définissez le rôle sur Projet > Propriétaire.
- Cliquez sur Continuer.
- Cliquez sur Create Key (Créer une clé).
- Sélectionnez le type de clé JSON.
- Cliquez sur Créer une clé et téléchargez la clé de compte de service JSON.
Enregistrez cette clé de compte de service en lieu sûr. Vous utiliserez cette clé dans votre fulfillment pour créer un client pour l'API des achats numériques.
Se connecter à votre inventaire Play
Pour accéder à vos produits numériques à partir d'un projet Actions, associez votre domaine Web et application avec votre projet en tant que propriétés connectées.
Remarque:Le processus de validation de la connexion peut prendre jusqu'à une semaine. vos propriétés. Si votre site Web ou votre application ne sont pas associés une fois ce délai écoulé, contactez l'assistance.
Pour associer le domaine Web et l'application Play Console à votre projet Actions, procédez comme suit : procédez comme suit:
- Dans la console Actions, accédez à Déployer, puis à Validation de la marque.
Si vous n'avez associé aucune propriété, commencez par associer un site Web:
- Cliquez sur le bouton du site Web (</>).
- Saisissez l'URL de votre domaine Web, puis cliquez sur Se connecter.
Google envoie un e-mail contenant des instructions supplémentaires à la personne validé pour ce domaine Web Google Search Console : Une fois que le destinataire de cet e-mail a suivi ces étapes, le site Web doit s'affichent sous Validation de la marque.
Une fois que vous avez au moins un site Web connecté, procédez comme suit pour connectez votre application Android:
- Dans la console Actions, accédez à Déployer, puis à Validation de la marque.
- Cliquez sur Associer une application.
Sur la page qui s'affiche, suivez les instructions pour valider votre site Web. domaine dans la Play Console. Sélectionnez l'application Play contenant votre produits numériques, puis saisissez l'URL du domaine Web exactement telle qu'elle apparaît sur le Page Validation de la marque.
Une fois encore, Google envoie un e-mail de validation au propriétaire confirmé de le domaine. Une fois la validation approuvée, votre application Play s'affichent sous Validation de la marque.
Activez l'option Accéder aux achats sur Play.
Créer votre parcours d'achat
Une fois votre projet Actions et votre inventaire de produits numériques préparés, élaborez une stratégie dans le flux d'achat de produits dans votre webhook de traitement des conversations.
1. Configurer un client API d'achats numériques
Dans votre webhook de fulfillment de conversation, créez un client JWT avec votre service
la clé JSON du compte
https://www.googleapis.com/auth/actions.purchases.digital
.
Le code Node.js suivant crée un client JWT pour l'API des achats numériques:
const serviceAccount = {'my-file.json'};
const request = require('request');
const {google} = require('googleapis');
const jwtClient = new google.auth.JWT(
serviceAccount.client_email, null, serviceAccount.private_key,
['https://www.googleapis.com/auth/actions.purchases.digital'],
null
);
2. Recueillir des informations
Avant que l'utilisateur puisse effectuer un achat, votre action collecte des informations sur l'élément la capacité de l'utilisateur à effectuer des achats et quels produits sont disponibles sur votre de l'inventaire.
2. a. Valider les exigences liées aux transactions
Il est recommandé de s'assurer que
le compte de l'utilisateur est configuré pour
des transactions, avant de leur donner la possibilité d'effectuer un achat. Cette étape
nous vérifions que l'utilisateur a configuré un mode de paiement et qu'il a
où les transactions numériques sont possibles. Au début de la transaction
utilisez l'outil d'aide DIGITAL_PURCHASE_CHECK
pour valider la transaction de l'utilisateur
avec l'Assistant.
Le code Node.js suivant utilise DIGITAL_PURCHASE_CHECK
au début du
conversation:
app.intent('Default Welcome Intent', async (conv, { SKU }) => {
// Immediately invoke digital purchase check intent to confirm
// purchase eligibility.
conv.ask(new DigitalPurchaseCheck());
});
Trouvez le résultat de cette vérification dans les arguments de la conversation sous la forme
DIGITAL_PURCHASE_CHECK_RESULT
Sur la base de ce résultat, vous pouvez poursuivre
le flux de transactions, ou s'éloigner et inviter les utilisateurs à consulter leur
configuration.
Le code Node.js suivant gère le résultat de la vérification des exigences :
app.intent('Digital Purchase Check', async (conv) => {
const arg = conv.arguments.get('DIGITAL_PURCHASE_CHECK_RESULT');
if (!arg || !arg.resultType) {
conv.close('Digital Purchase check failed. Please check logs.');
return;
}
// User does not meet necessary conditions for completing a digital purchase
if (arg.resultType === 'CANNOT_PURCHASE' || arg.resultType === 'RESULT_TYPE_UNSPECIFIED') {
conv.close(`It looks like you aren't able to make digital purchases. Please check your Google Pay configuration and try again.`);
return;
}
conv.ask('Welcome to the Digital Goods Sample. Would you like to see what I have for sale?');
});
2. b. Rassembler l'inventaire disponible
Utiliser l'API des achats numériques pour demander le Play Store actuellement disponible dans un inventaire, puis nous l'intégrons dans un tableau d'objets JSON pour chaque produit. Vous référencerez ce tableau plus tard pour montrer à l'utilisateur les options disponibles. à acheter.
Chacun de vos articles numériques est représenté par un SKU au format JSON. La Le code Node.js suivant décrit le formatage attendu pour chaque SKU:
body = {
skus: [
skuId: {
skuType: one of "APP" or "UNSPECIFIED"
id: string,
packageName: string
}
formattedPrice: string,
title: string,
description: string
]
}
Envoyez une requête POST à
https://actions.googleapis.com/v3/packages/{packageName}/skus:batchGet
point de terminaison, où {packageName}
correspond au nom du package de votre application dans
console (par exemple, com.myapp.digitalgoods
), puis mettez en forme le résultat dans un
d'objets SKU.
Pour ne récupérer que des produits numériques spécifiques dans le tableau obtenu, listez le produit
Les identifiants de produits numériques (tels qu'ils apparaissent sous chaque produit intégré dans
Console) que vous souhaitez rendre disponible à l'achat dans body.ids
.
Le code Node.js suivant demande la liste des produits disponibles API Achats et met en forme le résultat sous la forme d'un tableau de SKU:
return jwtClient.authorize((err, tokens) => {
if (err) {
throw new Error(`Auth error: ${err}`);
}
const packageName = 'com.example.projectname';
request.post(`https://actions.googleapis.com/v3/packages/${packageName}/skus:batchGet`, {
'auth': {
'bearer': tokens.access_token,
},
'json': true,
'body': {
'conversationId': conversationId,
'skuType': 'APP',
// This request is filtered to only retrieve SKUs for the following product IDs
'ids': ['annual.subscription']
},
}, (err, httpResponse, body) => {
if (err) {
throw new Error(`API request error: ${err}`);
}
console.log(`${httpResponse.statusCode}: ${httpResponse.statusMessage}`);
console.log(JSON.stringify(body));
});
});
});
3. Créer la commande
Pour commencer l'achat numérique de l'utilisateur, présentez une liste de vos produits numériques. disponibles à l'achat. Vous pouvez utiliser différents types de réponses enrichies pour représenter et inviter l'utilisateur à faire une sélection.
Le code Node.js suivant lit un tableau d'inventaire d'objets SKU et crée un Réponse "list" avec un élément de liste pour chacun:
skus.forEach((sku) => {
const key = `${sku.skuId.skuType},${sku.skuId.id}`
list.items[key] = {
title: sku.title,
description: `${sku.description} | ${sku.formattedPrice}`,
};
});
4. Finaliser l'achat
Pour finaliser l'achat, utilisez l'intent d'assistance COMPLETE_PURCHASE
avec l'objet
sélectionné par l'utilisateur.
Le code Node.js suivant gère la sélection de SKU de l'utilisateur à partir d'une réponse de liste
et demande l'intent COMPLETE_PURCHASE
avec ces informations:
app.intent('Send Purchase', (conv, params, option) => {
let [skuType, id] = option.split(',');
conv.ask(new CompletePurchase({
skuId: {
skuType: skuType,
id: id,
packageName: <PACKAGE_NAME>,
},
}));
});
5. Gérer le résultat
Une fois l'achat effectué, l'événement actions_intent_COMPLETE_PURCHASE
est déclenché.
Événement Dialogflow (ou intent SDK Actions actions.intent.COMPLETE_PURCHASE
) avec
Un argument COMPLETE_PURCHASE_VALUE
décrivant le résultat créer un intent ;
déclenché par cet événement, qui communique le résultat à l'utilisateur.
Gérer les résultats d'achat possibles suivants:
PURCHASE_STATUS_OK
: l'achat a bien été effectué. La transaction est terminé à ce stade. Vous devez donc quitter le flux transactionnel et revenir à votre conversation.PURCHASE_STATUS_ALREADY_OWNED
: la transaction a échoué, car l'utilisateur possède déjà cet article. Pour éviter cette erreur, vérifiez l'historique et d'adapter les articles présentés afin qu'ils n'aient pas la possibilité racheter des articles qu'ils possèdent déjà.PURCHASE_STATUS_ITEM_UNAVAILABLE
: la transaction a échoué, car le l'élément demandé n'est pas disponible. Pour éviter cette erreur, vérifiez les SKU plus proches du moment de l'achat.PURCHASE_STATUS_ITEM_CHANGE_REQUESTED
: la transaction a échoué, car le l'utilisateur a décidé d'acheter autre chose. Relancer la création de votre commande afin que l'utilisateur puisse prendre une autre décision immédiatement.PURCHASE_STATUS_USER_CANCELLED
: la transaction a échoué, car l'utilisateur a annulé le parcours d'achat. Puisque l'utilisateur a quitté prématurément le flux, demandez l'utilisateur s'il souhaite réessayer ou quitter la transaction. dans son ensemble.PURCHASE_STATUS_ERROR
: la transaction a échoué pour une raison inconnue. Laissez l'utilisateur sait que la transaction a échoué et lui demande s'il veut réessayer.PURCHASE_STATUS_UNSPECIFIED
: la transaction a échoué pour une raison inconnue. entraînant un état inconnu. Gérez cet état d'erreur en autorisant l'utilisateur qu'elle a échoué et lui demander s'il veut réessayer.
Le code Node.js suivant lit l'argument COMPLETE_PURCHASE_VALUE
et
gère chaque résultat:
app.intent('Purchase Result', (conv) => {
const arg = conv.arguments.get('COMPLETE_PURCHASE_VALUE');
console.log('User Decision: ' + JSON.stringify(arg));
if (!arg || !arg.purchaseStatus) {
conv.close('Purchase failed. Please check logs.');
return;
}
if (arg.purchaseStatus === 'PURCHASE_STATUS_OK') {
conv.close(`Purchase completed! You're all set!`);
} else if (arg.purchaseStatus === 'PURCHASE_STATUS_ALREADY_OWNED') {
conv.close('Purchase failed. You already own this item.');
} else if (arg.purchaseStatus === 'PURCHASE_STATUS_ITEM_UNAVAILABLE') {
conv.close('Purchase failed. Item is not available.');
} else if (arg.purchaseStatus === 'PURCHASE_STATUS_ITEM_CHANGE_REQUESTED') {
// Reprompt with your item selection dialog
} else {
conv.close('Purchase Failed:' + arg.purchaseStatus);
}
});
reflètent les achats de l'utilisateur ;
Lorsqu'un utilisateur interroge votre action, l'objet user
de la requête JSON inclut une liste
de leurs achats. Vérifiez ces informations et modifiez la réponse de votre action
en fonction du contenu payé par l'utilisateur.
L'exemple de code suivant montre l'objet user
d'une requête qui inclut
packageEntitlements
des précédents achats via une application qu'ils ont effectués pour
Package com.digitalgoods.application
:
"user": {
"userId": "xxxx",
"locale": "en-US",
"lastSeen": "2018-02-09T01:49:23Z",
"packageEntitlements": [
{
"packageName": "com.digitalgoods.application",
"entitlements": [
{
"sku": "non-consumable.1",
"skuType": "APP"
}
{
"sku": "consumable.2",
"skuType": "APP"
}
]
},
{
"packageName": "com.digitalgoods.application",
"entitlements": [
{
"sku": "annual.subscription",
"skuType": "SUBSCRIPTION",
"inAppDetails": {
"inAppPurchaseData": {
"autoRenewing": true,
"purchaseState": 0,
"productId": "annual.subscription",
"purchaseToken": "12345",
"developerPayload": "HSUSER_IW82",
"packageName": "com.digitalgoods.application",
"orderId": "GPA.233.2.32.3300783",
"purchaseTime": 1517385876421
},
"inAppDataSignature": "V+Q=="
}
}
]
}
]
},
"conversation": {
"conversationId": "1518141160297",
"type": "NEW"
},
"inputs": [
{
"intent": "actions.intent.MAIN",
"rawInputs": [
{
"inputType": "VOICE",
"query": "Talk to My Test App"
}
]
}
],
...
}