วิธีวัดผลและปรับปรุงอัตราการคงอยู่ของผู้ใช้แอป (User Retention) ในสัปดาห์แรก

opoinstall
2026-09-01
5 min read

คุณจะวัดอัตราการคงอยู่ของผู้ใช้งานแอปมือถือ (Mobile App Retention) ในวันที่ 1 และวันที่ 7 บน Android และ iOS ได้อย่างไร? การคงอยู่ของผู้ใช้ในสัปดาห์แรกคำนวณได้จากการหารจำนวนเอนทิตีที่ใช้งาน (active entities) ซึ่งบันทึกเซสชันที่ผ่านเกณฑ์ ณ จุดไมล์สโตนที่กำหนด (∣At∣|A_t|) ด้วยขนาดกลุ่มผู้ใช้เริ่มต้น (baseline cohort size) (∣U0∣|U_0|): R(t)=∣At∣∣U0∣×100%R(t) = \frac{|A_t|}{|U_0|} \times 100\%.

การคงอยู่ของผู้ใช้ (User retention) วัดสัดส่วนของกลุ่มผู้ใช้มือถือที่ได้มา ซึ่งกลับมาและมีส่วนร่วมอย่าง active กับแอปพลิเคชันในช่วงเวลาที่กำหนด ในด้านการวิเคราะห์แอปพลิเคชัน การคงอยู่ของผู้ใช้ในสัปดาห์แรก (D0→D7D_0 \to D_7) เป็นข้อมูลพฤติกรรมเบื้องต้นสำหรับการวิเคราะห์มูลค่าตลอดชีพของลูกค้า (customer-lifetime-value) ในภายหลัง โดยประเมินว่าผู้ใช้ใหม่เปลี่ยนผ่านจากการติดตั้งครั้งแรกไปสู่การใช้งานผลิตภัณฑ์เป็นประจำได้อย่างสำเร็จหรือไม่

คำศัพท์ คำจำกัดความ เอนทิตีที่เกี่ยวข้อง บทบาทความตั้งใจในการค้นหา
User Retention (การคงอยู่ของผู้ใช้) การวัดการมีส่วนร่วมของผู้ใช้ที่เกิดขึ้นซ้ำในช่วงเวลาที่กำหนด อัตราการคงอยู่ (Retention Rate) เชิงข้อมูล / เชิงพาณิชย์
Retention Rate (อัตราการคงอยู่) เปอร์เซ็นต์ทางคณิตศาสตร์ของกลุ่มผู้ใช้เริ่มต้นที่ใช้งานอยู่ในวันที่ผ่านไปเฉพาะเจาะจง การวิเคราะห์แอป (App Analytics) เชิงเทคนิค / เชิงข้อมูล
Cohort Analysis (การวิเคราะห์กลุ่มผู้ใช้) การจัดกลุ่มผู้ใช้ตามจุดยึดทางเวลาหรือพฤติกรรมร่วมกัน เพื่อติดตามการคงอยู่ตามกาลเวลา เส้นทางผู้ใช้งาน (User Journey) เชิงข้อมูล

ทำไมสัปดาห์แรกจึงควบคุมวงจรการคงอยู่ของผู้ใช้แอปมือถือ

หน้าต่างสำคัญ: ทำไมสัปดาห์แรกจึงเป็นหน้าต่างสังเกตการณ์การคงอยู่ช่วงต้นที่สำคัญ

เจ็ดวันแรกหลังจากการดาวน์โหลดแอปพลิเคชันมักถูกใช้เป็นหน้าต่างสังเกตการณ์การคงอยู่ช่วงต้น เนื่องจากหลายทีมติดตามไมล์สโตนในวันที่ 1, วันที่ 3 และวันที่ 7 ก่อนที่ข้อมูลกลุ่มผู้ใช้ในระยะยาวจะพร้อมใช้งาน รูปร่างและความชันของการลดลงในช่วงต้นจะแตกต่างกันอย่างมากตามจังหวะของผลิตภัณฑ์ รูปแบบการสร้างรายได้ และหมวดหมู่

การคงอยู่ในสัปดาห์แรกให้สัญญาณเริ่มต้นของพฤติกรรมกลุ่มผู้ใช้ แต่ไม่ได้เป็นตัวกำหนดผลลัพธ์การคงอยู่ในระยะยาวโดยอิสระ วันที่ 7 เป็นจุดตรวจสอบการคงอยู่ช่วงต้นเพิ่มเติม แต่ไม่ได้กำหนดผลลัพธ์ในวันที่ 30 หรือวันที่ 90 ต่อมา กลุ่มผู้ใช้ในระยะยาวต้องได้รับการวัดผลอย่างเป็นอิสระ การติดตามเส้นโค้งการคงอยู่ช่วงต้นช่วยให้ทีมวิศวกรรมและการเติบโตสามารถระบุรูปแบบการเสื่อมถอยในช่วงแรก และพิจารณาว่ากระบวนการต้อนรับผู้ใช้ (onboarding) คุณภาพการได้มาซึ่งผู้ใช้ ความเสถียรของผลิตภัณฑ์ หรือปัจจัยอื่น ๆ จำเป็นต้องมีการตรวจสอบก่อนที่จะเพิ่มงบประมาณ

การกำหนดการมีส่วนร่วมแบบ Active: แยกแยะเซสชันที่มีความหมายออกจากการเปิดแอปในเบื้องหลังชั่วคราว

การวัดการคงอยู่ของสัปดาห์ใหม่อย่างแม่นยำจำเป็นต้องมีการกำหนดเกณฑ์สถานะ active ที่ชัดเจนภายใน telemetry ฝั่งไคลเอนต์ การนับทุกการเปิดแอปพลิเคชันดิบหรือการทำงานในเบื้องหลังเป็นเหตุการณ์การคงอยู่แบบ active จะทำให้เกิดความบิดเบือนในการวัด

ระบบปฏิบัติตำแหน่งจะรันงานในเบื้องหลัง เช่น การดึงเนื้อหาล่วงหน้า การซิงโครไนซ์ push token หรือการรีเฟรชเบื้องหลังเป็นระยะ ซึ่งเริ่มต้นกระบวนการแอปพลิเคชันโดยไม่มีผู้ใช้ใช้งานอยู่จริง ในทำนองเดียวกัน การเปิดแอปสั้น ๆ โดยไม่ได้ตั้งใจและปิดไปภายในไม่กี่วินเกณฑ์การมีส่วนร่วมที่ผลิตภัณฑ์กำหนดไว้

