คำแนะนำในการย้ายข้อมูล

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

คู่มือนี้ออกแบบมาเพื่อช่วยให้นักพัฒนาแอปย้ายข้อมูลแอป Fitbit Web API ที่มีอยู่ไปยัง Google Health API ใหม่

ทำไมคุณจึงควรย้ายข้อมูล

ข้อดีของการใช้ Google Health API มีดังนี้

  • ความปลอดภัยที่ดียิ่งขึ้น: การปฏิบัติตามแนวทางปฏิบัติแนะนำด้านความปลอดภัยของ Google การปฏิบัติตามมาตรฐานด้านความปลอดภัย ความเป็นส่วนตัว และข้อมูลประจำตัวของ Google
  • ความสอดคล้อง: ขจัดความไม่สอดคล้องเดิมในรูปแบบข้อมูล เขตเวลา หน่วยวัด และการจัดการข้อผิดพลาด เพื่อให้ประสบการณ์การใช้งานของนักพัฒนาแอปเป็นไปอย่างราบรื่นยิ่งขึ้น
  • ความสามารถในการปรับขนาดและการเตรียมพร้อมสำหรับอนาคต: ออกแบบมาเพื่อปรับขนาดให้ตรงกับความต้องการในอนาคต และรองรับโปรโตคอลที่ทันสมัย เช่น gRPC

การลงทะเบียนแอป

แอป Google Health API ทั้งหมดต้องลงทะเบียนโดยใช้คอนโซล Google Cloud ซึ่งทำหน้าที่เป็นฮับกลาง สำหรับการจัดการแอป Google ทั้งหมด

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

Fitbit Web API Google Health API
ลิงก์สาธารณะ https://dev.fitbit.com/apps https://console.cloud.google.com
การเพิ่มแอปใหม่ กดลงทะเบียนแอปใหม่
  1. สร้างโปรเจ็กต์ Google Cloud
  2. เปิดใช้ Google Health API
ข้อมูลพื้นฐาน ช่องที่ต้องกรอก
  • ชื่อแอปพลิเคชัน
  • คำอธิบาย
  • URL เว็บไซต์ของแอปพลิเคชัน
  • องค์กร
  • URL ของเว็บไซต์ขององค์กร
  • URL ของข้อกำหนดในการให้บริการ
  • URL นโยบายความเป็นส่วนตัว
ช่องที่ต้องกรอก
  • ชื่อแอปพลิเคชัน
  • อีเมลทีมสนับสนุน
  • กลุ่มเป้าหมาย (ภายในหรือภายนอก)
  • อีเมลติดต่อ
  • ไอคอนโลโก้
  • URL เว็บไซต์ของแอปพลิเคชัน
  • URL นโยบายความเป็นส่วนตัว
  • URL ของข้อกำหนดในการให้บริการ
  • โดเมนที่ได้รับอนุญาต
ประเภทแอปพลิเคชัน นักพัฒนาแอปต้องเลือกตัวเลือกต่อไปนี้
  • เซิร์ฟเวอร์
  • ลูกค้า
  • ส่วนบุคคล
  • เว็บแอปพลิเคชัน
  • Android
  • ส่วนขยาย Chrome
  • iOS
  • ทีวี
  • แอปบนเดสก์ท็อป
  • Universal Windows Platform
รหัสลูกค้า ลงทะเบียนเมื่อบันทึกการตั้งค่าแอปพลิเคชัน ลงทะเบียนแยกกัน
ประเภทการเข้าถึง ระบบจะควบคุมสิทธิ์ในการอ่านและเขียนที่ระดับแอป ระบบจะควบคุมสิทธิ์การอ่านและการเขียนที่ระดับขอบเขต
URL เพิ่มเติม
  • URL เปลี่ยนเส้นทาง: เว็บไซต์ที่ระบบเปลี่ยนเส้นทางผู้ใช้ไปหลังจาก ให้สิทธิ์ขอบเขต
  • ต้นทาง JavaScript ที่ได้รับอนุญาต: ต้นทาง HTTP ที่โฮสต์ เว็บแอปพลิเคชัน
  • URL เปลี่ยนเส้นทาง: เว็บไซต์ที่ระบบเปลี่ยนเส้นทางผู้ใช้ไปหลังจาก ให้สิทธิ์ขอบเขต

