# Suivi des abonnements Google Play

<Aside type="caution" icon="setting" title="Assistance d'un développeur requise">
Vous aurez besoin de l'aide de votre équipe de développement pour configurer cette intégration. Veuillez partager ce guide avec eux.
</Aside>

## Aperçu de l'intégration

Les [notifications en temps réel pour les développeurs (RTDN)](https://developer.android.com/google/play/billing/rtdn-reference) sont le service de serveur à serveur de Google Play qui envoie un message en temps réel chaque fois que le statut d'un abonnement change.

En connectant les RTDN de Google Play à Pushwoosh, vous pouvez réagir à l'ensemble du cycle de vie de l'abonnement, y compris les achats, les renouvellements, les annulations, les problèmes de facturation, les expirations et les remboursements — sans avoir à construire votre propre infrastructure backend. Chaque fois que le statut d'un abonnement change dans le compte Google Play d'un utilisateur, Google en informe Pushwoosh, et Pushwoosh déclenche l'événement [`PW_Subscription*`](#tracked-events) correspondant sur le profil de l'utilisateur.

<Aside type="note">
Cette intégration prend en charge les **abonnements Android** (RTDN de Google Play). Pour suivre les abonnements iOS, consultez le [suivi des abonnements de l'App Store](/fr/product/integrations/app-store-subscription-tracking/).
</Aside>

### Type d'intégration

**Source :** Les notifications en temps réel pour les développeurs sont envoyées de Google Play à Pushwoosh.

### Événements suivis

Pushwoosh mappe chaque notification Google Play prise en charge à un ensemble d'événements unifiés `PW_Subscription*`, afin que vous puissiez déclencher des campagnes à n'importe quelle étape du cycle de vie de l'abonnement.

| Événement | Se déclenche lorsque |
| ----- | ---------- |
| `PW_SubscriptionStart` | Un utilisateur achète l'abonnement pour la première fois. |
| `PW_SubscriptionRenew` | L'abonnement se renouvelle automatiquement pour une nouvelle période de facturation. |
| `PW_SubscriptionCancel` | Un utilisateur désactive le renouvellement automatique. L'abonnement reste actif jusqu'à son expiration. |
| `PW_SubscriptionResume` | Un utilisateur réactive l'abonnement avant son expiration. |
| `PW_SubscriptionBillingIssue` | Un paiement de renouvellement échoue et l'abonnement entre dans sa période de grâce. |
| `PW_SubscriptionRecovered` | Un renouvellement qui avait échoué est finalement accepté et l'abonnement est de nouveau actif. |
| `PW_SubscriptionExpired` | L'abonnement a complètement expiré et n'est plus actif. |
| `PW_SubscriptionRefund` | Google Play révoque l'abonnement (par exemple, après un remboursement). |

Chaque événement comporte les mêmes attributs :

- **productID :** l'identifiant de produit Google Play de l'abonnement.
- **expiresAt :** la fin de la période payée actuelle, sous forme d'horodatage Unix en secondes. Inclus lorsque Google le fournit.

<details>

<summary>Correspondance des événements avec les notifications en temps réel pour les développeurs</summary>

Pour les développeurs qui vérifient l'intégration, chaque événement Pushwoosh correspond à ces valeurs `notificationType` des RTDN :

| Événement Pushwoosh | `notificationType` des RTDN |
| --------------- | ----------------------- |
| `PW_SubscriptionStart` | `SUBSCRIPTION_PURCHASED` (4) |
| `PW_SubscriptionRenew` | `SUBSCRIPTION_RENEWED` (2) |
| `PW_SubscriptionCancel` | `SUBSCRIPTION_CANCELED` (3) |
| `PW_SubscriptionResume` | `SUBSCRIPTION_RESTARTED` (7) |
| `PW_SubscriptionBillingIssue` | `SUBSCRIPTION_IN_GRACE_PERIOD` (6) |
| `PW_SubscriptionRecovered` | `SUBSCRIPTION_RECOVERED` (1) |
| `PW_SubscriptionExpired` | `SUBSCRIPTION_EXPIRED` (13) |
| `PW_SubscriptionRefund` | `SUBSCRIPTION_REVOKED` (12) |

Les autres types de notification, tels que la mise en attente, les changements de prix, les reports et les pauses, sont pris en compte mais ne publient pas d'événement.

</details>

### Comment ça marche

Une notification Google Play ne contient aucun identifiant Pushwoosh. Elle inclut uniquement un jeton d'achat et le `packageName` de l'application. Votre application tague donc chaque achat avec l'identifiant dont Pushwoosh a besoin, et Pushwoosh le relit à partir de l'achat chaque fois qu'une notification arrive.

1. Le statut d'un abonnement change dans le compte Google Play d'un utilisateur (un achat, un renouvellement, une annulation, etc.).
2. Google Play publie un message RTDN sur le sujet partagé de Pushwoosh.
3. Pushwoosh lit l'`obfuscatedAccountId` de l'achat, que votre application a défini sur `<AppCode>:<hwid>` au moment de l'achat.
4. Pushwoosh résout l'appareil dont le HWID correspond, trouve l'utilisateur qui y est lié et publie l'événement `PW_Subscription*` correspondant pour cet utilisateur.

<Aside type="caution" title="Important">
La correspondance entre un achat Google Play et un utilisateur Pushwoosh repose sur l'`obfuscatedAccountId`. Si votre application ne définit pas cette valeur au moment de l'achat, Pushwoosh reçoit la notification mais **aucun événement n'est publié**. Elle est définie au moment de l'achat et **ne peut pas être renseignée a posteriori** pour les abonnements existants. Voir [comment définir l'identifiant de compte](#set-the-account-identifier-at-purchase).
</Aside>

### Cas d'utilisation

**Reconquérir les abonnés sur le départ :** La désactivation du renouvellement automatique ne met pas fin à l'accès immédiatement. L'abonnement reste actif jusqu'à la fin de la période payée, et c'est votre fenêtre d'opportunité pour reconquérir l'utilisateur. Sur `PW_SubscriptionCancel`, lancez un [Customer Journey](/fr/product/customer-journey/pushwoosh-journey-overview/) avec une notification push de rétention, un [e-mail](/fr/product/messaging-channels/emails/) sur les fonctionnalités qu'il perdrait, ou un [message in-app](/fr/product/messaging-channels/in-apps/) avec une réduction sur le renouvellement avant que l'accès n'expire.

**Accueillir les nouveaux abonnés :** Déclenchez une série de bienvenue sur `PW_SubscriptionStart` pour aider les utilisateurs à tirer profit de leur abonnement dès le début et préparer le terrain pour le renouvellement.

**Récupérer les paiements échoués :** Lorsque `PW_SubscriptionBillingIssue` se déclenche, un paiement de renouvellement n'a pas abouti et l'abonnement est dans sa période de grâce. Invitez l'utilisateur à mettre à jour son mode de paiement avant de perdre l'accès, et faites un suivi avec `PW_SubscriptionRecovered` pour confirmer une fois le problème résolu.

**Ré-engager les utilisateurs inactifs :** Lancez une campagne de réactivation sur `PW_SubscriptionExpired` avec une offre de retour pour les abonnés qui ont complètement résilié.

## Configuration de l'intégration

Avant de commencer, assurez-vous d'avoir une application Pushwoosh avec [FCM configuré](/fr/developer/pushwoosh-sdk/android-sdk/firebase-integration/integrate-pushwoosh-android-sdk/) (déjà requis pour les notifications push), une application Google Play avec un abonnement, et un accès administrateur à la Play Console.

### Définir l'identifiant de compte lors de l'achat

Pushwoosh identifie le bon utilisateur à partir du **HWID** de l'appareil, combiné à votre **code d'application**. Le SDK Android de Pushwoosh expose une fonction d'assistance, `getSubscriptionAccountId()`, qui renvoie cette valeur déjà formatée en `<AppCode>:<hwid>`. Passez-la à `BillingFlowParams.setObfuscatedAccountId()` lorsque vous lancez le flux de facturation de Google Play.

<Tabs>
<TabItem label="Kotlin">
```kotlin
val billingParams = BillingFlowParams.newBuilder()
    .setProductDetailsParamsList(productDetailsParamsList)
    // Tag the purchase with the Pushwoosh account identifier "<AppCode>:<hwid>"
    .setObfuscatedAccountId(Pushwoosh.getInstance().subscriptionAccountId)
    .build()

billingClient.launchBillingFlow(activity, billingParams)
```
</TabItem>
<TabItem label="Java">
```java
BillingFlowParams billingParams = BillingFlowParams.newBuilder()
        .setProductDetailsParamsList(productDetailsParamsList)
        // Tag the purchase with the Pushwoosh account identifier "<AppCode>:<hwid>"
        .setObfuscatedAccountId(Pushwoosh.getInstance().getSubscriptionAccountId())
        .build();

billingClient.launchBillingFlow(activity, billingParams);
```
</TabItem>
</Tabs>

<Aside type="note">
Appelez `getSubscriptionAccountId()` après l'initialisation du SDK. Elle renvoie une chaîne vide si le code d'application ou le HWID n'est pas encore disponible. Google limite l'ID de compte obscurci à 64 caractères. La valeur `<AppCode>:<hwid>` de Pushwoosh reste dans cette limite.
</Aside>

<Aside type="caution">
Si votre application remplace le HWID de Pushwoosh par une valeur personnalisée, `getSubscriptionAccountId()` le reflète automatiquement. Ne construisez pas l'identifiant à la main. Utilisez toujours la fonction d'assistance pour que la valeur corresponde au HWID de l'appareil dans Pushwoosh, sinon l'événement ne pourra pas être attribué.
</Aside>

### Diriger les notifications en temps réel pour les développeurs vers Pushwoosh

1. Dans la [Google Play Console](https://play.google.com/console/), allez à **Monétiser → Configuration de la monétisation**.
2. Trouvez **Notifications en temps réel pour les développeurs** et définissez le **Nom du sujet** sur :

```
projects/pw-playstore-subscriptions/topics/play-rtdn
```

3. Cliquez sur **Enregistrer**. L'autorisation de publication est déjà accordée au service de notification de Google, il n'y a donc rien d'autre à configurer ici.

### Accorder l'accès au compte de service de Pushwoosh

1. Dans la Google Play Console, allez à **Utilisateurs et autorisations → Inviter un nouvel utilisateur**.
2. Saisissez l'e-mail du compte de service de Pushwoosh :

```
play-api@pw-playstore-subscriptions.iam.gserviceaccount.com
```

3. Sous **Autorisations de l'application**, ajoutez votre application et accordez l'autorisation **Afficher les données financières, les commandes et les réponses à l'enquête sur les annulations** (ainsi que l'autorisation d'information sur l'application en lecture seule).
4. Cliquez sur **Enregistrer**. Un compte de service n'a pas besoin d'accepter l'invitation. L'accès est actif immédiatement.

### Confirmer les événements dans Pushwoosh

Pushwoosh enregistre chaque événement `PW_Subscription*` dans votre projet la première fois qu'il se produit, avec les attributs `productID` et `expiresAt`. Après un test, ouvrez **Audience → Événements** pour vérifier que les événements apparaissent. Ils sont alors prêts pour la segmentation, les statistiques et les Customer Journeys.

### Construire votre campagne

Créez un [Customer Journey](/fr/product/customer-journey/pushwoosh-journey-overview/) avec une [entrée basée sur un déclencheur](/fr/product/customer-journey/journey-elements/entry-elements/trigger-based-entry/) sur n'importe quel événement `PW_Subscription*`, par exemple `PW_SubscriptionCancel` pour la reconquête ou `PW_SubscriptionStart` pour l'accueil, et ajoutez les messages que vous souhaitez envoyer.

## Test

Pour vérifier l'intégration de bout en bout :

1. Dans la Google Play Console, ouvrez **Configuration de la monétisation** et cliquez sur **Envoyer une notification de test**. Un message de succès devrait s'afficher, confirmant que le sujet est correctement configuré.
2. Effectuez un achat d'abonnement avec l'identifiant de compte défini comme décrit ci-dessus (cela déclenche `PW_SubscriptionStart`), puis annulez-le depuis **Play Store → Abonnements → Annuler** (cela déclenche `PW_SubscriptionCancel`).
3. Dans le panneau de contrôle de Pushwoosh, ouvrez le profil de l'utilisateur et allez à l'[historique des événements](/fr/product/audience-data-and-segmentation/user-explorer/#events-history-tab).
4. Confirmez que les événements apparaissent après quelques instants.