แนบ appAccountToken กับทุกการซื้อบน App Store ไม่เช่นนั้นคุณจะปกป้องการคืนเงินไม่ได้
Apple ส่ง CONSUMPTION_REQUEST ไปยังเซิร์ฟเวอร์ของคุณเมื่อลูกค้าขอคืนเงิน แต่ธุรกรรมไม่เคยบอกว่าพวกเขาเป็นใคร appAccountToken คือ UUID ที่เชื่อมโยงการซื้อกลับไปยังผู้ใช้ของคุณ ตั้งค่ามันแล้วคุณจะตอบ Apple ด้วยข้อมูลจริงได้ ข้ามมันไปแล้วคุณก็ได้แต่เดา

ประเด็นสำคัญ
- appAccountToken คือ UUID ที่คุณแนบกับการซื้อบน App Store เพื่อให้ธุรกรรมที่เกิดขึ้นชี้กลับไปยังผู้ใช้ที่แน่ชัดในระบบของคุณเอง Apple เก็บมันไว้บนธุรกรรมและส่งกลับมาในทุกที่ที่ธุรกรรมนั้นปรากฏ
- กฎการจัดรูปแบบเดียวที่ Apple บังคับใช้คือค่าต้องเป็น UUID ที่ถูกต้อง ส่งอย่างอื่นเข้าไป ไม่ว่าจะเป็น id อีเมล หรือสตริงที่ต่อกัน StoreKit จะทิ้งมันไปเงียบ ๆ และส่ง appAccountToken กลับมาเป็น nil
- ใน StoreKit 2 คุณตั้งค่ามันด้วยตัวเลือกการซื้อเพียงตัวเดียว Product.PurchaseOption.appAccountToken(_:) โดยใช้ UUID ที่คงที่ซึ่งคุณสร้างและเก็บไว้สำหรับบัญชีนั้น
- ตั้งค่าครั้งเดียวบนการซื้อดั้งเดิม แล้ว Apple จะพาโทเค็นเดียวกันนี้ไปตลอดทุกการต่ออายุ การลองเรียกเก็บเงินใหม่ และการอัปเกรดในสายการสมัครสมาชิก
- ตั้งแต่ปี 2025 เอนด์พอยต์ Set App Account Token ให้เซิร์ฟเวอร์ของคุณแนบโทเค็นกับการซื้อที่เกิดขึ้นนอกแอปของคุณได้ เช่น การแลกโค้ดข้อเสนอและการซื้อที่ถูกโปรโมต ซึ่งขั้นตอนในแอปไม่เคยเข้าถึงได้
- appAccountToken คือสิ่งที่ทำให้ CONSUMPTION_REQUEST ของ Apple ตอบได้ หากไม่มีมัน คุณจะไม่สามารถจับคู่การคืนเงินกับลูกค้าที่คุณต้องอธิบายการใช้งานของเขาภายในกรอบเวลา 12 ชั่วโมง
- การคืนเงินที่คุณระบุตัวไม่ได้คือการคืนเงินที่คุณปกป้องไม่ได้ คุณคืนเงินให้กับการซื้อที่คุณมีหลักฐานจะเก็บไว้ได้ บวกกับการประมวลผล การเรียก API และการจ่ายเงินที่คุณจ่ายไปแล้วเพื่อส่งมอบมัน
ลูกค้าขอคืนเงินจาก Apple, Apple ส่ง CONSUMPTION_REQUEST ไปยังเซิร์ฟเวอร์ของคุณ และคุณมีเวลาสิบสองชั่วโมงในการตอบด้วยข้อมูลจริงว่าคนคนนั้นใช้ผลิตภัณฑ์อย่างไร จากนั้นคุณเปิดการแจ้งเตือนขึ้นมาแล้วพบว่าคุณไม่รู้เลยว่าเขาเป็นใคร ธุรกรรมมี originalTransactionId และ id ผลิตภัณฑ์ แต่ไม่มีอะไรที่ชี้ไปยังบัญชีในฐานข้อมูลของคุณเอง ช่องว่างนั้นแหละคือสิ่งที่ appAccountToken ปิด และถ้าคุณไม่ตั้งค่ามันตอนซื้อ คุณก็ปิดมันย้อนหลังสำหรับการขายนั้นไม่ได้
appAccountToken คือ UUID ที่คุณแนบกับการซื้อเพื่อให้ธุรกรรม App Store ที่เกิดขึ้นมีตัวชี้กลับไปยังผู้ใช้ที่แน่ชัดในระบบของคุณ ตั้งค่ามัน แล้วทุกคำถามเรื่องคืนเงินที่ Apple เคยถามเกี่ยวกับลูกค้ารายนั้นจะมาพร้อมกับตัวตนของเขา ข้ามมันไป แล้วคุณก็ได้แต่เดา ต่อไปนี้คือฟิลด์นี้คืออะไร วิธีตั้งค่ามัน เอนด์พอยต์ใหม่ที่ช่วยกอบกู้การซื้อที่เกิดขึ้นนอกแอปของคุณ และมูลค่าที่แท้จริงของจุดเชื่อมที่หายไปเมื่อการคืนเงินมาถึง
appAccountToken คืออะไรกันแน่
appAccountToken คือ UUID แบบทึบที่คุณสร้างขึ้นและส่งให้ StoreKit ในขณะที่ซื้อ Apple เก็บมันไว้บนธุรกรรมและส่งกลับมาในข้อมูลธุรกรรมของการซื้อนั้น และมันก็อยู่ตรงนั้น ในคำพูดของ Apple มันคือ "UUID ที่เชื่อมโยงธุรกรรมกับบัญชีผู้ใช้บนบริการของคุณเอง" กฎการจัดรูปแบบเดียวคือมันต้องเป็น UUID Apple ไม่อ่านมัน ไม่ตรวจสอบว่ามันเชื่อมโยงไปที่ใด และไม่สนใจว่ามันหมายถึงอะไรในฝั่งของคุณ มันคือจุดเชื่อมที่คุณควบคุม
เพราะมันอยู่บนธุรกรรม มันจึงกลับมาในทุกที่ที่ธุรกรรมกลับมา ธุรกรรมที่ลงนามในการแจ้งเตือนจากเซิร์ฟเวอร์ การตอบกลับ Get Transaction Info ของ App Store Server API และทุกการต่ออายุในสายการสมัครสมาชิก ล้วนพาโทเค็นเดียวกันมาถ้าคุณตั้งค่ามันบนการซื้อดั้งเดิม UUID หนึ่งตัว แนบครั้งเดียว ติดตามการเรียกเก็บเงินของลูกค้าไปตลอดอายุความสัมพันธ์
มันต้องเป็น UUID จริง ไม่เช่นนั้นมันจะหายไปเงียบ ๆ
กฎเดียวที่ Apple บังคับใช้คือรูปแบบ StoreKit 2 ต้องการ UUID แบบ RFC 4122 ถ้าคุณส่งสตริงที่ต่อกัน id ที่เป็นจำนวนเต็ม หรือที่อยู่อีเมล StoreKit จะไม่โยนข้อผิดพลาดออกมา มันจะทิ้งค่านั้นและธุรกรรมก็กลับมาโดยที่ appAccountToken ถูกตั้งเป็น nil นักพัฒนาเจอปัญหานี้อยู่ตลอด และอาการก็เหมือนกันเสมอ คือรูปแบบต่าง ๆ ของ "appAccountToken หายไปในเพย์โหลดของธุรกรรม" บนฟอรัมของ Apple เอง เกือบทุกครั้งเป็นเพราะค่าที่ส่งไปไม่ใช่ UUID ที่ถูกต้อง จงสร้าง UUID จริงที่ฝั่งเซิร์ฟเวอร์ เก็บมันไว้คู่กับบัญชี และอย่าส่งอะไรอื่นให้ StoreKit เด็ดขาด
วิธีตั้งค่ามันตอนซื้อ
ใน StoreKit 2 มันคือตัวเลือกการซื้อตัวเดียว สร้าง UUID บนเซิร์ฟเวอร์ของคุณเมื่อผู้ใช้สมัครสมาชิกหรือไปถึงหน้าชำระเงินครั้งแรก เก็บมันไว้บนระเบียนบัญชีของเขา และส่งค่าเดียวกันนั้นเข้าไปในการเรียกซื้อ
ลายเซ็นคือ Product.PurchaseOption.appAccountToken(_ token: UUID) และการซื้อจะมีหน้าตาแบบ try await product.purchase(options: [.appAccountToken(token)]) เมื่อธุรกรรมกลับมา ไม่ว่าจะยืนยันผ่าน App Store Server API หรือส่งมาโดยการแจ้งเตือนจากเซิร์ฟเวอร์ มันจะพา UUID นั้นมาด้วย และเซิร์ฟเวอร์ของคุณก็ค้นหาลูกค้าได้ในการค้นหาเพียงครั้งเดียว
ใช้โทเค็นที่คงที่หนึ่งตัวต่อหนึ่งบัญชี
อย่าสร้างโทเค็นใหม่สำหรับการซื้อแต่ละครั้งของผู้ใช้คนเดียวกัน Apple ส่งโทเค็นกลับมาในการต่ออายุ การลองเรียกเก็บเงินใหม่ และการอัปเกรดในสายเดียวกัน ดังนั้น UUID ที่คงที่ต่อหนึ่งบัญชีจึงให้เส้นด้ายที่สะอาดตั้งแต่การซื้อครั้งแรกไปจนถึงทุกเหตุการณ์ในอนาคต โทเค็นที่เปลี่ยนไปทุกการซื้อจะตัดเส้นด้ายนั้นและทำลายวัตถุประสงค์ทั้งหมด หนึ่งบัญชี หนึ่งโทเค็น นำกลับมาใช้ซ้ำทุกครั้งที่บัญชีนั้นซื้อ
เอนด์พอยต์ที่กอบกู้การซื้อที่เกิดนอกแอป
จนถึงปี 2025 มันมีช่องโหว่อยู่ ถ้าลูกค้าแลกโค้ดข้อเสนอหรือซื้อการซื้อในแอปที่ถูกโปรโมตตรงจาก App Store แอปของคุณจะไม่เคยรันขั้นตอนการซื้อ จึงไม่มีที่ให้ตั้งค่า appAccountToken ธุรกรรมเหล่านั้นมาถึงแบบนิรนามและก็เป็นเช่นนั้นตลอด
WWDC 2025 ปิดช่องว่างนี้ด้วยเอนด์พอยต์ Set App Account Token เซิร์ฟเวอร์ของคุณเรียก PUT /inApps/v1/transactions/{originalTransactionId}/appAccountToken บน App Store Server API พร้อม UUID ในเนื้อคำขอ และ Apple จะตั้งค่าโทเค็นบนธุรกรรมนั้น มันใช้ได้กับผลิตภัณฑ์ทุกประเภท ครอบคลุมการแลกโค้ดข้อเสนอและการซื้อที่ถูกโปรโมต และค่าที่คุณส่งจะเขียนทับโทเค็นใด ๆ ที่มีอยู่บนธุรกรรมแล้ว ตอนนี้คุณเชื่อมโยงการซื้อย้อนหลังได้ จากเซิร์ฟเวอร์ของคุณ โดยที่มันไม่เคยผ่านแอปของคุณเลย