การติดตั้งใช้งาน OAuth

แอป Google Health API รองรับเฉพาะไลบรารีของไคลเอ็นต์ Google OAuth2 ไลบรารีของไคลเอ็นต์พร้อมใช้งานสำหรับเฟรมเวิร์กยอดนิยม ซึ่งทำให้การใช้ OAuth 2.0 ง่ายขึ้น ความแตกต่างระหว่างไลบรารี Google OAuth2 กับไลบรารี OAuth2 แบบโอเพนซอร์สมีดังนี้

Fitbit Web API Google Health API
รองรับไลบรารี OAuth2 โอเพนซอร์ส ไลบรารีไคลเอ็นต์ OAuth2 ของ Google
ฟังก์ชันการทำงาน ไม่สอดคล้องกันในแพลตฟอร์มต่างๆ สอดคล้องกันในทุกแพลตฟอร์ม
URL การให้สิทธิ์ https://www.fitbit.com/oauth2/authorize https://accounts.google.com/o/oauth2/v2/auth
URL โทเค็น https://api.fitbit.com/oauth2/token https://oauth2.googleapis.com/token
อายุการใช้งานของโทเค็นเพื่อการเข้าถึง 8 ชั่วโมง 1 ชั่วโมง
ขนาดโทเค็นเพื่อการเข้าถึง 1024 ไบต์ 2048 ไบต์
รีเฟรชโทเค็น ระบบจะสร้างโทเค็นการรีเฟรชเมื่อใช้ขั้นตอนการให้สิทธิ์รหัสการให้สิทธิ์ สร้างโทเค็นการรีเฟรชสำหรับผู้ใช้ได้เพียง 1 รายการ โทเค็นจะไม่มีวันหมดอายุและใช้ได้เพียงครั้งเดียว หากต้องการสร้างโทเค็นการรีเฟรช สตริงการให้สิทธิ์ต้องมี พารามิเตอร์การค้นหา "access_type=offline" สร้างโทเค็นการรีเฟรชหลายรายการสำหรับผู้ใช้คนเดียวได้ โทเค็นการรีเฟรชอาจอิงตามเวลา โดยจะหมดอายุหากไม่มีการใช้งานภายใน 6 เดือน ผู้ใช้ให้สิทธิ์เข้าถึงตามเวลา หรือแอปอยู่ในโหมด "การทดสอบ" ดูรายละเอียดเพิ่มเติมได้ที่ การหมดอายุของโทเค็นการรีเฟรช
การตอบกลับของโทเค็น การตอบกลับ JSON มีข้อมูลต่อไปนี้
  • โทเค็นเพื่อการเข้าถึง
  • การหมดอายุของโทเค็นเพื่อการเข้าถึง
  • ขอบเขต
  • ประเภทโทเค็น
  • โทเค็นการรีเฟรช
  • รหัสผู้ใช้
การตอบกลับ JSON มีข้อมูลต่อไปนี้
  • โทเค็นเพื่อการเข้าถึง
  • การหมดอายุของโทเค็นเพื่อการเข้าถึง
  • ขอบเขต
  • ประเภทโทเค็น
  • โทเค็นการรีเฟรช

หากต้องการรับรหัสผู้ใช้ ให้ใช้ปลายทาง users.getIdentity

ผู้ใช้ Fitbit ต้องให้ความยินยอมในการผสานรวมใหม่ของคุณอีกครั้ง เนื่องจากแอปของคุณ ใช้ไลบรารี OAuth ที่แตกต่างกัน คุณไม่สามารถโอนโทเค็นเพื่อการเข้าถึงและโทเค็นการรีเฟรชไปยัง Google Health API และใช้งานได้

ขอบเขต