ไปปeline การวิเคราะห์มือถือจะกำหนดคุณสมบัติสถานะ active โดยใช้เกณฑ์หลายปัจจัยที่ชัดเจน:

  • ระยะเวลาการแสดงผลเบื้องหน้าขั้นต่ำ (Minimum Foreground Duration): กิจกรรม UI ในเบื้องหน้าอย่างต่อเนื่องที่ตรงตามเกณฑ์ที่ผลิตภัณฑ์กำหนด (เช่น ≥10 seconds\ge 10\text{ seconds} ของการทำงานต่อเนื่อง)
  • การยืนยันสถานะเบื้องหน้า (Foreground State Verification): การยืนยันว่าแอปพลิเคชันเปลี่ยนเข้าสู่สถานะ UI แบบอินเทอร์แอกทีฟ (ProcessLifecycleOwner →\to DefaultLifecycleObserver.onResume บน Android หรือสถานะ active ระดับแอปพลิเคชันบน iOS)
  • การดำเนินการเหตุการณ์ตามเกณฑ์ (Qualifying Event Execution): ความสำเร็จในการทำไมล์สโตนในแอปที่จำเป็น (เช่น การดำเนินการค้นหา การสตรีมเนื้อหา หรือการอัปเดตโปรไฟล์)

ความสัมพันธ์ระหว่างการหลุดออกในวันที่ 1 และความเสถียรของการคงอยู่ ในวันที่ 7

การคงอยู่ในวันที่ 1 (D1D_1) และการคงอยู่ในวันที่ 7 (D7D_7) บันทึกขั้นตอนที่แตกต่างกันของวงจรชีวิตผู้ใช้ช่วงต้น การคงอยู่ในวันที่ 1 วัดพฤติกรรมการกลับมาใช้งานทันทีหลังการติดตั้ง และสามารถวิเคราะห์ร่วมกับ telemetry ของกระบวนการต้อนรับเพื่อประเมินความต่อเนื่องหลังวันที่ 0

การคงอยู่ในวันที่ 7 ประเมินความคุ้นเคยในช่วงต้น ระหว่างวันที่ 1 และวันที่ 7 ความแปลกใหม่เริ่มต้นจะลดลง และการคงอยู่ของผู้ใช้จะขึ้นอยู่กับประโยชน์ใช้สอยที่เกิดขึ้นซ้ำ ความเกี่ยวข้องของการแจ้งเตือน และเวิร์กฟลอว์ผลิตภัณฑ์แบบออร์แกนิก ผลลัพธ์ในวันที่ 1 ที่แข็งแกร่งตามด้วยการคงอยู่ในวันที่ 7 ที่อ่อนแอ จะระบุรูปแบบการเสื่อมถอยในช่วงต้นถึงกลางสัปดาห์ แต่จำเป็นต้องมีการแบ่งกลุ่มเพิ่มเติมตามช่องทางการได้มา เวอร์ชันของแอป และการมีส่วนร่วมกับฟีเจอร์ ก่อนที่จะระบุสาเหตุว่าเป็นคุณภาพของกระบวนการต้อนรับหรือการส่งมอบมูลค่าของผลิตภัณฑ์

การคงอยู่ของผู้ใช้มือถือในสัปดาห์แรกตั้งแต่ D0 ถึง D7

วิธีสร้างสูตรและคำนวณอัตราการคงอยู่จากวันที่หนึ่งถึงวันที่เจ็ด

คำจำกัดความตามทฤษฎีเซตของกลุ่มผู้ใช้เริ่มต้นและชุดการกลับมาใช้งาน

เพื่อให้แน่ใจว่ามีความแม่นยำทางคณิตศาสตร์ในเครื่องมือวิเคราะห์และโมเดลดาต้าแวร์เฮาส์ เมตริกการคงอยู่ช่วงต้นจึงถูกกำหนดสูตรขึ้นโดยใช้สัญกรณ์เซตอย่างเป็นทางการ

ให้ U0U_0 แทนชุดกลุ่มผู้ใช้เริ่มต้นของเอนทิตีที่มีคุณสมบัติครบถ้วน (เช่น อินสแตนซ์แอปที่ไม่ซ้ำกันหรือโปรไฟล์ผู้ใช้ที่ตรวจสอบสิทธิ์แล้ว) ที่สร้างขึ้นในวันที่ตามปฏิทินที่เป็นจุดยึด D0D_0:

U0={u:CohortAnchorEvent(u)=D0}U_0 = \{u : \text{CohortAnchorEvent}(u) = D_0\}

โดยที่ ∣U0∣|U_0| แทนขนาดกลุ่มผู้ใช้เริ่มต้นทั้งหมด

ให้ AtA_t แทนกลุ่มย่อยของ U0U_0 ที่บันทึกเซสชัน active ที่มีคุณสมบัติครบถ้วนอย่างน้อยหนึ่งเซสชันในวันที่ผ่านไปที่แน่นอน tt โดยที่ t∈{1,2,3,…,7}t \in \{1, 2, 3, \dots, 7\}:

At={u∈U0:HasQualifyingSession(u,D0+t)=True}A_t = \{u \in U_0 : \text{HasQualifyingSession}(u, D_0 + t) = \text{True}\}

โดยที่ ∣At∣|A_t| แทนจำนวนเอนทิตี active ที่ไม่ซ้ำกันในวันที่ผ่านไป tt

การคำนวณอัตราการคงอยู่แบบระบุวันเป๊ะ ๆ (Classic Exact-Day Retention) สำหรับไมล์สโตนในสัปดาห์แรก

การคงอยู่แบบ N-Day ดั้งเดิมประเมินการมีส่วนร่วมอย่างเคร่งครัดตามขอบเขตวันในปฏิทินที่สัมพันธ์กับวันที่ 0

อัตราการคงอยู่ของวันที่ tt ที่แน่นอน R(t)R(t) ถูกกำหนดเป็น:

R(t)=∣At∣∣U0∣×100%R(t) = \frac{|A_t|}{|U_0|} \times 100\%

ไมล์สโตนสำคัญในสัปดาห์แรกประกอบด้วย:

  • อัตราการคงอยู่ของวันที่ 1 (R1R_1): ประเมินสัดส่วนของกลุ่มผู้ใช้ที่ใช้งานในวันที่ 1 พอดี (D0+1 dayD_0 + 1\text{ day}):
R1=∣A1∣∣U0∣×100%R_1 = \frac{|A_1|}{|U_0|} \times 100\%
  • อัตราการคงอยู่ของวันที่ 3 (R3R_3): ประเมินสัดส่วนของกลุ่มผู้ใช้ที่ใช้งานในวันที่ 3 พอดี (D0+3 daysD_0 + 3\text{ days}):
