# การติดตามการสมัครสมาชิก App Store

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

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

[App Store Server Notifications](https://developer.apple.com/documentation/appstoreservernotifications) เป็นบริการแบบ server-to-server ของ Apple ที่จะส่งข้อความแบบเรียลไทม์ไปยัง backend ของคุณเมื่อใดก็ตามที่สถานะการสมัครสมาชิกมีการเปลี่ยนแปลง

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

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

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

**Source:** App Store Server Notifications จะถูกส่งจาก Apple ไปยัง Pushwoosh

### Event ที่ติดตาม

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

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

ทุก event จะมี attribute เดียวกัน:

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

<details>

<summary>วิธีที่ Event จับคู่กับ App Store Server Notifications</summary>

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

| Pushwoosh event | `notificationType` / `subtype` |
| --------------- | ------------------------------ |
| `PW_SubscriptionStart` | `SUBSCRIBED` / `INITIAL_BUY` |
| `PW_SubscriptionRenew` | `DID_RENEW` |
| `PW_SubscriptionCancel` | `DID_CHANGE_RENEWAL_STATUS` / `AUTO_RENEW_DISABLED` |
| `PW_SubscriptionResume` | `DID_CHANGE_RENEWAL_STATUS` / `AUTO_RENEW_ENABLED`, `SUBSCRIBED` / `RESUBSCRIBE` |
| `PW_SubscriptionBillingIssue` | `DID_FAIL_TO_RENEW` |
| `PW_SubscriptionRecovered` | `DID_RENEW` / `BILLING_RECOVERY` |
| `PW_SubscriptionExpired` | `EXPIRED` |
| `PW_SubscriptionRefund` | `REFUND`, `REVOKE` |

ประเภทการแจ้งเตือนอื่นๆ เช่น การขึ้นราคา การเปลี่ยนแปลงแผน การระงับชั่วคราว และคำขอการใช้งาน จะได้รับการยอมรับแต่จะไม่ส่ง event

</details>


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

1. สถานะการสมัครสมาชิกในบัญชี App Store ของผู้ใช้มีการเปลี่ยนแปลง (การซื้อ การต่ออายุ การยกเลิก และอื่นๆ)
2. Apple ส่ง App Store Server Notification (V2) ไปยัง URL การแจ้งเตือน Pushwoosh ของคุณ
3. Pushwoosh ถอดรหัส payload ที่ลงนามแล้วและอ่าน `appAccountToken` จากธุรกรรม
4. Pushwoosh ค้นหาอุปกรณ์ที่มี HWID ตรงกับ token นั้น ค้นหาผู้ใช้ที่ผูกกับอุปกรณ์นั้น และส่ง event `PW_Subscription*` ที่ตรงกันสำหรับผู้ใช้นั้น

<Aside type="caution" title="สำคัญ">
การจับคู่ระหว่างธุรกรรม App Store กับผู้ใช้ Pushwoosh อาศัย `appAccountToken` หากแอปของคุณไม่ได้ตั้งค่า token นี้ในขณะที่ซื้อ Pushwoosh จะได้รับการแจ้งเตือน แต่**จะไม่มีการส่ง event ใดๆ** โปรดดู [วิธีตั้งค่า `appAccountToken`](#set-appaccounttoken-to-the-devices-pushwoosh-hwid)
</Aside>

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

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

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

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

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


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

### ตั้งค่า `appAccountToken` เป็น HWID ของอุปกรณ์ Pushwoosh

Pushwoosh ระบุผู้ใช้ที่ถูกต้องจาก **HWID** ของอุปกรณ์ ดังนั้นแอปของคุณต้องแนบ HWID ของอุปกรณ์ Pushwoosh เป็น `appAccountToken` เมื่อมีการซื้อการสมัครสมาชิกผ่าน StoreKit

โดยค่าเริ่มต้น Pushwoosh iOS SDK จะใช้ `identifierForVendor` (IDFV) ของอุปกรณ์เป็น HWID ซึ่ง IDFV เป็น `UUID` อยู่แล้ว ซึ่งเป็นรูปแบบที่ Apple ต้องการสำหรับ `appAccountToken` จากนั้น Pushwoosh จะแก้ไขผู้ใช้ที่ผูกกับอุปกรณ์นั้นโดยอัตโนมัติ ดังนั้นวิธีนี้จึงใช้งานได้ไม่ว่าคุณจะกำหนด User ID ของคุณเองด้วย `setUserId` หรือไม่ก็ตาม

<Tabs>
<TabItem label="StoreKit 2">
```swift
// Attach the device's Pushwoosh HWID (the default IDFV) as the appAccountToken
var options: Set<Product.PurchaseOption> = []
if let hwid = UIDevice.current.identifierForVendor {
    options.insert(.appAccountToken(hwid))
}

let result = try await product.purchase(options: options)
```
</TabItem>
<TabItem label="StoreKit 1">
```swift
// applicationUsername must be a UUID string to populate appAccountToken
let payment = SKMutablePayment(product: product)
payment.applicationUsername = UIDevice.current.identifierForVendor?.uuidString
SKPaymentQueue.default().add(payment)
```
</TabItem>
</Tabs>

<Aside type="caution">
หากแอปของคุณมีการแทนที่ Pushwoosh HWID (ตัวอย่างเช่น ผ่านโมดูล [`PushwooshKeychain`](/th/developer/pushwoosh-sdk/ios-sdk/ios-keychain/) persistent HWID หรือค่าที่กำหนดเอง) ให้ตั้งค่า `appAccountToken` เป็น HWID เดียวกันนั้น token จะต้องตรงกับ HWID ของอุปกรณ์ใน Pushwoosh มิฉะนั้นจะไม่สามารถระบุ event ได้
</Aside>

### ค้นหา Application Code ของ Pushwoosh

เปิดแอปพลิเคชันของคุณใน Pushwoosh Control Panel **Application Code** ของคุณ (รูปแบบ `XXXXX-XXXXX`) จะแสดงอยู่ใต้ชื่อโปรเจกต์ในแถบด้านข้าง

คุณจะต้องใช้ Application Code เพื่อสร้าง URL การแจ้งเตือน

### เพิ่ม URL การแจ้งเตือนใน App Store Connect

1. ใน [App Store Connect](https://appstoreconnect.apple.com/) ไปที่ **Apps → แอปของคุณ → App Information** (ใต้ *General*) และเลื่อนไปที่ **App Store Server Notifications**
2. เลือกการแจ้งเตือน **Version 2**
3. ตั้งค่าทั้ง **Production Server URL** และ **Sandbox Server URL** เป็น:

```
https://appstore-notifications.pushwoosh.com/appstore/YOUR_APPLICATION_CODE/
```

4. แทนที่ `YOUR_APPLICATION_CODE` ด้วย Application Code จากขั้นตอนก่อนหน้า และคงเครื่องหมายทับ (`/`) ไว้ที่ท้ายสุด

<Aside type="note">
หากบัญชีของคุณโฮสต์อยู่ใน **US data center** ให้ใช้ `https://appstore-notifications.pushwoosh.us/appstore/YOUR_APPLICATION_CODE/` แทน หากคุณไม่แน่ใจว่าบัญชีของคุณใช้ data center ใด โปรดติดต่อ Customer Success Manager ของคุณหรือ [ฝ่ายสนับสนุนของ Pushwoosh](https://www.pushwoosh.com/contact-us/)
</Aside>

### ยืนยัน Event ใน Pushwoosh

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

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

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

## การทดสอบ

App Store Server Notifications สามารถถูกเรียกใช้งานได้ในสภาพแวดล้อม **Sandbox** ของ Apple หากต้องการตรวจสอบการผสานรวม:

1. ทำการซื้อการสมัครสมาชิกใน sandbox โดยตั้งค่า `appAccountToken` ตามที่อธิบายไว้ข้างต้น ซึ่งจะทำให้เกิด event `PW_SubscriptionStart`
2. ปิดใช้งานการต่ออายุอัตโนมัติจากหน้าจอการจัดการการสมัครสมาชิกของอุปกรณ์ ซึ่งจะทำให้เกิด event `PW_SubscriptionCancel`
3. ใน Pushwoosh Control Panel เปิดโปรไฟล์ผู้ใช้และไปที่ [Events history](/th/product/audience-data-and-segmentation/user-explorer/#events-history-tab)
4. ยืนยันว่า event ปรากฏขึ้นภายในไม่กี่นาที