คุณต้องอัปเดตคำขอการให้สิทธิ์เพื่อใช้ขอบเขต Google Health API ขอบเขตจะกำหนดว่าแอปของคุณรองรับการดำเนินการอ่านหรือเขียนหรือไม่ อย่าใช้ขอบเขตที่ไม่จำเป็นสำหรับแอปของคุณ คุณเพิ่มขอบเขต เพิ่มเติมได้ทุกเมื่อในภายหลังหากการออกแบบแอปมีการเปลี่ยนแปลง

ขอบเขต Google Health API คือ URL ของ HTTP ที่ขึ้นต้นด้วย https://www.googleapis.com/auth/googlehealth.{scope} เช่น https://www.googleapis.com/auth/googlehealth.activity_and_fitness

การแมปขอบเขต

ขอบเขต Fitbit Web API จะแมปกับขอบเขต Google Health API ดังนี้

ตาราง: การแมปขอบเขต Fitbit Web API กับ Google Health API
ขอบเขต Fitbit Web API ขอบเขตของ Google Health API
กิจกรรม .activity_and_fitness
.activity_and_fitness.readonly
cardio_fitness .activity_and_fitness
.activity_and_fitness.readonly
อัตราการเต้นของหัวใจ .health_metrics_and_measurements
.health_metrics_and_measurements.readonly
สถานที่ .location.readonly
โภชนาการ .nutrition
.nutrition.readonly
oxygen_saturation .health_metrics_and_measurements
.health_metrics_and_measurements.readonly
โปรไฟล์ .profile
.profile.readonly
respiratory_rate .health_metrics_and_measurements
.health_metrics_and_measurements.readonly
การตั้งค่า .settings
.settings.readonly
การนอนหลับ .sleep
.sleep.readonly
อุณหภูมิ .health_metrics_and_measurements
.health_metrics_and_measurements.readonly
น้ำหนัก .health_metrics_and_measurements
.health_metrics_and_measurements.readonly

ประเภทข้อมูล

ต่อไปนี้คือรายการประเภทข้อมูลของ Google Health API และวิธีที่ประเภทข้อมูลเหล่านี้เชื่อมโยงกับ Fitbit Web API

ตาราง: การแมปประเภทข้อมูล Fitbit Web API กับ Google Health API
ประเภทข้อมูล Fitbit Web API ประเภทข้อมูล Google Health API
  รหัสปลายทาง
นาทีในโซนแอ็กทีฟ นาทีในโซนแอ็กทีฟ
  active-zone-minutes
มีการเปลี่ยนแปลงระดับกิจกรรมของผู้ใช้ ระดับกิจกรรม
  activity-level
ระดับความสูง ระดับความสูง
  altitude
ไขมันร่างกาย ไขมันในร่างกาย
  body-fat
caloriesOut ในแต่ละโซนอัตราการเต้นของหัวใจ แคลอรี่ในโซนอัตราการเต้นของหัวใจ
  calories-in-heart-rate-zone
สรุป HRV ความผันแปรของอัตราการเต้นของหัวใจรายวัน
  daily-heart-rate-variability
สรุปค่า SpO2 ความอิ่มตัวของออกซิเจนในเลือดรายวัน
  daily-oxygen-saturation
อัตราการเต้นของหัวใจขณะพัก อัตราการเต้นของหัวใจขณะพักประจำวัน
  daily-resting-heart-rate
อุณหภูมิผิวหนัง การหาค่าอุณหภูมิขณะนอนหลับในแต่ละวัน
  daily-sleep-temperature-derivations
ระยะทาง ระยะทาง
  distance
กิจกรรมที่บันทึกไว้ การออกกำลังกาย
  exercise
ชั้น พื้น
  floors
อัตราการเต้นของหัวใจ อัตราการเต้นของหัวใจ
  heart-rate
HRV ระหว่างวัน ความผันแปรของอัตราการเต้นของหัวใจ
  heart-rate-variability
SpO2 ระหว่างวัน ความอิ่มตัวของออกซิเจน
  oxygen-saturation