| ช่องทางการซื้อ | ที่ที่คุณตั้งค่า appAccountToken | หมายเหตุ |
|---|---|---|
| การซื้อในแอป | ตัวเลือกการซื้อ StoreKit ตอนซื้อ | Product.PurchaseOption.appAccountToken(UUID) |
| การแลกโค้ดข้อเสนอ | เอนด์พอยต์ Set App Account Token ฝั่งเซิร์ฟเวอร์ | ไม่มีขั้นตอนในแอปให้เกี่ยวเข้าไป จึงตั้งค่าภายหลัง |
| การซื้อในแอปที่ถูกโปรโมตจาก App Store | เอนด์พอยต์ Set App Account Token ฝั่งเซิร์ฟเวอร์ | การซื้อเกิดขึ้นนอกแอปของคุณ |
| การต่ออายุการสมัครสมาชิก | ไม่ต้องทำอะไร | ส่งต่อมาโดยอัตโนมัติจากการซื้อดั้งเดิม |
จุดที่ข้อเชื่อมที่หายไปทำให้คุณเสียเงิน
จุดประสงค์ของโทเค็นไม่ใช่ระเบียนที่เรียบร้อย แต่คือการที่คำถามเรื่องคืนเงินเพียงคำถามเดียวของ Apple สำหรับนักพัฒนา ซึ่งก็คือ CONSUMPTION_REQUEST จะตอบได้ก็ต่อเมื่อคุณหาลูกค้าที่มันพูดถึงเจอ
เมื่อผู้ซื้อขอคืนเงินสำหรับสินค้าบริโภคหรือการสมัครสมาชิกแบบไม่ต่ออายุ Apple จะส่งการแจ้งเตือน CONSUMPTION_REQUEST ไปยังเซิร์ฟเวอร์ของคุณและให้เวลาคุณสิบสองชั่วโมงในการตอบกลับด้วย Send Consumption Information คำตอบของคุณคือข้อมูลเกี่ยวกับลูกค้ารายนั้นโดยเฉพาะ ได้แก่ เขาบริโภคผลิตภัณฑ์ไปมากแค่ไหน ระยะเวลาที่เป็นสมาชิก ยอดใช้จ่ายตลอดอายุการใช้งาน และสถานะการส่งมอบ appAccountToken เองก็เป็นหนึ่งในฟิลด์ในคำขอนั้น และที่สำคัญกว่านั้น มันคือวิธีที่ธุรกรรมของการแจ้งเตือนจับคู่กับบัญชีที่คุณกำลังจะอธิบายการใช้งาน ไม่มีโทเค็น ก็ไม่มีการค้นหา ก็ไม่มีคำตอบที่ถูกต้อง
คำตอบที่ว่างเปล่ามีราคาที่แท้จริงเท่าไร
การคืนเงินที่ระบุตัวไม่ได้บังคับให้คุณต้องเลือกทางที่แย่ คุณอาจตอบคำขอการบริโภคด้วยความว่างเปล่า ซึ่งถูกอ่านว่าเป็นการบริโภคต่ำและผลัก Apple ไปทางอนุมัติการคืนเงิน รวมถึงให้กับลูกค้าที่ใช้ผลิตภัณฑ์อย่างหนักด้วย หรือคุณอาจเดา ไม่ว่าทางไหนคุณก็กำลังคืนเงินสำหรับการซื้อที่คุณมีหลักฐานจะปกป้องได้ และคุณก็จ่ายต้นทุนจริงในการให้บริการมันไปแล้ว
ต้นทุนนั้นไม่ใช่ราคาขาย สินค้าบริโภคที่รันชุดการเรียก API ของโมเดล สร้างภาพ ส่งออกวิดีโอ หรือทริกเกอร์การจ่ายเงินให้ครีเอเตอร์ ได้ใช้เงินจริงไปแล้วในวินาทีที่มันถูกส่งมอบ การคืนเงินคืนเงินที่ลูกค้าจ่าย มันไม่คืนใบแจ้งหนี้ของผู้ให้บริการ ลองคูณลูกค้าที่ระบุตัวไม่ได้หนึ่งรายด้วยทุกการคืนเงินที่เขายื่น และด้วยทุกคนที่ขอคืนเงินซ้ำ ๆ ที่หวังพึ่งการที่คุณไม่รู้ว่าเขาเป็นใคร แล้วโทเค็นที่คุณข้ามไปก็กลายเป็นบรรทัดโค้ดที่แพงที่สุดที่คุณไม่เคยเขียน
แนวคิดเดียวกันนี้มีอยู่บน Android ในอีกชื่อหนึ่ง
Google Play แก้ปัญหาเดียวกันนี้ด้วย setObfuscatedAccountId ซึ่งแนบตัวระบุบัญชีกับการซื้อเพื่อให้การตรวจสอบการปฏิเสธการชำระเงินของ Google ผ่าน orders.reviewrefund สามารถตอบโดยอ้างอิงกับผู้ใช้จริงได้ คนละสโตร์ คนละกลไก แต่บทเรียนเดียวกัน คือแนบตัวตนตอนซื้อ ไม่เช่นนั้นคุณจะปกป้องข้อพิพาทในภายหลังไม่ได้ บน App Store เครื่องมือนั้นคือ appAccountToken และมันต้องเป็น UUID
สามนิสัยที่ทำให้โทเค็นอยู่ในที่ของมัน
- สร้าง UUID หนึ่งตัวต่อหนึ่งบัญชีและเก็บมันไว้ หนึ่งโทเค็นที่คงที่ต่อหนึ่งลูกค้า สร้างขึ้นเมื่อเขาสมัครสมาชิกหรือตอนชำระเงินครั้งแรก บันทึกไว้บนระเบียนของเขาและนำกลับมาใช้ซ้ำสำหรับทุกการซื้อ
- ตรวจสอบก่อนที่คุณจะส่งมัน ยืนยันว่าค่าเป็น UUID จริงในโค้ดการซื้อของคุณ เพื่อที่ id ที่ผิดรูปแบบจะไม่มีวันกลายเป็นโทเค็น nil บนธุรกรรมอย่างเงียบ ๆ
- เติมย้อนหลังให้การซื้อที่เกิดนอกแอป เมื่อการแจ้งเตือนจากเซิร์ฟเวอร์มาถึงสำหรับการแลกโค้ดข้อเสนอหรือการซื้อที่ถูกโปรโมตโดยไม่มีโทเค็น จงเรียกเอนด์พอยต์ Set App Account Token เพื่อแนบโทเค็นที่ถูกต้อง
ทำสามข้อนี้ แล้วทุกธุรกรรมที่ Apple ส่งมาให้คุณ รวมถึงคำขอคืนเงิน จะมาถึงโดยผูกกับลูกค้าที่มันเป็นของเขาอยู่แล้ว
นี่คือรากฐานที่ RefundHalt พึ่งพา เราอ่าน appAccountToken จากทุกธุรกรรมและการแจ้งเตือนจากเซิร์ฟเวอร์ ผูกมันเข้ากับการใช้งานที่เราติดตามอยู่แล้วสำหรับบัญชีนั้น และตอบคำขอการบริโภคของ Apple ภายในกรอบเวลาสิบสองชั่วโมงด้วยตัวเลขจริงของลูกค้า โทเค็นคือเส้นด้าย ตั้งค่ามันครั้งเดียว แล้วการปกป้องการคืนเงินของคุณก็จะมีอะไรให้ยึดเกาะ
คำถามที่พบบ่อย
- appAccountToken ใน App Store คืออะไร
- appAccountToken คือ UUID ที่คุณสร้างขึ้นและแนบกับการซื้อผ่าน StoreKit เพื่อให้ธุรกรรม App Store ที่เกิดขึ้นชี้กลับไปยังบัญชีผู้ใช้เฉพาะรายในระบบของคุณเอง Apple เก็บมันไว้บนธุรกรรมและส่งกลับมาในข้อมูลธุรกรรม การแจ้งเตือนจากเซิร์ฟเวอร์ และทุกการต่ออายุในสายเดียวกัน ซึ่งช่วยให้คุณเชื่อมโยงเหตุการณ์ในอนาคตใด ๆ รวมถึงคำขอคืนเงิน เข้ากับลูกค้าที่ถูกต้อง
- ทำไม appAccountToken ของฉันจึงเป็น nil หรือหายไป
- เกือบทุกครั้งเป็นเพราะค่าที่คุณส่งไปไม่ใช่ UUID ที่ถูกต้อง StoreKit 2 ต้องการ UUID แบบ RFC 4122 และทิ้งสิ่งอื่นทั้งหมดอย่างเงียบ ๆ ดังนั้นสตริงที่ต่อกัน id ที่เป็นจำนวนเต็ม หรืออีเมล จึงกลับมาเป็น appAccountToken ที่เป็น nil ในขณะที่การซื้อยังคงสำเร็จ สาเหตุทั่วไปอีกอย่างคือการซื้อที่เกิดขึ้นนอกแอปของคุณ เช่น การแลกโค้ดข้อเสนอ ซึ่งไม่มีขั้นตอนในแอปทำงานเพื่อตั้งค่าโทเค็น
- ฉันตั้งค่า appAccountToken หลังการซื้อได้ไหม สำหรับโค้ดข้อเสนอ
- ได้ ตั้งแต่ปี 2025 เอนด์พอยต์ Set App Account Token บน App Store Server API ให้เซิร์ฟเวอร์ของคุณแนบหรือเขียนทับโทเค็นบนธุรกรรมที่มีอยู่ได้ โดยเรียก PUT /inApps/v1/transactions/{originalTransactionId}/appAccountToken พร้อม UUID ในเนื้อคำขอ มันใช้ได้กับผลิตภัณฑ์ทุกประเภทและถูกสร้างมาสำหรับการซื้อที่เกิดขึ้นนอกแอปของคุณ เช่น การแลกโค้ดข้อเสนอและการซื้อในแอปที่ถูกโปรโมต
- appAccountToken ต้องเป็น UUID หรือไม่
- ต้อง กฎการจัดรูปแบบเดียวที่ Apple บังคับใช้คือค่าต้องเป็น UUID ที่ถูกต้อง นอกจากนั้นมันเป็นแบบทึบ ดังนั้นมันจึงเชื่อมโยงไปยังคีย์บัญชีใดก็ได้ที่คุณต้องการในฝั่งของคุณ แต่ถ้ามันไม่ใช่ UUID StoreKit จะไม่เก็บมันและธุรกรรมก็กลับมาโดยที่ appAccountToken ถูกตั้งเป็น nil
- appAccountToken ช่วยเรื่องการคืนเงินอย่างไร
- เมื่อลูกค้าขอคืนเงิน Apple จะส่ง CONSUMPTION_REQUEST และให้เวลาคุณสิบสองชั่วโมงในการตอบกลับด้วยข้อมูลเกี่ยวกับผู้ซื้อรายนั้นโดยเฉพาะ appAccountToken คือวิธีที่คุณจับคู่ธุรกรรมของการแจ้งเตือนกับบัญชีที่คุณต้องรายงานการใช้งาน และมันเป็นหนึ่งในฟิลด์ในคำขอการบริโภคเอง หากไม่มีมันคุณจะตอบด้วยการใช้งานจริงไม่ได้ Apple จึงเอนเอียงไปทางอนุมัติการคืนเงินที่คุณมีหลักฐานจะโต้แย้งได้
- appAccountToken ควรแตกต่างกันสำหรับการซื้อแต่ละครั้งหรือไม่
- ไม่ ใช้ UUID ที่คงที่หนึ่งตัวต่อหนึ่งบัญชีและนำกลับมาใช้ซ้ำสำหรับทุกการซื้อที่ผู้ใช้คนนั้นทำ Apple พาโทเค็นข้ามการต่ออายุและการอัปเกรดในสายการสมัครสมาชิก ดังนั้นโทเค็นที่คงที่จึงให้จุดเชื่อมที่สะอาดตลอดเวลา โทเค็นที่เปลี่ยนไปทุกการซื้อจะตัดจุดเชื่อมนั้นและทำให้การผูกธุรกรรมกลับไปยังลูกค้าคนเดียวกันยากขึ้น
แหล่งข้อมูลและเนื้อหาเพิ่มเติม
- Apple Developer: appAccountToken (StoreKit Transaction)
- Apple Developer: Product.PurchaseOption.appAccountToken(_:)
- Apple Developer: Set App Account Token (App Store Server API)
- Apple Developer: appAccountToken (App Store Server API)
- Apple Developer: ConsumptionRequest (Send Consumption Information)
- Apple Developer: Send Consumption Information
- WWDC25: Dive into App Store server APIs for In-App Purchase
RefundHalt
ระบบอัตโนมัติสำหรับการคืนเงินบน App Store และ Google Play
อ่านต่อ
ไม่รับทราบการซื้อบน Google Play ภายในสามวันแล้ว Google จะคืนเงิน นี่คือสิ่งที่มันทำให้คุณต้องเสีย
Google Play คืนเงินและเพิกถอนการซื้อใดก็ตามที่เซิร์ฟเวอร์ของคุณไม่รับทราบภายในสามวันโดยอัตโนมัติ นี่คือความล้มเหลวของการเชื่อมต่อระบบ ไม่ใช่การตัดสินใจของลูกค้า และป้องกันได้อย่างสมบูรณ์ นี่คือกฎที่แน่ชัด เหตุผลที่มันทำงาน และต้นทุนจริงของการขายที่หายไปแต่ละครั้ง
การใช้การคืนเงินในทางที่ผิดซ้ำ ๆ ทำให้คุณเสียสองต่อ นี่คือวิธีที่สโตร์เปิดทางให้คุณตอบโต้
ลูกค้าที่ขอคืนเงินครั้งแล้วครั้งเล่าไม่ใช่เรื่องบังเอิญ การใช้การคืนเงินในทางที่ผิดทำให้คุณเสียทั้งเงินที่ต้องคืนและ compute ที่คุณใช้ไปแล้ว และทั้งสองสโตร์มอบสัญญาณระบุตัวตนให้คุณเพื่อร้อยเรียงรูปแบบนี้เข้าด้วยกัน นั่นคือ appAccountToken ของ Apple และ obfuscated account ID ของ Google