R3=∣A3∣∣U0∣×100%R_3 = \frac{|A_3|}{|U_0|} \times 100\%
  • อัตราการคงอยู่ของวันที่ 7 (R7R_7): ประเมินสัดส่วนของกลุ่มผู้ใช้ที่ใช้งานในวันที่ 7 พอดี (D0+7 daysD_0 + 7\text{ days}):
R7=∣A7∣∣U0∣×100%R_7 = \frac{|A_7|}{|U_0|} \times 100\%

ในการสร้างแบบจำลองแบบระบุวันเป๊ะ ๆ ผู้ใช้ที่ใช้งานในวันที่ 6 และวันที่ 8 แต่ไม่ใช้งานในวันที่ 7 จะถูกยกเว้นจาก A7A_7 สิ่งนี้ให้ความแม่นยำทางเวลาที่เข้มงวดสำหรับแอปพลิเคชันที่มีความถี่สูง

ชุดข้อมูลการคงอยู่แบบระบุวันเป๊ะสำหรับ D1 D3 และ D7

การแยกแยะระหว่างการไม่กลับมาใช้งานในวันที่ N กับการเลิกใช้งานในวัฏจักรการดำเนินงาน (Churn)

ในการวิเคราะห์สัปดาห์แรก เป็นสิ่งสำคัญที่จะต้องแยกแยะระหว่างสัดส่วนการไม่กลับมาใช้งานในวันเดียวกับการเลิกใช้งานตามวัฏจักรการดำเนินงาน ในการคงอยู่แบบระบุวันเป๊ะ ๆ ค่าส่วนเติมเต็ม (1.0−Rt1.0 - R_t) จะแทนสัดส่วนการไม่กลับมาใช้งานสำหรับวันในปฏิทินนั้น ๆ โดยเฉพาะ มันไม่ได้บ่งชี้ว่าผู้ใช้ละทิ้งผลิตภัณฑ์ไปอย่างถาวร เนื่องจากการไม่กลับมาของผู้ใช้ในวันที่ 1 มักจะมีการบันทึกเซสชันที่มีคุณสมบัติในวันที่ 3 หรือวันที่ 7 บ่อยครั้ง

การเลิกใช้งานตามวัฏจักรการดำเนินงานถูกกำหนดผ่านเกณฑ์การไม่มีความเคลื่อนไหวต่อเนื่อง (เช่น การบันทึกเซสชันที่มีคุณสมบัติเป็นศูนย์ตลอด 14 หรือ 30 วันติดต่อกัน) หรือเหตุการณ์สิ้นสุดที่ชัดเจน (เช่น การลบบัญชี) การปฏิบัติว่าการไม่กลับมาในวันที่ 1 เป็นการเลิกใช้งานถาวรจะนำไปสู่การสร้างโมเดลวงจรชีวิตที่ไม่ถูกต้องและการใช้จ่ายเพื่อดึงดูดผู้ใช้กลับมาก่อนเวลาอันควร

การสร้างสถาปัตยกรรมไปپeline Telemetry ในสัปดาห์แรกข้าม SDK ของ Android และ iOS

การติดตั้งเครื่องมือสำหรับเครื่องมือสถานะเซสชันระดับกระบวนการ (Process-Level Session State Machines)

การสร้างไปpeline การวัดการคงหน้าที่แม่นยำจำเป็นต้องมีการจับภาพการเปลี่ยนผ่านเบื้องหน้าในระดับแอปพลิเคชันโดยไม่ทำให้เกิดการแบ่งเซสชันเทียมระหว่างการนำทางหน้าจอภายใน

เพื่อให้แน่ใจว่ามีความสมบูรณ์ของ telemetry:

  1. การติดตามวงจรระดับแอปพลิเคชัน (Application-Level Lifecycle Tracking): ไคลเอนต์จะตรวจสอบสถานะเบื้องหน้าของแอปพลิเคชันโดยรวม โดยหลีกเลี่ยงการยุติเซสชันก่อนกำหนดเมื่อผู้ใช้นำทางระหว่างมุมมองหรือกิจกรรมแต่ละรายการ การเรียกกลับระดับกระบวนการเหมาะสมสำหรับการคัดเลือกเซสชันหยาบ ๆ ส่วนผลิตภัณฑ์ที่ต้องการจังหวะเวลาการมีส่วนร่วมความแม่นยำสูงควรใช้แหล่งเวลาเบื้องหน้าที่มีความละเอียดยิ่งขึ้น
  2. การคัดเลือก Active แบบแยกส่วน (Decoupled Active Qualification): การเข้าสู่เบื้องหน้าจะบันทึกประทับเวลาวงจรดิบ แต่เหตุการณ์การคงอยู่แบบ active จะถูกทำเครื่องหมายว่ามีคุณสมบัติก็ต่อเมื่อระยะเวลาของเซสชันตรงตามเกณฑ์ของผลิตภัณฑ์ (≥10 seconds\ge 10\text{ seconds}) หรือเมื่อเกิดเหตุการณ์ทางธุรกิจที่จำเป็น
  3. การจัดคิวเหตุการณ์ในเครื่อง (Local Event Queuing): เหตุการณ์ telemetry จะถูกจัดเก็บไว้ในคิวท้องถิ่นที่ทนทานและถูกส่งแบบอะซิงโครนัสพร้อมโทเค็นการลองใหม่แบบ idempotent เพื่อป้องกันการสูญหายของเหตุการณ์ในระหว่างที่เครือข่ายขัดข้อง

นักพัฒนาสามารถอ้างอิง แพ็กเกจ SDK การวิเคราะห์บนมือถือ เพื่อประเมินไบนารีของไคลเอนต์และโมดูลการใช้งาน

การใช้งานบน Android: การสังเกตการณ์วงจรระดับกระบวนการและการนำเข้าพารามิเตอร์

บน Android การติดตามเบื้องหน้าในระดับแอปพลิเคชันจะถูกนำมาใช้โดยใช้ androidx.lifecycle.ProcessLifecycleOwner (ซึ่งเป็นส่วนหนึ่งของอาร์ทิแฟกต์ androidx.lifecycle:lifecycle-process) เพื่อสังเกตการเปลี่ยนผ่านสถานะกระบวนการคอมโพสิต สิ่งนี้ช่วยหลีกเลี่ยงการแยกเซสชันที่ผิดพลาดเมื่อทำการเปลี่ยนผ่านระหว่างกิจกรรม (Activities) ที่แยกจากกัน โปรดทราบว่า ProcessLifecycleOwner จะตรวจสอบเฉพาะกระบวนการแอปพลิเคชันปัจจุบันในสถาปัตยกรรมแบบหลายกระบวนการเท่านั้น