ค่า VO2 Max เมื่อผู้ใช้วิ่ง ปริมาณการใช้ออกซิเจนสูงสุดขณะวิ่ง
  run-vo2-max
อนุกรมเวลาของกิจกรรม นาทีที่อยู่เฉยๆ ระยะเวลาอยู่กับที่ไม่เคลื่อนไหว
  sedentary-period
การนอนหลับ การนอนหลับ
  sleep
ขั้นตอน ขั้นตอน
  steps
กิจกรรม caloriesOut แคลอรี่ทั้งหมด
  total-calories
ค่าปริมาณการใช้ออกซิเจนสูงสุด VO2 Max
  vo2-max
น้ำหนัก น้ำหนัก
  weight

ปลายทาง

ปลายทาง REST ใช้ไวยากรณ์ที่สอดคล้องกันสำหรับข้อมูลทุกประเภท

  • ปลายทางของบริการ: URL ฐานของ HTTP เปลี่ยนเป็น https://health.googleapis.com
  • ไวยากรณ์ของปลายทาง: Google Health API รองรับปลายทางจํานวนจํากัด ซึ่งประเภทข้อมูลที่รองรับส่วนใหญ่สามารถใช้ได้ ซึ่งจะช่วยให้มีไวยากรณ์ที่สอดคล้องกันสำหรับข้อมูลทุกประเภท และทำให้ใช้งานปลายทางได้ง่ายขึ้น
  • ตัวระบุผู้ใช้: ควรระบุรหัสผู้ใช้หรือฉันใน ไวยากรณ์ของปลายทาง เมื่อใช้ฉัน ระบบจะอนุมาน User-ID จากโทเค็นการเข้าถึง

ตัวอย่าง: นี่คือตัวอย่างของปลายทาง GET Profile ที่เรียกใช้โดยใช้ Google Health API

GET https://health.googleapis.com/v4/users/me/profile

การแมปปลายทาง

ดูรายการประเภทข้อมูลที่มีและเมธอด API ที่รองรับได้ในตารางความพร้อมใช้งานของประเภทข้อมูล

ประเภทปลายทางของ Fitbit Web API Google Health API
GET (Log | Summary | Daily Summary) เมื่อคุณขอข้อมูลวันเดียว เมธอด dailyRollup ที่มี windowSize = 1 วัน
GET (ระหว่างวัน) เมื่อคุณขอข้อมูลแบบละเอียด เมธอด list
GET (อนุกรมเวลา) ตามวันที่หรือช่วงเวลา เมธอด rollUp หรือ dailyRollUp รวมถึงช่วงวันที่
GET (รายการบันทึก) เมธอด list
สร้างและอัปเดตบันทึก เมธอด patch
ลบบันทึก เมธอด batchDelete
GET Profile users.getProfile จะแสดงข้อมูลเฉพาะของผู้ใช้
users.getSettings จะแสดงหน่วยและเขตเวลาของผู้ใช้
อัปเดตโปรไฟล์ users.updateProfile จะแก้ไขข้อมูลที่เฉพาะเจาะจงของผู้ใช้
users.updateSettings จะแก้ไขหน่วยและเขตเวลาของผู้ใช้
รับรหัสผู้ใช้ users.getIdentity จะแสดงรหัสผู้ใช้ Fitbit รุ่นเดิมและรหัสผู้ใช้ Google ของผู้ใช้

ย้ายข้อมูลผู้ใช้

การย้ายข้อมูลจาก Fitbit Web API ไปยัง Google Health API เป็นมากกว่าการอัปเดตทางเทคนิค ผู้ใช้ต้องให้ความยินยอมอีกครั้งสำหรับการผสานรวมใหม่เนื่องจาก มีการเปลี่ยนแปลงไลบรารี OAuth คุณไม่สามารถโอนโทเค็นเพื่อการเข้าถึงและโทเค็นการรีเฟรช ไปยัง Google Health API และใช้งานได้ เรามีคำแนะนำด้านเทคนิคและเชิงกลยุทธ์บางอย่างที่จะช่วยให้การย้ายข้อมูลประสบความสำเร็จ เพื่อช่วยรักษาผู้ใช้ไว้ในระหว่างการย้ายข้อมูล

