# การติดตามการสมัครสมาชิก Google Play

<Aside type="caution" icon="setting" title="ต้องการความช่วยเหลือจากนักพัฒนา">
คุณจะต้องได้รับความช่วยเหลือจากทีมนักพัฒนาของคุณเพื่อตั้งค่าการผสานรวมนี้ โปรดแชร์คู่มือนี้กับพวกเขา
</Aside>

## ภาพรวมการผสานรวม

[Real-Time Developer Notifications (RTDN)](https://developer.android.com/google/play/billing/rtdn-reference) เป็นบริการแบบ server-to-server ของ Google Play ที่ส่งข้อความแบบเรียลไทม์เมื่อใดก็ตามที่สถานะการสมัครสมาชิกมีการเปลี่ยนแปลง

ด้วยการเชื่อมต่อ Google Play RTDN กับ Pushwoosh คุณสามารถตอบสนองต่อวงจรชีวิตการสมัครสมาชิกทั้งหมดได้ ซึ่งรวมถึงการซื้อ, การต่ออายุ, การยกเลิก, ปัญหาการเรียกเก็บเงิน, การหมดอายุ และการคืนเงิน โดยไม่ต้องสร้างโครงสร้างพื้นฐาน backend ของคุณเอง เมื่อใดก็ตามที่สถานะการสมัครสมาชิกในบัญชี Google Play ของผู้ใช้มีการเปลี่ยนแปลง Google จะแจ้งเตือน Pushwoosh และ Pushwoosh จะส่ง event [`PW_Subscription*`](#tracked-events) ที่ตรงกันบนโปรไฟล์ผู้ใช้

<Aside type="note">
การผสานรวมนี้รองรับ **การสมัครสมาชิก Android** (Google Play RTDN) หากต้องการติดตามการสมัครสมาชิก iOS โปรดดูที่ [การติดตามการสมัครสมาชิก App Store](/th/product/integrations/app-store-subscription-tracking/)
</Aside>

### ประเภทการผสานรวม

**แหล่งที่มา:** Real-Time Developer Notifications ถูกส่งจาก Google Play ไปยัง Pushwoosh

### Event ที่ถูกติดตาม

Pushwoosh จะจับคู่การแจ้งเตือนของ Google Play ที่รองรับทุกรายการกับชุด event `PW_Subscription*` ที่เป็นหนึ่งเดียว เพื่อให้คุณสามารถเริ่มแคมเปญในทุกขั้นตอนของวงจรชีวิตการสมัครสมาชิกได้

| Event | เกิดขึ้นเมื่อ |
| ----- | ---------- |
| `PW_SubscriptionStart` | ผู้ใช้ซื้อการสมัครสมาชิกเป็นครั้งแรก |
| `PW_SubscriptionRenew` | การสมัครสมาชิกต่ออายุอัตโนมัติสำหรับรอบการเรียกเก็บเงินใหม่ |
| `PW_SubscriptionCancel` | ผู้ใช้ปิดการต่ออายุอัตโนมัติ การสมัครสมาชิกจะยังคงใช้งานได้จนกว่าจะหมดอายุ |
| `PW_SubscriptionResume` | ผู้ใช้เริ่มการสมัครสมาชิกใหม่อีกครั้งก่อนที่จะสิ้นสุดลง |
| `PW_SubscriptionBillingIssue` | การชำระเงินเพื่อต่ออายุล้มเหลว และการสมัครสมาชิกเข้าสู่ช่วงผ่อนผัน |
| `PW_SubscriptionRecovered` | การต่ออายุที่เคยล้มเหลวสำเร็จ และการสมัครสมาชิกกลับมาใช้งานได้อีกครั้ง |
| `PW_SubscriptionExpired` | การสมัครสมาชิกสิ้นสุดลงโดยสมบูรณ์และไม่สามารถใช้งานได้อีกต่อไป |
| `PW_SubscriptionRefund` | Google Play เพิกถอนการสมัครสมาชิก (เช่น หลังจากการคืนเงิน) |

ทุก event จะมี attribute เหมือนกัน:

- **productID:** ตัวระบุผลิตภัณฑ์ของ Google Play สำหรับการสมัครสมาชิก
- **expiresAt:** เวลาที่รอบการชำระเงินปัจจุบันสิ้นสุดลง ในรูปแบบ Unix timestamp เป็นวินาที รวมอยู่ด้วยเมื่อ Google ให้ข้อมูลมา

<details>

<summary>การจับคู่ event กับ Real-Time Developer Notifications</summary>

สำหรับนักพัฒนาที่กำลังตรวจสอบการผสานรวม แต่ละ event ของ Pushwoosh จะสอดคล้องกับค่า `notificationType` ของ RTDN เหล่านี้:

| Pushwoosh event | RTDN `notificationType` |
| --------------- | ----------------------- |
| `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) |

ประเภทการแจ้งเตือนอื่นๆ เช่น การระงับ, การเปลี่ยนแปลงราคา, การเลื่อน และการหยุดชั่วคราว จะได้รับการรับทราบแต่จะไม่โพสต์ event

</details>

### วิธีการทำงาน

การแจ้งเตือนของ Google Play ไม่มีตัวระบุของ Pushwoosh แต่จะมีเพียง purchase token และ `packageName` ของแอปเท่านั้น ดังนั้นแอปของคุณจะแท็กการซื้อแต่ละครั้งด้วยตัวระบุที่ Pushwoosh ต้องการ และ Pushwoosh จะอ่านข้อมูลนั้นกลับมาจากการซื้อเมื่อใดก็ตามที่ได้รับการแจ้งเตือน

1. สถานะการสมัครสมาชิกในบัญชี Google Play ของผู้ใช้มีการเปลี่ยนแปลง (การซื้อ, การต่ออายุ, การยกเลิก และอื่นๆ)
2. Google Play เผยแพร่ข้อความ RTDN ไปยัง topic ที่ใช้ร่วมกันของ Pushwoosh
3. Pushwoosh อ่าน `obfuscatedAccountId` ของการซื้อ ซึ่งแอปของคุณได้ตั้งค่าเป็น `<AppCode>:<hwid>` ในขณะที่ซื้อ
4. Pushwoosh ค้นหาอุปกรณ์ที่มี HWID ตรงกัน, ค้นหาผู้ใช้ที่ผูกกับอุปกรณ์นั้น และโพสต์ event `PW_Subscription*` ที่ตรงกันสำหรับผู้ใช้นั้น

<Aside type="caution" title="สำคัญ">
การจับคู่ระหว่างการซื้อใน Google Play กับผู้ใช้ Pushwoosh อาศัย `obfuscatedAccountId` หากแอปของคุณไม่ได้ตั้งค่านี้ในขณะที่ซื้อ Pushwoosh จะได้รับการแจ้งเตือนแต่ **จะไม่มีการโพสต์ event** ค่านี้จะถูกตั้งค่าในขณะที่ซื้อและ **ไม่สามารถเติมย้อนหลัง** สำหรับการสมัครสมาชิกที่มีอยู่แล้วได้ โปรดดู [วิธีตั้งค่าตัวระบุบัญชี](#set-the-account-identifier-at-purchase)
</Aside>

### กรณีการใช้งาน

**ดึงดูดสมาชิกที่กำลังจะยกเลิกกลับมา:** การปิดการต่ออายุอัตโนมัติไม่ได้ทำให้การเข้าถึงสิ้นสุดลงทันที การสมัครสมาชิกจะยังคงใช้งานได้จนกว่าจะสิ้นสุดรอบการชำระเงิน และนั่นคือโอกาสของคุณที่จะดึงผู้ใช้กลับมา เมื่อเกิด `PW_SubscriptionCancel` ให้เปิด [Customer Journey](/th/product/customer-journey/pushwoosh-journey-overview/) พร้อมกับ push เพื่อรักษาลูกค้า, [อีเมล](/th/product/messaging-channels/emails/) เกี่ยวกับฟีเจอร์ที่พวกเขาจะสูญเสียไป หรือ [ข้อความในแอป](/th/product/messaging-channels/in-apps/) พร้อมส่วนลดการต่ออายุก่อนที่การเข้าถึงจะสิ้นสุดลง

**แนะนำสมาชิกใหม่:** เริ่มชุดข้อความต้อนรับเมื่อเกิด `PW_SubscriptionStart` เพื่อช่วยให้ผู้ใช้ได้รับประโยชน์จากแผนของพวกเขาตั้งแต่เนิ่นๆ และเตรียมพร้อมสำหรับการต่ออายุ

**แก้ไขการชำระเงินที่ล้มเหลว:** เมื่อเกิด `PW_SubscriptionBillingIssue` หมายความว่าการชำระเงินเพื่อต่ออายุไม่สำเร็จ และการสมัครสมาชิกอยู่ในช่วงผ่อนผัน แจ้งให้ผู้ใช้อัปเดตวิธีการชำระเงินก่อนที่จะสูญเสียการเข้าถึง และติดตามผลด้วย `PW_SubscriptionRecovered` เพื่อยืนยันเมื่อปัญหาได้รับการแก้ไขแล้ว

**กระตุ้นผู้ใช้ที่หมดอายุแล้วอีกครั้ง:** เริ่มแคมเปญกระตุ้นการใช้งานอีกครั้งเมื่อเกิด `PW_SubscriptionExpired` พร้อมข้อเสนอสำหรับลูกค้าที่กลับมาสำหรับสมาชิกที่ได้ยกเลิกไปโดยสมบูรณ์แล้ว

## การตั้งค่าการผสานรวม

ก่อนที่คุณจะเริ่ม ตรวจสอบให้แน่ใจว่าคุณมีแอป Pushwoosh ที่ [กำหนดค่า FCM](/th/developer/pushwoosh-sdk/android-sdk/firebase-integration/integrate-pushwoosh-android-sdk/) แล้ว (ซึ่งจำเป็นสำหรับการส่ง push อยู่แล้ว), มีแอป Google Play ที่มีการสมัครสมาชิก และมีสิทธิ์เข้าถึง Play Console ในฐานะผู้ดูแลระบบ

### ตั้งค่าตัวระบุบัญชีในขณะที่ซื้อ

Pushwoosh ระบุผู้ใช้ที่ถูกต้องจาก **HWID** ของอุปกรณ์ รวมกับ **Application Code** ของคุณ Pushwoosh Android SDK มีตัวช่วย `getSubscriptionAccountId()` ที่จะส่งคืนค่านี้ในรูปแบบ `<AppCode>:<hwid>` แล้ว ส่งค่านี้ไปยัง `BillingFlowParams.setObfuscatedAccountId()` เมื่อคุณเริ่มขั้นตอนการเรียกเก็บเงินของ 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">
เรียกใช้ `getSubscriptionAccountId()` หลังจากที่ SDK ได้รับการเริ่มต้นแล้ว มันจะส่งคืนสตริงว่างหาก Application Code หรือ HWID ยังไม่พร้อมใช้งาน Google จำกัด obfuscated account id ไว้ที่ 64 ตัวอักษร ค่า `<AppCode>:<hwid>` ของ Pushwoosh จะอยู่ภายในขีดจำกัดนั้น
</Aside>

<Aside type="caution">
หากแอปของคุณแทนที่ Pushwoosh HWID ด้วยค่าที่กำหนดเอง `getSubscriptionAccountId()` จะสะท้อนค่านั้นโดยอัตโนมัติ อย่าสร้างตัวระบุด้วยตนเอง ควรใช้ตัวช่วยเสมอเพื่อให้ค่าตรงกับ HWID ของอุปกรณ์ใน Pushwoosh มิฉะนั้น event จะไม่สามารถระบุแหล่งที่มาได้
</Aside>

### ชี้ Real-Time Developer Notifications ไปที่ Pushwoosh

1. ใน [Google Play Console](https://play.google.com/console/) ไปที่ **Monetize → Monetization setup**
2. ค้นหา **Real-time developer notifications** และตั้งค่า **Topic name** เป็น:

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

3. คลิก **Save** สิทธิ์ในการเผยแพร่ได้ถูกมอบให้กับบริการแจ้งเตือนของ Google แล้ว ดังนั้นจึงไม่มีอะไรต้องกำหนดค่าเพิ่มเติมที่นี่

### ให้สิทธิ์แก่ service account ของ Pushwoosh

1. ใน Google Play Console ไปที่ **Users and permissions → Invite new user**
2. ป้อนอีเมล service account ของ Pushwoosh:

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

3. ใต้ **App permissions** เพิ่มแอปของคุณและให้สิทธิ์ **View financial data, orders, and cancellation survey responses** (พร้อมกับสิทธิ์ข้อมูลแอปแบบอ่านอย่างเดียว)
4. คลิก **Save** service account ไม่จำเป็นต้องยอมรับคำเชิญ การเข้าถึงจะใช้งานได้ทันที

### ยืนยัน event ใน Pushwoosh

Pushwoosh จะลงทะเบียนแต่ละ event `PW_Subscription*` ในโปรเจกต์ของคุณในครั้งแรกที่เกิดขึ้น พร้อมกับ attribute `productID` และ `expiresAt` หลังจากทำการทดสอบ ให้เปิด **Audience → Events** เพื่อตรวจสอบว่า event ปรากฏขึ้นแล้ว จากนั้น event เหล่านี้จะพร้อมสำหรับการแบ่งกลุ่ม, สถิติ และ Customer Journeys

### สร้างแคมเปญของคุณ

สร้าง [Customer Journey](/th/product/customer-journey/pushwoosh-journey-overview/) ด้วย [entry แบบ trigger-based](/th/product/customer-journey/journey-elements/entry-elements/trigger-based-entry/) บน event `PW_Subscription*` ใดๆ เช่น `PW_SubscriptionCancel` สำหรับการดึงลูกค้ากลับมา หรือ `PW_SubscriptionStart` สำหรับการแนะนำผู้ใช้ใหม่ และเพิ่มข้อความที่คุณต้องการส่ง

## การทดสอบ

เพื่อตรวจสอบการผสานรวมตั้งแต่ต้นจนจบ:

1. ใน Google Play Console เปิด **Monetization setup** และคลิก **Send test notification** ควรจะรายงานว่าสำเร็จ ซึ่งเป็นการยืนยันว่า topic ได้เชื่อมต่ออย่างถูกต้องแล้ว
2. ทำการซื้อการสมัครสมาชิกโดยตั้งค่าตัวระบุบัญชีตามที่อธิบายไว้ข้างต้น (ซึ่งจะทำให้เกิด `PW_SubscriptionStart`) จากนั้นยกเลิกจาก **Play Store → Subscriptions → Cancel** (ซึ่งจะทำให้เกิด `PW_SubscriptionCancel`)
3. ใน Pushwoosh Control Panel เปิดโปรไฟล์ผู้ใช้และไปที่ [Events history](/th/product/audience-data-and-segmentation/user-explorer/#events-history-tab)
4. ยืนยันว่า event ปรากฏขึ้นภายในไม่กี่นาที