การใช้งาน Kotlin ด้านล่างแสดงการสังเกตการณ์วงจรระดับกระบวนการร่วมกับการดึงพารามิเตอร์การติดตั้งแบบ deferred โดยกำหนดเป้าหมายไปที่ OpoInstall Android SDK (โปรดตรวจสอบลายเซ็นของเมธอดเทียบกับเวอร์ชัน SDK ที่ติดตั้งไว้) โปรดทราบว่าการคงอยู่ของคิวการผลิตและการขนส่งการลองใหม่ถูกละไว้เพื่อความกระชับ:


```kotlin
// Android Kotlin Implementation
package com.example.analytics.lifecycle

import android.app.Application
import android.os.SystemClock
import android.util.Log
import androidx.lifecycle.DefaultLifecycleObserver
import androidx.lifecycle.LifecycleOwner
import androidx.lifecycle.ProcessLifecycleOwner
import com.opoinstall.api.OpoInstall
import com.opoinstall.api.OpoData
import com.opoinstall.api.OpoError
import com.opoinstall.api.ResultCallBack

// Note: Requires androidx.lifecycle:lifecycle-process artifact.
// Note: In multi-process architectures, ProcessLifecycleOwner tracks only the current process.
class AnalyticsApplication : Application(), DefaultLifecycleObserver {

    private var sessionStartElapsedMs: Long = 0
    private var isCoreActionCompletedInSession: Boolean = false

    override fun onCreate() {
        super.onCreate()
        
        // Register process-level lifecycle observer to capture application-wide foreground transitions
        ProcessLifecycleOwner.get().lifecycle.addObserver(this)
        
        // Initialize OpoInstall core SDK
        OpoInstall.initialize(this)
        
        // Retrieve deferred installation parameters on initial Day 0 launch
        fetchDeferredInstallationParameters()
    }

    private fun fetchDeferredInstallationParameters() {
        OpoInstall.getInstance().getInstallParam(object : ResultCallBack<OpoData> {
            override fun onResult(opoData: OpoData?) {
                opoData?.let { data ->
                    val customParams = data.data // Dynamic parameters (e.g., inviter_token, promo_code)
                    val channelCode = data.channelCode // Acquisition channel identifier
                    
                    // Log sanitized metadata rather than raw dynamic payload
                    val hasPayload = !customParams.isNullOrEmpty()
                    Log.i(TAG, "Parameter restoration complete: payload_present=$hasPayload, channel=$channelCode")
                    
                    // Route user directly to intended content or pre-fill referral credentials
                    applyOnboardingContext(customParams, channelCode)
                }
            }

            override fun onError(error: OpoError?) {
                Log.w(TAG, "Parameter restoration bypassed or timed out: ${error?.errorMsg}")
            }
        })
    }

    private fun applyOnboardingContext(customParams: String?, channelCode: String?) {
        // Business logic to populate referral codes and route to designated workspace
    }

    override fun onResume(owner: LifecycleOwner) {
        // Application entered interactive foreground state at process level
        // Use monotonic clock to prevent wall-clock time jump distortion
        sessionStartElapsedMs = SystemClock.elapsedRealtime()
        isCoreActionCompletedInSession = false
        Log.d(TAG, "Process entered interactive foreground. Session timer started.")
    }

    override fun onPause(owner: LifecycleOwner) {
        // Application exited interactive foreground state at process level
        val sessionDurationSeconds = (SystemClock.elapsedRealtime() - sessionStartElapsedMs) / 1000
        
        // Evaluate active retention qualification: duration >= 10s OR core milestone execution
        val isQualifiedActiveSession = sessionDurationSeconds >= 10 || isCoreActionCompletedInSession
        
        if (isQualifiedActiveSession) {
            emitQualifiedRetentionSession(durationSeconds = sessionDurationSeconds)
        } else {
            Log.d(TAG, "Transient session (<10s, no core action) excluded from active retention.")
        }
    }

    fun markCoreActionCompleted() {
        isCoreActionCompletedInSession = true
    }

    private fun emitQualifiedRetentionSession(durationSeconds: Long) {
        // Dispatch structured telemetry event to analytics ingestion broker
        Log.i(TAG, "Logging qualified active session: duration=${durationSeconds}s")
    }

    companion object {
        private const val TAG = "RetentionAnalytics"
    }
}

การใช้งานบน iOS: การติดตามวงจรของ Scene และการดึงข้อมูลบริบทแบบไดนามิก

บนสถาปัตยกรรม iOS สมัยใหม่ (iOS 13+) UISceneDelegate จะจัดการเหตุการณ์วงจรชีวิตเฉพาะของ scene และการกำหนดเส้นทาง Universal Link เพื่อติดตามสถานะเซสชันรวมของแอปทั้งหมดได้อย่างแม่นยำข้ามสภาพแวดล้อมแบบหลาย scene หรือหลายหน้าต่าง (เช่น iPadOS) เลเยอร์ telemetry จะฟังการแจ้งเตือนวงจรชีวิตของ UIApplication (didBecomeActiveNotification, willResignActiveNotification และ didEnterBackgroundNotification) เพื่อสะสมช่วงเวลา active แบบอินเทอร์แอกทีฟและสรุปคุณสมบัติของเซสชันเมื่อเข้าสู่เบื้องหลัง

การใช้งาน Swift ด้านล่างแสดงการกำหนดเส้นทางระดับ scene การจัดการ Universal Link และการติดตามเซสชันแอปพลิเคชันรวม โดยกำหนดเป้าหมายไปที่ OpoInstall iOS SDK (โปรดตรวจสอบลายเซ็นของเมธอดเทียบกับเวอร์ชัน SDK ที่ติดตั้งไว้) โปรดทราบว่าการคงอยู่ของคิวการผลิตและการขนส่งการลองใหม่ถูกละไว้เพื่อความกระชับ:

// iOS Swift Implementation
import UIKit
import libOpoInstallSDK

// Dedicated singleton to coordinate aggregate application-level session telemetry across scenes
final class AppSessionTracker {
    static let shared = AppSessionTracker()
    
    private var activeIntervalStartTime: Date?
    private var accumulatedActiveDuration: TimeInterval = 0
    private var isCoreActionCompletedInSession: Bool = false
    private var isSessionInProgress: Bool = false

    private init() {
        // Observe application-level active/inactive and foreground/background state boundaries
        NotificationCenter.default.addObserver(
            self,
            selector: #selector(handleAppDidBecomeActive),
            name: UIApplication.didBecomeActiveNotification,
            object: nil
        )
        NotificationCenter.default.addObserver(
            self,
            selector: #selector(handleAppWillResignActive),
            name: UIApplication.willResignActiveNotification,
            object: nil
        )
        NotificationCenter.default.addObserver(
            self,
            selector: #selector(handleAppDidEnterBackground),
            name: UIApplication.didEnterBackgroundNotification,
            object: nil
        )
    }

    @objc private func handleAppDidBecomeActive() {
        if !isSessionInProgress {
            isSessionInProgress = true
            accumulatedActiveDuration = 0
            isCoreActionCompletedInSession = false
            print("Application entered foreground. Session lifecycle started.")
        }
        activeIntervalStartTime = Date()
        print("Active interval started.")
    }

    @objc private func handleAppWillResignActive() {
        if let startTime = activeIntervalStartTime {
            accumulatedActiveDuration += Date().timeIntervalSince(startTime)
            activeIntervalStartTime = nil
            print("Active interval paused. Accumulated active duration: \(accumulatedActiveDuration)s")
        }
    }

    @objc private func handleAppDidEnterBackground() {
        guard isSessionInProgress else { return }
        
        // Ensure any ongoing active interval duration is accumulated
        if let startTime = activeIntervalStartTime {
            accumulatedActiveDuration += Date().timeIntervalSince(startTime)
            activeIntervalStartTime = nil
        }
        
        let totalActiveDuration = accumulatedActiveDuration
        
        // Evaluate active retention qualification: active duration >= 10s OR core milestone execution
        let isQualifiedActiveSession = totalActiveDuration >= 10.0 || isCoreActionCompletedInSession
        
        if isQualifiedActiveSession {
            emitQualifiedRetentionSession(duration: totalActiveDuration)
        } else {
            print("Transient session (<10s active, no core action) excluded from active retention.")
        }
        
        // Finalize and reset session state upon backgrounding
        isSessionInProgress = false
        accumulatedActiveDuration = 0
        activeIntervalStartTime = nil
        isCoreActionCompletedInSession = false
    }

    func markCoreActionCompleted() {
        isCoreActionCompletedInSession = true
    }

    private func emitQualifiedRetentionSession(duration: TimeInterval) {
        // Dispatch structured telemetry event to analytics ingestion gateway
        print("Logging qualified active session: duration=\(duration)s")
    }
}

class SceneDelegate: UIResponder, UIWindowSceneDelegate, OpoInstallDelegate {

    var window: UIWindow?

    func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
        guard let _ = (scene as? UIWindowScene) else { return }
        
        // Initialize aggregate session tracker
        _ = AppSessionTracker.shared
        
        // Initialize OpoInstall delegate
        OpoInstallSDK.initWith(self)
        
        // Process Universal Links when launched from a terminated state
        for userActivity in connectionOptions.userActivities {
            OpoInstallSDK.continue(userActivity)
        }
        
        // Retrieve deferred installation parameters on Day 0
        fetchDeferredInstallationParameters()
    }

    private func fetchDeferredInstallationParameters() {
        OpoInstallSDK.defaultManager()?.getInstallParmsCompleted({ [weak self] (appData: OpoinstallData?) in
            guard let self = self, let data = appData else { return }
            
            let customParams = data.data // Custom dynamic parameters dictionary
            let channelCode = data.channelCode // Acquisition channel identifier
            
            // Log sanitized metadata rather than raw dynamic payload
            let hasPayload = customParams != nil
            print("Restored iOS parameters complete: payload_present=\(hasPayload), channel=\(String(describing: channelCode))")
            
            // Execute automated onboarding routing and reward binding
            self.applyOnboardingContext(customParams: customParams, channelCode: channelCode)
        })
    }

    private func applyOnboardingContext(customParams: [AnyHashable: Any]?, channelCode: String?) {
        // Business logic to route returning user directly to intended content
    }

    func scene(_ scene: UIScene, continue userActivity: NSUserActivity) {
        // Handle Universal Links when app transitions to foreground from background
        OpoInstallSDK.continue(userActivity)
    }

    // MARK: - OpoInstallDelegate Callbacks
    func getWakeUpParams(_ appData: OpoinstallData?) {
        if let data = appData {
            print("One-click launch wakeup params received: channel=\(String(describing: data.channelCode))")
        }
    }
}

ไปป์ไลน์เซสชันการคงอยู่ที่มีคุณสมบัติของ Android และ iOS

การยกเว้นการปลุกระบบเบื้องหลังและการเตรียมพร้อมระบบล่วงหน้าของ OS ออกจากเมตริกการคงอยู่แบบ Active

ระบบปฏิบัติการมักจะเริ่มต้นแอปพลิเคชันในเบื้องหลังเป็นประจำโดยไม่มีผู้ใช้ใช้งาน บน iOS ระบบอาจเตรียมกระบวนการแอปพลิเคชันไว้ล่วงหน้าก่อนเปิดใช้งาน โดยเรียก application(_:didFinishLaunchingWithOptions:) โดยไม่ทริกเกอร์การเปลี่ยนผ่าน scene แบบ active บน Android ตัวรับสัญญาณเบื้องหลังและเธรดตัวทำงานสามารถเริ่มต้นคลาส Application ได้

SDK ของ telemetry จะบังคับใช้ตัวกรองที่เข้มงวดเพื่อให้แน่ใจว่าการดำเนินการในเบื้องหลังเหล่านี้ไม่ทำให้เมตริกการคงอยู่เสียหาย:

  • เกตสถานะอินเทอร์แอกทีฟ (Interactive State Gates): การเริ่มต้นกระบวนการหรือการดำเนินการในเบื้องหลังจะต้องไม่ถูกนับเป็นการคงอยู่แบบ active เว้นแต่จะยืนยันสถานะ UI แบบอินเทอร์แอกทีฟได้ (ProcessLifecycleOwner บน Android หรือสถานะแอปพลิเคชันแบบ active บน iOS) และเกณฑ์การมีส่วนร่วมที่ผลิตภัณฑ์กำหนดได้รับการเติมเต็ม
  • การยกเว้นงานในเบื้องหลัง (Background Task Exclusion): การดำเนินการงานในเบื้องหลังที่จัดการผ่าน Android Jetpack WorkManager หรือ Apple BGTaskScheduler จะต้องถูกแท็กอย่างชัดเจนและยกเว้นจากการคำนวณการคงอยู่ของผู้ใช้แบบ active

การเริ่มต้นใช้งานแบบกำหนดพารามิเตอร์ (Parameterized Onboarding) ช่วยปรับปรุงการมีส่วนร่วมแบบ Active ในสัปดาห์แรกอย่างไร

อุปสรรคความฝืดในวันที่ 0: อุปสรรคในการต้อนรับผู้ใช้และการไม่กลับมาในช่วงต้น

ความฝืดในกระบวนการต้อนรับ (Onboarding friction) เป็นตัวการสำคัญประการหนึ่งที่ทำให้ผู้ใช้ไม่กลับมาใช้งานในช่วงแรก โดยเฉพาะอย่างยิ่งเมื่อผู้ใช้ต้องสร้างบริบทการแนะนำหรือปลายทางขึ้นมาใหม่ด้วยตนเองหลังจากการติดตั้ง ในกระบวนการได้มาซึ่งผู้ใช้แบบดั้งเดิม ผู้ใช้ที่คลิกลิงก์โปรโมชัน คำเชิญแนะนำ หรือแคมเปญอินفلูเอนเซอร์จะถูกส่งต่อไปยังแอปสโตร์ เมื่อเปิดแอป พวกเขาจะพบกับขั้นตอนการต้อนรับทั่วไปที่ต้องป้อนรหัสโปรโมชันหรือรหัสทีมด้วยตนเอง

การกำหนดให้ต้องป้อนฟอร์มด้วยตนเองทำให้ผู้ใช้ต้องสลับไปมาระหว่างแอปพลิเคชันเพื่อคัดลอกรหัส ซึ่งเป็นการสร้างความฝืดในขั้นตอน เมื่อกระบวนการต้อนรับไม่สามารถส่งมอบบริบทที่กระตุ้นให้เกิดการดาวน์โหลดได้ทันที อัตราการกลับมาใช้งานในวันที่ 1 ก็อาจลดลงได้

การเย็บติดบริบทแบบไดนามิก (Dynamic Context Stitching): การดึงโทเค็นการแนะนำและบริบทการกำหนดเส้นทาง Deep Link เมื่อเปิดแอป

การเริ่มต้นใช้งานแบบกำหนดพารามิเตอร์ช่วยลดความฝืดในการป้อนข้อมูลด้วยตนเอง โดยการรักษาและกู้คืนบริบทการตลาดผ่านโปรแกรมข้ามอุปสรรคในการติดตั้ง

OpoInstall ซึ่งเป็นแพลตฟอร์มการระบุแหล่งที่มาบนมือถือและ deep linking ทำการติดตั้ง deferred deep linking โดยการจับพารามิเตอร์คิวรี URL (เช่น ?inviter_id=usr_9988&coupon=SAVE20) บนหน้า Landing Page บนเว็บ เมื่อผู้ใช้ติดตั้งและเปิดแอปพลิเคชันเป็นครั้งแรก SDK ของมือถือเนทีฟจะสืบค้นแบ็กเอนด์การระบุแหล่งที่มาเพื่อดึงบริบทที่แคชไว้

วิศวกรสามารถศึกษา เอกสารประกอบการกู้คืนพารามิเตอร์ สำหรับข้อกำหนดทางเทคนิคในการแยกวิเคราะห์พจนานุกรมเพย์لودไดนามิกภายในคอลแบ็กลูปวงจรชีวิตเนทีฟ

สถานะต้อนรับอัตโนมัติ: การมอบประสบการณ์เริ่มต้นส่วนบุคคลผ่าน OpoInstall SDK

การกู้คืนพารามิเตอร์เมื่อเปิดใช้งานครั้งแรกช่วยให้แอปพลิเคชันสามารถทำให้การตั้งค่าบัญชีเป็นแบบอัตโนมัติและแสดงสถานะต้อนรับส่วนบุคคล แทนที่จะแสดงหน้าจอสมัครใช้งานทั่วไป แอปพลิเคชันจะแยกวิเคราะห์เพย์لودที่กู้คืนมาและใช้รหัสแนะนำโดยอัตโนมัติ เข้าร่วมเวิร์กสเปซของทีมที่กำหนด หรือแสดงรายการผลิตภัณฑ์เฉพาะจากการคลิกเว็บเริ่มต้น

แผนภาพด้านล่างแสดงไปป์ไลน์ข้อมูลแบบ end-to-end ตั้งแต่การคลิกลิงก์แนะนำเริ่มต้นไปจนถึงการวัดการคงอยู่ช่วงต้น:

[User Clicks Referral Link] ──> [Web SDK Stages Context & Tokens]
             │                                │
             ▼                                ▼
   [Store Install & Open]   ──> [OpoInstall SDK Retrieves Payload]
             │                                │
             ▼                                ▼
 [Zero-Code Parameter Bind] ──> [Direct Routing to Content/Reward]
             │                                │
             ▼                                ▼
    [Day 0 Core Action]     ──> [Measure D1 & D7 Retention vs Control]

การกู้คืนบริบทก่อนการติดตั้งช่วยลดความฝืดในกระบวนการ ช่วยให้ทีมผลิตภัณฑ์สามารถประเมินว่าการต้อนรับในวันที่ 0 แบบไร้รอยต่อช่วยปรับปรุงอัตราการกลับมาใช้งานแบบ active ในวันที่ 1 และวันที่ 7 เมื่อเทียบกับกลุ่มควบคุมที่ไม่มีความช่วยเหลือหรือไม่

การทดลองการคงอยู่ของบริบทการต้อนรับแบบ deferred สำหรับ D1 และ D7

การประเมินเชิงเปรียบเทียบของวิธีการวัดการคงอยู่ของผู้ใช้ในสัปดาห์แรก

การเปรียบเทียบโมเดลการวัดแบบ Classic N-Day, Rolling และ Bracketed สำหรับการคงอยู่ช่วงต้น

การเลือกโมเดลการคำนวณการคงหน้าที่เหมาะสมขึ้นอยู่กับหมวดหมู่ผลิตภัณฑ์ ความถี่ในการมีส่วนร่วมตามธรรมชาติ และลักษณะวงจรชีวิต สำหรับสูตรทางคณิตศาสตร์โดยละเอียดของเส้นโค้งการคงอยู่แบบ rolling และ bracketed ตลอดช่วงเวลา 30 ถึง 90 วัน โปรดดูเอกสารประกอบการคงอยู่ของวงจรชีวิตโดยเฉพาะ

เมทริกซ์ด้านล่างเปรียบเทียบวิธีการคงอยู่ช่วงต้นหลัก ๆ:

ประเภทเมตริกการคงอยู่ พื้นฐานการคำนวณ กรณีการใช้งานทั่วไป อคติการวินิจฉัยที่มีอยู่
Classic N-Day (D1,D7D_1, D_7) Rt=∣At∣∣U0∣×100%R_t = \frac{\vert A_t \vert}{\vert U_0 \vert} \times 100\% เครื่องมือความถี่สูง, แอปโซเชียล, เกมมือถือ ลงโทษผู้ใช้ที่มีจังหวะการใช้งานที่ไม่สม่ำเสมอ 2–3 วัน
Rolling / Unbounded (D7+D_7+) กลับมาในหรือหลังวันที่ 7 อีคอมเมิร์ซ, การจองการเดินทาง, ยูทิลิตี้แบบเป็นตอน ๆ เติมข้อมูลย้อนหลังเมื่อผู้ใช้กลับมาในสัปดาห์ถัด ๆ ไป
Bracketed Window (D1−7D_{1-7}) กลับมาอย่างน้อยหนึ่งครั้งในวันที่ 1–7 B2B SaaS, ชุดโปรแกรมเพิ่มผลผลิต, เครื่องมือทางการเงิน ปกปิดการไม่ใช้งานหลายวันที่เกิดขึ้นภายในช่วง 7 วัน

ทริกเกอร์การมีส่วนร่วมซ้ำในแอปมีประสิทธิภาพสำหรับการคงอยู่ช่วงต้นเมื่อใด

การเลือกจังหวะเวลาในการกระตุ้นการมีส่วนร่วมซ้ำจากจังหวะของผลิตภัณฑ์และสถานะผู้ใช้

กลไกการกระตุ้นการมีส่วนร่วมซ้ำอัตโนมัติ เช่น การแจ้งเตือนพุชบริบท, คำแนะนำในแอป และอีเมลธุรกรรม สามารถสนับสนุนการคงอยู่ช่วงต้นเมื่อถูกทริกเกอร์โดยพฤติกรรมผู้ใช้ที่ชัดเจน แทนที่จะเป็นหน้าต่างเวลาตามอำเภอใจ จังหวะเวลาของทริกเกอร์ควรมาจากจังหวะการใช้งานผลิตภัณฑ์ที่คาดหวังและการไม่มีความเคลื่อนไหวที่สังเกตได้ แทนที่จะเป็นตารางเวลาสากลที่ตายตัว

ข้อความกระตุ้นการมีส่วนร่วมซ้ำควรส่งมอบประโยชน์ใช้สอยที่ใช้งานได้ เช่น แจ้งเตือนผู้ใช้เกี่ยวกับข้อความที่ยังไม่ได้อ่าน เน้นย้ำงานตั้งค่าที่ยังไม่เสร็จสิ้น หรือให้คำแนะนำเกี่ยวกับผลิตภัณฑ์ที่เกี่ยวข้อง

Contextual Deep Linking: การกระตุ้นผู้ใช้ที่ไม่ได้ใช้งานให้กลับมาด้วยการกำหนดเส้นทางไปยังเวิร์กฟิลด์ที่ยังไม่เสร็จสิ้นโดยตรง

การแจ้งเตือนกระตุ้นการมีส่วนร่วมซ้ำทั่วไปที่นำผู้ใช้ไปยังหน้าจอหลักเริ่มต้นจะสร้างความฝืดในการนำทาง การกระตุ้นการมีส่วนร่วมซ้ำที่มีประสิทธิภาพใช้ deep link แบบบริบท (Universal Links บน iOS, App Links บน Android) ที่นำผู้ใช้ที่กลับมาไปยังอินเทอร์เฟซเฉพาะที่สามารถตระหนักถึงมูลค่าได้ทันที

ตัวอย่างเช่น หากผู้ใช้สร้างบัญชีในวันที่ 0 แต่ไม่ได้ตั้งค่าโปรเจกต์ให้เสร็จสมบูรณ์ การแจ้งเตือนกระตุ้นการมีส่วนร่วมซ้ำควรทำ deep link ไปยังหน้าจอกำหนดค่าโปรเจกต์โดยตรงด้วยพารามิเตอร์ที่กรอกไว้ล่วงหน้า

ขอบเขตความยินยอมและการอนุญาต: การปฏิบัติตามการให้สิทธิ์การแจ้งเตือนของระบบและการปฏิเสธ

เวิร์กฟลอว์การกระตุ้นการมีส่วนร่วมซ้ำทั้งหมดต้องปฏิบัติตามกรอบการอนุญาตของระบบปฏิบัติการและกฎหมายการสื่อสารที่เกี่ยวข้องอย่างเคร่งครัด บน iOS แอปพลิเคชันต้องขออนุญาตก่อนนำเสนอการแจ้งเตือน เสียง หรือป้ายกำกับแก่ผู้ใช้ผ่าน UNUserNotificationCenter.current().requestAuthorization(options: [.alert, .badge, .sound]) บน Android 13+ แอปพลิเคชันต้องได้รับสิทธิ์รันไทม์ android.permission.POST_NOTIFICATIONS

นอกจากนี้ ทีมวิศวกรรมต้องรักษาการจัดการสถานะการปฏิเสธอย่างถาวรและการจำกัดความถี่เพื่อป้องกันความล้าจากการแจ้งเตือน การส่งการแจ้งเตือนความถี่สูงที่ไม่มีบริบทโดยปราศจากความยินยอมของผู้ใช้สามารถสร้างความล้าจากการแจ้งเตือนและอาจมีส่วนทำให้เลิกใช้งานหรือปฏิเสธ ข้อกำหนดอาจแตกต่างกันไปตามเขตอำนาจศาลและประเภทข้อความ ควรขอรับการตรวจสอบทางกฎหมายและการปฏิบัติตามข้อกำหนดสำหรับแคมเปญการตลาดเฉพาะ

การแทรกแซงที่เหมาะสมเทียบกับการแทรกแซงที่ไม่เหมาะสมสำหรับการเพิ่มประสิทธิภาพการคงอยู่ในสัปดาห์แรก

  • การแทรกแซงที่เหมาะสม: ข้อความแจ้งเตือนกระตุ้นการมีส่วนร่วมซ้ำที่ถูกทริกเกอร์โดยการกระทำ, การกำหนดเส้นทางต้อนรับส่วนบุคคลผ่านพารามิเตอร์ที่กู้คืน, ความช่วยเหลือในการต้อนรับในแอปแบบไดนามิก และ deep link ที่อุดมไปด้วยบริบท
  • การแทรกแซงที่ไม่เหมาะสม: การส่งข้อความออกอากาศความถี่สูง, คำขออนุญาตก่อนกำหนดที่นำเสนอก่อนแสดงคุณค่า และการบังคับให้ป้อนรหัสยืนยันด้วยตนเองในระหว่างการเปิดใช้งานครั้งแรก

คำถามที่พบบ่อย (FAQ)

เกณฑ์มาตรฐานทั่วไปสำหรับการคงอยู่ของผู้ใช้แอปมือถือในวันที่ 1 และวันที่ 7 คืออะไร?
ไม่มีเกณฑ์มาตรฐานสากลสำหรับการคงอยู่ในวันที่ 1 และวันที่ 7 ชุดข้อมูลอุตสาหกรรมภายนอก (เช่น รายงานข้ามแพลตฟอร์มจากผู้ให้บริการวัดผล) แสดงให้เห็นว่าการคงอยู่เฉลี่ยมีความแตกต่างกันอย่างมากในหมวดหมู่เกม โซเชียล การเงิน และอีคอมเมิร์ซ รวมถึงตามระบบปฏิบัติการและภูมิภาคทางภูมิศาสตร์ เกณฑ์มาตรฐานต้องได้รับการประเมินเทียบกับแนวตั้งเฉพาะของผลิตภัณฑ์และจังหวะการใช้งานตามธรรมชาติเสมอ
ทำไมการคงอยู่ในวันที่ 1 มักจะสูงกว่าการคงอยู่ในวันที่ 7 อย่างมีนัยสำคัญ?
ผลิตภัณฑ์จำนวนมากแสดงการคงอยู่แบบระบุวันเป๊ะ ๆ ที่ต่ำกว่าในไมล์สโตนที่ช้ากว่า แต่ขนาดและสาเหตุจะแตกต่างกันไปตามจังหวะการใช้งาน ส่วนผสมการได้มา ฤดูกาล และการออกแบบผลิตภัณฑ์ การคงอยู่ในวันที่ 1 วัดการสำรวจเริ่มต้นทันทีหลังจากการติดตั้ง ในขณะที่วันที่ 7 สะท้อนถึงประโยชน์ใช้สอยในการใช้งานอย่างต่อเนื่องและการนำผลิตภัณฑ์ไปใช้ตามกาลเวลา
Deferred deep linking ส่งผลกระทบต่อการคงอยู่ของผู้ใช้ในสัปดาห์แรกอย่างไร?
Deferred deep linking รักษาพารามิเตอร์แคมเปญ รหัสผู้เชิญ และเส้นทางปลายทางผ่านขั้นตอนการดาวน์โหลดจากแอปสโตร์ ด้วยการกู้คืนบริบทนี้ในการเปิดใช้งานครั้งแรก แอปพลิเคชันสามารถนำทางผู้ใช้ไปยังเนื้อหาหรือรางวัลที่กระตุ้นให้เกิดการติดตั้งได้โดยตรง ขจัดความฝืดในการต้อนรับ และช่วยให้ทีมเติบโตสามารถทดสอบผลกระทบต่อการคงอยู่ช่วงต้นเทียบกับกลุ่มควบคุมที่ไม่มีความช่วยเหลือได้

สรุปและกรอบการตัดสินใจ

การวัดและปรับปรุงการคงอยู่ของผู้ใช้ในสัปดาห์แรกต้องอาศัยแนวทางแบบรวมที่ผสมผสานสูตรทางคณิตศาสตร์ที่แม่นยำ telemetry ของไคลเอนต์ที่มีความยืดหยุ่น และกระบวนการต้อนรับที่ไร้ความฝืด การประเมินการคงอยู่ตั้งแต่ 1 ถึงวันที่ 7 โดยใช้โมเดลแบบวันเป๊ะ ๆ (exact-day), แบบ rolling หรือแบบ bracketed ช่วยให้ทีมวิศวกรรมและผลิตภัณฑ์สามารถระบุตำแหน่งที่เกิดความเสื่อมถอยของการคงอยู่ช่วงต้นและจัดลำดับความสำคัญของสมมติฐาน เช่น ความฝืดในการต้อนรับหรือประโยชน์ใช้สอยซ้ำที่ไม่เพียงพอ

การเพิ่มประสิทธิภาพสัปดาห์แรกที่สำคัญขึ้นอยู่กับการกำหนดเกณฑ์สถานะ active ที่ชัดเจนและการกำจัดอุปสรรคในขั้นตอน ด้วยการใช้ประโยชน์จากการผสานรวม SDK ที่มีน้ำหนักเบาและการกู้คืนพารามิเตอร์บริบท แพลตฟอร์มอย่าง OpoInstall จึงมอบโครงสร้างพื้นฐานที่จำเป็นในการสนับสนุนการวัดผลและประสบการณ์การเปิดใช้งานครั้งแรกที่มีความฝืดต่ำสำหรับผู้ใช้ใหม่ที่ได้มา

หากต้องการประเมินว่าโครงสร้างพื้นฐานการระบุแหล่งที่มาแบบรวมและการส่งผ่านพารามิเตอร์สามารถสนับสนุนการคงอยู่ของผู้ใช้ในสัปดาห์แรกของแอปพลิเคชันของคุณได้อย่างไร สำรวจ ข้อมูลอ้างอิงการใช้งานการระบุแหล่งที่มาบนมือถือ หรือลงทะเบียนบน คอนโซลนักพัฒนา OpoInstall

วัสดุที่เกี่ยวข้อง

Share this article

Keep Discovering

วิธีติดตามผลตอบแทนโฆษณาออฟไลน์สิ่งพิมพ์โดยใช้คิวอาร์โค้ดแบบกำหนดเองสำหรับธุรกิจ

วิธีติดตามผลตอบแทนโฆษณาออฟไลน์สิ่งพิมพ์โดยใช้คิวอาร์โค้ดแบบกำหนดเองสำหรับธุรกิจ

เรียนรู้วิธีใช้คิวอาร์โค้ดแบบกำหนดเองสำหรับธุรกิจเพื่อติดตามผลตอบแทนโฆษณาออฟไลน์สิ่งพิมพ์ แบ่งกลุ่มสื่อโฆษณาภาคสนาม และคำนวณต้นทุนต่อการติดตั้งที่มีประสิทธิภาพ (eCPI) รวมถึงผลตอบแทนจากการลงทุนในสื่อ (ROAS) ได้อย่างแม่นยำ

Walmart เปิดตัว Agent Gateway? เจาะลึกระบบช้อปปิ้งด้วย AI ทำงานอย่างไร

Walmart เปิดตัว Agent Gateway? เจาะลึกระบบช้อปปิ้งด้วย AI ทำงานอย่างไร

Walmart เปิดตัว Agent Gateway ผ่านโปรโตคอล MCP พร้อมฟีเจอร์ Agent Profiles, ระบบควบคุมการใช้จ่าย และ API ค้าปลีกอัตโนมัติที่ช่วยยกระดับวงการคอมเมิร์ซ AI

Amap แสดงตัวอย่างการนำทางแบบแบ่งหน้าจอสำหรับ iPhone Duo? ทำงานอย่างไร

Amap แสดงตัวอย่างการนำทางแบบแบ่งหน้าจอสำหรับ iPhone Duo? ทำงานอย่างไร

Amap แสดงตัวอย่างการนำทางแบบมุมมองคู่และแบ่งหน้าจอสำหรับ iPhone Duo ค้นหาว่าเลย์เอาต์แผนที่แบบพับได้และการส่งผ่านตำแหน่งข้ามแอปทำงานอย่างไร