กลยุทธ์ห้องสมุดคู่

เนื่องจาก Fitbit Web API และ Google Health API ใช้ไลบรารี OAuth2 ที่แตกต่างกัน คุณจึงต้องจัดการช่วง "การเชื่อมต่อ" ที่ทั้ง 2 ไลบรารีมีอยู่ในโค้ดเบส

การจัดการการให้สิทธิ์แบบคู่ขนาน

  • ห่อหุ้มไคลเอ็นต์: สร้างเลเยอร์หรืออินเทอร์เฟซการแยกส่วนสำหรับ "บริการด้านสุขภาพ" ซึ่งจะช่วยให้ส่วนอื่นๆ ของแอปขอข้อมูลได้ โดยไม่ต้องทราบว่าไลบรารีใด (Fitbit OAuth หรือ Google OAuth) ที่ ใช้งานอยู่สำหรับผู้ใช้รายนั้น
  • การอัปเดตสคีมาฐานข้อมูล: อัปเดตตารางผู้ใช้ให้มีแฟล็ก oauth_type เช่น ใช้ fitbit สำหรับ Fitbit OAuth และ google สำหรับ Google OAuth
    • ผู้ใช้ใหม่: ใช้ Google Health API และไลบรารี Google OAuth เป็นค่าเริ่มต้น ตั้งค่า oauth_type เป็น google
    • ผู้ใช้เดิม: ใช้ Fitbit Web API ต่อไปจนกว่าผู้ใช้จะทำตาม ขั้นตอนการขอความยินยอมอีกครั้งเสร็จสมบูรณ์ ตั้งค่า oauth_type เป็น fitbit

ขั้นตอนการขอความยินยอมอีกครั้งแบบ "Step-Up"

แทนที่จะบังคับให้ออกจากระบบ ให้ใช้แนวทางการให้สิทธิ์แบบค่อยเป็นค่อยไป

  1. ตรวจหาโทเค็นโอเพนซอร์สของ Fitbit: เมื่อผู้ใช้ Fitbit Web API เปิดแอป ให้ทริกเกอร์การแจ้งเตือน "การอัปเดตบริการ"
  2. เปิดใช้ขั้นตอนของ Google OAuth: เมื่อผู้ใช้คลิก "อัปเดต" ให้เริ่มขั้นตอนของไลบรารี Google OAuth2
  3. แทนที่และเพิกถอน: เมื่อได้รับโทเค็น Google OAuth เรียบร้อยแล้ว ให้บันทึกลงในโปรไฟล์ผู้ใช้ อัปเดต oauth_type จาก fitbit เป็น google และ (หากเป็นไปได้) เพิกถอนโทเค็น fitbit เก่าโดยอัตโนมัติเพื่อรักษาโปรไฟล์ความปลอดภัยของผู้ใช้ให้สะอาด

เพิ่มการคงผู้ใช้ไว้ให้ได้สูงสุด

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

การสื่อสารแบบ "เน้นคุณค่าเป็นอันดับแรก"

อย่าขึ้นต้นด้วย "เราได้อัปเดต API" ระบุข้อดีของระบบใหม่ที่ได้รับการสนับสนุนจาก Google ดังนี้

  • การรักษาความปลอดภัยที่ดียิ่งขึ้น: กล่าวถึงการปกป้องบัญชีและ 2FA ที่เป็นผู้นำในอุตสาหกรรมของ Google
  • ความน่าเชื่อถือ: เวลาในการซิงค์เร็วขึ้นและการเชื่อมต่อข้อมูลที่เสถียรมากขึ้น
  • การจำกัดการเข้าถึงฟีเจอร์: แจ้งให้ผู้ใช้ทราบว่าฟีเจอร์ใหม่และ ประเภทข้อมูลใหม่ต้องมีการอัปเดต

การกำหนดเวลาอัจฉริยะ

  • อย่าขัดจังหวะงานที่มีคุณค่าสูง: อย่าทริกเกอร์หน้าจอขอความยินยอมอีกครั้ง ขณะที่ผู้ใช้กำลังออกกำลังกายหรือบันทึกอาหาร
  • ระยะ "กระตุ้น": ใช้แบนเนอร์ที่ปิดได้ในช่วง 30 วันแรก
  • ระยะ "การหยุดให้บริการอย่างถาวร": บังคับให้ขอความยินยอมอีกครั้งหลังจากได้รับคำเตือนเป็นเวลาหลายสัปดาห์ ซึ่งตรงกับกำหนดเวลาการเลิกใช้งาน Fitbit Web API อย่างเป็นทางการ

การเปรียบเทียบขั้นตอนการย้ายข้อมูล

ความแตกต่างที่ชัดเจนระหว่างโฟลว์เก่าและโฟลว์ใหม่จะช่วยให้ นักพัฒนาแอปเข้าใจว่าตรรกะแยกออกเป็น 2 ทางตรงจุดใด

ฟีเจอร์ Fitbit Web API (เดิม) Google Health API (Google-Identity)
ไลบรารีการตรวจสอบสิทธิ์ โอเพนซอร์สมาตรฐาน Google Identity Services (GIS) / Google Auth
บัญชีผู้ใช้ ข้อมูลเข้าสู่ระบบเดิมของ Fitbit บัญชี Google
ประเภทโทเค็น การเข้าถึง / การรีเฟรชที่เฉพาะเจาะจงของ Fitbit โทเค็นเพื่อการเข้าถึง/โทเค็นการรีเฟรชที่ Google ออกให้
การจัดการขอบเขต สิทธิ์แบบกว้าง สิทธิ์แบบละเอียด / แบบเพิ่ม

จัดการความแตกต่างของการย้ายข้อมูลบัญชี

ตามเอกสารประกอบของ Fitbit ผู้ใช้ที่ย้ายข้อมูลบัญชีไปยัง Google โดยทั่วไปจะไม่สูญเสียการเชื่อมต่อกับบุคคลที่สามในทันที แต่การเปลี่ยนเวอร์ชัน API เป็นข้อกำหนดฝั่งนักพัฒนาแอป

  • ตรวจสอบความถูกต้องของโทเค็น: ใช้ Backgroundworker เพื่อตรวจสอบว่าโทเค็น Fitbit ทำงานล้มเหลวโดยมีข้อผิดพลาด "ไม่ได้รับอนุญาต" หรือไม่ ซึ่งอาจบ่งบอกว่าผู้ใช้ได้ย้ายข้อมูลบัญชีแล้ว แต่แอปของคุณยังไม่ได้อัปเดต
  • การทำงานล้มเหลวอย่างราบรื่น: หากการเรียกใช้ Fitbit OAuth ล้มเหลว ให้เปลี่ยนเส้นทางผู้ใช้ ไปยังหน้า "เชื่อมต่อ Fitbit อีกครั้ง" ที่กำหนดเองซึ่งใช้โฟลว์ Google OAuth ใหม่โดยเฉพาะ

ตัวอย่างโค้ด

หากต้องการย้ายข้อมูลจาก Fitbit Web API เดิมไปยัง Google Health API คุณจะต้องเปลี่ยนจากไลบรารี OAuth2 ทั่วไปเป็นไลบรารีการตรวจสอบสิทธิ์ของ Google ต่อไปนี้คือ คำแนะนำด้านสถาปัตยกรรมและการใช้งานซูโดโค้ดที่เขียนด้วย JavaScript เพื่อจัดการสถานะ "Dual-Library" นี้

1. "การเปลี่ยนมิดเดิลแวร์"

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

การใช้งาน

const { OAuth2Client } = require('google-auth-library');
const FitbitV1Strategy = require('fitbit-oauth2-library').Strategy;

// 1. Initialize the Google Health API Client
const GHAClient = new OAuth2Client(
  process.env.GOOGLE_CLIENT_ID,
  process.env.GOOGLE_CLIENT_SECRET,
  process.env.REDIRECT_URI
);

// 2. Create a Unified Fetcher
async function fetchSteps(user) {
  if (user.apiVersion === 4) {
    // ---- GOOGLE OAUTH LIBRARY LOGIC ----
    GHAClient.setCredentials({ refresh_token: user.refreshToken });
    const url = 'GET https://health.googleapis.com/v4/users/me/dataTypes/steps/dataPoints';
    const res = await GHAClient.request({ url });
    return res.data;
  } else {
    // ---- FITBIT WEB API LEGACY LOGIC ----
    // Use your existing Fitbit open-source library logic here
    return callLegacyV1Api(user.accessToken);
  }
}

2. ย้ายข้อมูลโฟลว์ UX

หากต้องการเพิ่มการรักษาผู้ใช้ ให้ใช้รูปแบบ "ขัดจังหวะและอัปเกรด" ซึ่งจะช่วยให้ผู้ใช้ไม่ต้องบังคับให้เข้าสู่ระบบอีกครั้งจนกว่าจะมีการโต้ตอบกับแอป

ตรรกะการเปลี่ยนเส้นทาง

เมื่อผู้ใช้ Fitbit Web API ใช้ฟีเจอร์ที่เฉพาะเจาะจง ให้ทริกเกอร์การย้ายข้อมูลโดยทำดังนี้

app.get('/dashboard', async (req, res) => {
  const user = await db.users.find(req.user.id);

  if (user.apiVersion === 1) {
    // Render a "soft" migration page explaining the Google transition
    return res.render('migrate-to-google', {
      title: "Keep your data syncing",
      message: "Fitbit is moving to Google accounts. Re-connect now to stay updated."
    });
  }

  const data = await fetchSteps(user);
  res.render('dashboard', { data });
});

3. การเปลี่ยนแปลงทางเทคนิคที่สำคัญ

เมื่อเขียนสคริปต์การย้ายข้อมูล JavaScript โปรดคำนึงถึงความแตกต่างต่อไปนี้

ฟีเจอร์ Fitbit Web API (เดิม) Google Health API (Google-Identity)
ปลายทางของโทเค็น https://api.fitbit.com/oauth2/token https://oauth2.googleapis.com/token
ไลบรารีการตรวจสอบสิทธิ์ โอเพนซอร์สมาตรฐาน Google Auth
ขอบเขต กิจกรรม https://www.googleapis.com/auth/googlehealth.activity_and_fitness
User ID รหัสที่เข้ารหัสของ Fitbit ที่แสดงในการตอบกลับ /oauth2/token รหัสผู้ใช้ที่ส่งคืนจากปลายทาง users.getIdentity

4. รายการตรวจสอบการเก็บรักษา

  • การคงอยู่ของเซสชัน: อย่าล้างเซสชัน Fitbit Web API เก่าของผู้ใช้จนกว่าจะยืนยัน access_token ของ Google Health API ได้สำเร็จและบันทึกลงในฐานข้อมูล
  • การเพิกถอนอัตโนมัติ: เมื่อการย้ายข้อมูล Google Health API เสร็จสมบูรณ์แล้ว ให้ใช้คำขอ POST ไปยังปลายทางการเพิกถอน Fitbit เดิมที่ https://api.fitbit.com/oauth2/revoke ซึ่งจะช่วยให้ผู้ใช้ไม่เห็นสิทธิ์ของแอปที่ "ซ้ำกัน" ในการตั้งค่า Fitbit
  • การจัดการข้อผิดพลาด: หากการเรียก Fitbit แสดงผลเป็น 401 Unauthorized ให้เปลี่ยนเส้นทางไปยังขั้นตอนการให้สิทธิ์ OAuth ของ Google โดยอัตโนมัติแทนที่จะแสดง ข้อความแสดงข้อผิดพลาด