การตรวจสอบสิทธิ์สำหรับ GDK Glassware

หาก Glassware GDK ของคุณต้องตรวจสอบสิทธิ์ผู้ใช้กับเว็บเซอร์วิส GDK จะมี API ที่ให้ผู้ใช้ป้อนข้อมูลเข้าสู่ระบบเมื่อติดตั้ง Glassware

การใช้ API นี้จะช่วยให้ผู้ใช้ Glass ได้รับประสบการณ์การใช้งานที่สอดคล้องกัน และหลีกเลี่ยงค่าใช้จ่ายเพิ่มเติมในการใช้รูปแบบการตรวจสอบสิทธิ์ที่กำหนดเอง

การสร้างบัญชีบริการ Google API

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

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

วิธีสร้างบัญชีนี้

  1. ไปที่ Google Developers Console
  2. คลิกปุ่มสร้างโปรเจ็กต์ แล้วป้อนข้อมูลที่ระบบขอ
  3. เมื่อสร้างโปรเจ็กต์แล้ว ให้จดหมายเลขโปรเจ็กต์ ซึ่งคุณจะต้องใช้ในภายหลัง
  4. ในส่วน API และการตรวจสอบสิทธิ์ ให้คลิก API และเปิดใช้ Google Mirror API สำหรับโปรเจ็กต์ใหม่
  5. ในส่วน API และการตรวจสอบสิทธิ์ ให้คลิกข้อมูลเข้าสู่ระบบ แล้วคลิกสร้างรหัสไคลเอ็นต์ใหม่ เลือกช่องที่มีป้ายกำกับว่าบัญชีบริการเพื่อสร้างรหัสไคลเอ็นต์ OAuth 2.0 ใหม่สำหรับโปรเจ็กต์
  6. หน้าต่างป๊อปอัปจะแจ้งให้ทราบว่าระบบกําลังดาวน์โหลดคีย์ส่วนตัวลงในคอมพิวเตอร์และแสดงรหัสผ่านสําหรับคีย์ส่วนตัวนั้น เมื่อคุณปิดหน้าต่างนี้ คุณจะไม่สามารถดาวน์โหลดคีย์ส่วนตัวหรือดูรหัสผ่านได้อีก หากมีการสูญหาย คุณต้องสร้างใหม่
  7. จดบันทึกอีเมลของบัญชีบริการไว้ ซึ่งคุณจะต้องใช้ภายหลังในการเรียก API

การให้ข้อมูลเมตาเกี่ยวกับ Glassware ของคุณ

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

  • URL การตรวจสอบสิทธิ์ ซึ่งระบบจะเปลี่ยนเส้นทางผู้ใช้ไปถึงเมื่อเปิด Glassware ใน MyGlass
  • ประเภทบัญชี (สตริงที่คุณจะใช้เมื่อเรียกใช้ Android AccountManager API ในอุปกรณ์ Glass)
  • ชื่อแพ็กเกจของแอปพลิเคชันจาก AndroidManifest.xml
  • ตัวเลขรหัสโปรเจ็กต์ Google API ของโปรเจ็กต์ที่คุณสร้างด้านบน
  • APK ที่จะอัปโหลดบน MyGlass สำหรับการทดสอบ คุณเพียงต้องระบุ APK นี้เพียงครั้งเดียวเพื่อจัดการการดาวน์โหลดครั้งแรกเมื่อเปิด Glassware จาก MyGlass หลังจากนั้น คุณจะแก้ไขและแก้ไขข้อบกพร่องได้แบบภายในโดยการเขียนทับ APK ในอุปกรณ์ โปรดทราบว่า APK นี้จะต้องเป็นไปตาม เกณฑ์ต่อไปนี้
    • โดยต้องจัดแนวตามการบีบอัด
    • คุณต้องไม่เปลี่ยนแปลงชื่อแพ็กเกจหรือคีย์การรับรองแบบส่วนตัวหลังจากนี้ (เครื่องมือจัดการแพ็กเกจ Android ไม่อนุญาตให้อัปเกรดหากมีการเปลี่ยนแปลงอย่างใดอย่างหนึ่งเหล่านี้)
    • โดยไฟล์ต้องมีขนาดไม่เกิน 50 เมกะไบต์
    • โดยต้องคอมไพล์โดยใช้ GDK เวอร์ชันล่าสุด

การใช้ขั้นตอนการตรวจสอบสิทธิ์

แผนภาพต่อไปนี้แสดงขั้นตอนการตรวจสอบสิทธิ์ขั้นพื้นฐานสำหรับ GDK Glassware

วิธีใช้ขั้นตอนการตรวจสอบสิทธิ์

  1. เมื่อผู้ใช้เปิด Glassware ของคุณใน MyGlass ระบบจะเปลี่ยนเส้นทางผู้ใช้ไปยัง URL การตรวจสอบสิทธิ์ คำขอเหล่านี้มีพารามิเตอร์การค้นหาชื่อ userToken ที่คุณต้องใช้ในภายหลัง

  2. ผู้ใช้ป้อนข้อมูลเข้าสู่ระบบในหน้าการตรวจสอบสิทธิ์

  3. เซิร์ฟเวอร์จะตรวจสอบข้อมูลเข้าสู่ระบบของผู้ใช้ หากข้อมูลเข้าสู่ระบบถูกต้อง ให้เรียก Mirror API ไปยังเมธอด mirror.accounts.insert วิธีนี้กำหนดให้คุณระบุhttps://www.googleapis.com/auth/glass.thirdpartyauthขอบเขตเมื่อสร้างออบเจ็กต์บริการมิเรอร์ ตัวอย่างการเรียก API นี้โดยใช้ HTTP หรือ Java แบบ Raw แสดงอยู่ในตัวอย่างการสร้างบัญชี

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

    ชื่อพร็อพเพอร์ตี้ ค่า คำอธิบาย
    features[] รายการสตริง รายการฟีเจอร์ (ดู AccountManager.hasFeatures)
    password สตริง รหัสผ่านของบัญชี (ดู AccountManager.getPassword) เราขอแนะนำให้ไม่จัดเก็บรหัสผ่านจริงของผู้ใช้ในช่องนี้ แต่ให้ใช้เพื่อจัดเก็บข้อมูลส่วนตัวที่มีอายุการใช้งานยาวนาน เช่น โทเค็นรีเฟรช
    userData[] รายการออบเจ็กต์ คู่ข้อมูลผู้ใช้อย่างน้อย 1 คู่ที่เชื่อมโยงกับบัญชี (ดู AccountManager.getUserData)
    userData[].key สตริง คีย์ที่เชื่อมโยงกับคู่คีย์-ค่าข้อมูลผู้ใช้ที่เฉพาะเจาะจง
    userData[].value สตริง ค่าที่เชื่อมโยงกับคู่คีย์-ค่าข้อมูลผู้ใช้ที่เฉพาะเจาะจง
    authTokens[] รายการออบเจ็กต์ โทเค็นการตรวจสอบสิทธิ์อย่างน้อย 1 รายการที่เชื่อมโยงกับบัญชี (ดู AccountManager.getAuthToken)
    authTokens[].type สตริง ประเภทของโทเค็นการตรวจสอบสิทธิ์
    authTokens[].authToken สตริง โทเค็นการตรวจสอบสิทธิ์
  4. เมื่อได้รับคําขอ mirror.account.insert Mirror API จะพุชบัญชีไปยังอุปกรณ์ Glass ของผู้ใช้ ซึ่งตอนนี้คุณเข้าถึงบัญชีได้โดยใช้คลาส AccountManager

ทำตามหลักเกณฑ์ต่อไปนี้เพื่อใช้ขั้นตอนการตรวจสอบสิทธิ์ที่ใช้งานง่าย

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

ใช้ขั้นตอนการตรวจสอบสิทธิ์อย่างใดอย่างหนึ่งต่อไปนี้เพื่อรักษาความสอดคล้องในการตรวจสอบสิทธิ์ Glassware

มิเรอร์หรือไฮบริดที่ไม่มีบัญชี

  1. หลังจากเปิดใช้งานใน MyGlass URL การตรวจสอบสิทธิ์จะเปิดขึ้นในป๊อปอัป
  2. ซึ่งจะส่งผู้ใช้ไปยังขอบเขตเพื่อยอมรับโดยตรง
  3. หลังจากผู้ใช้ยอมรับหรือยกเลิกขอบเขตแล้ว ให้ปิดป๊อปอัป

มิเรอร์ด้วยบัญชี

  1. หลังจากเปิดใน MyGlass แล้ว URL การตรวจสอบสิทธิ์จะเปิดขึ้นในป๊อปอัป
    • หากผู้ใช้ลงชื่อเข้าใช้บริการของคุณอยู่แล้ว ให้ส่งผู้ใช้ไปยังขอบเขตโดยตรง
    • หากผู้ใช้ไม่ได้ลงชื่อเข้าใช้ ให้แสดงช่องลงชื่อเข้าใช้ อนุญาตให้ผู้ใช้ลงชื่อเข้าใช้บริการ แล้วส่งผู้ใช้ไปยังขอบเขต
    • หากผู้ใช้ไม่มีบัญชี ให้ระบุลิงก์สำหรับสร้างบัญชี ผู้ใช้ต้องมีวิธีสร้างบัญชีเป็นส่วนหนึ่งของขั้นตอนการติดตั้ง
  2. ผู้ใช้ยอมรับขอบเขต
    • หาก Glassware มีการตั้งค่าที่กำหนดค่าได้ ให้ส่งผู้ใช้ไปยังหน้าการตั้งค่าโดยเลือกค่าเริ่มต้นที่เหมาะสม
    • หาก Glassware ไม่มีการตั้งค่าที่กำหนดค่าได้ ให้ส่งผู้ใช้ไปยังหน้ายืนยัน ปิดป๊อปอัปหากไม่จําเป็นต้องกําหนดค่าเพิ่มเติม

แบบผสมกับบัญชี

  1. หลังจากเปิดใช้งานใน MyGlass URL การตรวจสอบสิทธิ์จะเปิดขึ้นในป๊อปอัป
    • หากผู้ใช้ลงชื่อเข้าใช้บริการอยู่แล้ว ให้ส่งผู้ใช้ไปยังขอบเขตโดยตรง
    • หากผู้ใช้ไม่ได้ลงชื่อเข้าใช้ ให้แสดงช่องการลงชื่อเข้าใช้ อนุญาตให้ผู้ใช้ลงชื่อเข้าใช้ แล้วส่งไปยังขอบเขต
    • หากผู้ใช้ไม่มีบัญชี ให้ระบุลิงก์สำหรับสร้างบัญชี
  2. ผู้ใช้ยอมรับขอบเขต
  3. ส่งคําขอไปยัง Mirror API เพื่อแทรกบัญชี GDK
    • ส่งผู้ใช้ไปยังหน้าการตั้งค่าโดยเลือกค่าเริ่มต้นที่สมเหตุสมผล
    • ส่งหน้าการยืนยันให้ผู้ใช้ ปิดป๊อปอัปหากไม่จําเป็นต้องกําหนดค่าเพิ่มเติม

มิเรอร์หรือแบบผสมกับบัญชีและขอบเขตที่กําหนดเอง

  1. หลังจากเปิดใน MyGlass แล้ว URL การตรวจสอบสิทธิ์จะเปิดขึ้นในป๊อปอัป
    • หากผู้ใช้ลงชื่อเข้าใช้บริการของคุณอยู่แล้ว ให้ส่งผู้ใช้ไปยังขอบเขตภายใน
    • หากผู้ใช้ไม่ได้ลงชื่อเข้าใช้ ให้แสดงช่องลงชื่อเข้าใช้ อนุญาตให้ผู้ใช้ลงชื่อเข้าใช้ แล้วส่งผู้ใช้ไปยังขอบเขตภายใน
    • หากผู้ใช้ไม่มีบัญชี ให้ระบุลิงก์สำหรับสร้างบัญชี
  2. เมื่อผู้ใช้ยอมรับขอบเขตที่กำหนดเอง ให้ส่งผู้ใช้ไปยังขอบเขตของ Google
  3. ส่งคําขอไปยัง Mirror API เพื่อแทรกบัญชี GDK
    • ส่งผู้ใช้ไปยังหน้าการตั้งค่าโดยเลือกค่าเริ่มต้นที่สมเหตุสมผล
    • ส่งหน้าการยืนยันให้ผู้ใช้ ปิดป๊อปอัปหากไม่จําเป็นต้องกําหนดค่าเพิ่มเติม

มิเรอร์หรือใช้โหมดผสมกับแอป Android/iPhone

  1. หลังจากเปิดใน MyGlass แล้ว URL การตรวจสอบสิทธิ์จะเปิดขึ้นในป๊อปอัป
  2. ซึ่งจะส่งผู้ใช้ไปยังขอบเขตเพื่อยอมรับโดยตรง
  3. หลังจากผู้ใช้ยอมรับขอบเขตแล้ว ระบบจะดำเนินการดังนี้
    • หากผู้ใช้มีแอปที่ใช้ร่วมกันและได้รับการตรวจสอบสิทธิ์แล้ว ให้ปิดหน้าต่างป๊อปอัป
    • ไม่เช่นนั้น ให้ส่งผู้ใช้ไปยังโฆษณาคั่นระหว่างหน้าที่นำผู้ใช้ไปยังแอปจาก Google Play Store หรือ iOS Store
  4. หลังจากติดตั้งแอปและตรวจสอบสิทธิ์แล้ว ให้ปิดหน้าต่างป๊อปอัป

GDK และไม่มีบัญชี

การเปิด Glassware ใน MyGlass เป็นสิ่งที่ต้องทำในขั้นตอนนี้

GDK ที่มีบัญชี

  1. หลังจากเปิดใช้งานใน MyGlass URL การตรวจสอบสิทธิ์จะเปิดขึ้นในป๊อปอัป
    • หากผู้ใช้ลงชื่อเข้าใช้บริการของคุณอยู่แล้ว ให้ส่งผู้ใช้ไปยังหน้าจอยืนยัน
    • หากผู้ใช้ไม่ได้ลงชื่อเข้าใช้ ให้แสดงช่องลงชื่อเข้าใช้ อนุญาตให้ผู้ใช้ลงชื่อเข้าใช้ แล้วส่งผู้ใช้ไปยังหน้าจอยืนยัน
    • หากผู้ใช้ไม่มีบัญชี ให้ระบุลิงก์สำหรับสร้างบัญชี
  2. ผู้ใช้ยอมรับขอบเขต
  3. ส่งคําขอไปยัง Mirror API เพื่อแทรกบัญชี GDK
  4. แสดงหน้าจอยืนยันและปิดหน้าจอหลังจากแสดงเป็นระยะเวลาสั้นๆ

ตัวอย่างการสร้างบัญชี

ใช้ไลบรารีของไคลเอ็นต์สำหรับ Mirror API เมื่อเป็นไปได้ ซึ่งจะทำให้การโทรหา mirror.accounts.insert สร้างบัญชีง่ายขึ้น

ตัวอย่าง HTTP ดิบ

ตัวอย่างด้านล่างแสดงเฉพาะ URL ของคำขอและตัวอย่างส่วนเนื้อหาของ JSON ที่คาดไว้ การส่งคําขอ HTTP ดิบในนามของบัญชีบริการมีความซับซ้อนกว่ามาก (ดูรายละเอียดทั้งหมดที่การใช้ OAuth 2.0 สําหรับแอปพลิเคชันเซิร์ฟเวอร์ต่อเซิร์ฟเวอร์) เราจึงขอแนะนําให้ใช้ไลบรารีไคลเอ็นต์ Google API ของเราหากทําได้ เพื่อให้การดำเนินการนี้ง่ายขึ้น

เมธอดคำขอและ URL

POST https://www.googleapis.com/mirror/v1/accounts/{userToken}/com.example.myapp/username%40email.com

เนื้อหาของคำขอ

{
    "features": ["a", "b", "c"],
    "userData": [
        { "key": "realName", "value": "Rusty Shackleford" },
        { "key": "foo", "value": "bar" }
    ],
    "authTokens": [
        { "type": "your_token_type", "authToken": "zT419Ma3X2pBr0L..." }
    ]
}

แทนที่ {userToken} ใน URL คำขอด้วยโทเค็นที่ส่งไปยัง URL การตรวจสอบสิทธิ์ในขั้นตอนที่ 1 ของการใช้ขั้นตอนการตรวจสอบสิทธิ์

ตัวอย่าง Java

ตัวอย่างนี้แสดงวิธีใช้ไลบรารีของไคลเอ็นต์ Java เพื่อเรียกใช้ mirror.accounts.insert

import com.google.api.client.googleapis.auth.oauth2.GoogleCredential;
import com.google.api.client.http.HttpTransport;
import com.google.api.client.http.javanet.NetHttpTransport;
import com.google.api.client.json.JsonFactory;
import com.google.api.client.json.jackson.JacksonFactory;
import com.google.api.services.mirror.Mirror;
import com.google.api.services.mirror.model.Account;
import com.google.api.services.mirror.model.AuthToken;
import com.google.common.collect.Lists;
...

/** Email of the Service Account */
private static final String SERVICE_ACCOUNT_EMAIL =
    "<some-id>@developer.gserviceaccount.com";

/** Path to the Service Account's Private Key file */
private static final String SERVICE_ACCOUNT_PKCS12_FILE_PATH =
    "/path/to/<public_key_fingerprint>-privatekey.p12";

/** The account type, usually based on your company or app's package. */
private static final String ACCOUNT_TYPE = "com.example.myapp";

/** The Mirror API scopes needed to access the API. */
private static final String MIRROR_ACCOUNT_SCOPES =
    "https://www.googleapis.com/auth/glass.thirdpartyauth";

/**
 * Build and returns a Mirror service object authorized with the service accounts.
 *
 * @return Mirror service object that is ready to make requests.
 */
public static Mirror getMirrorService() throws GeneralSecurityException,
    IOException, URISyntaxException {
  HttpTransport httpTransport = new NetHttpTransport();
  JacksonFactory jsonFactory = new JacksonFactory();
  GoogleCredential credential = new GoogleCredential.Builder()
      .setTransport(httpTransport)
      .setJsonFactory(jsonFactory)
      .setServiceAccountId(SERVICE_ACCOUNT_EMAIL)
      .setServiceAccountScopes(MIRROR_ACCOUNT_SCOPES)
      .setServiceAccountPrivateKeyFromP12File(
          new java.io.File(SERVICE_ACCOUNT_PKCS12_FILE_PATH))
      .build();
  Mirror service = new Mirror.Builder(httpTransport, jsonFactory, null)
      .setHttpRequestInitializer(credential).build();
  return service;
}

/**
 * Creates an account and causes it to be synced up with the user's Glass.
 * This example only supports one auth token; modify it if you need to add
 * more than one, or to add features, user data, or the password field.
 *
 * @param mirror the service returned by getMirrorService()
 * @param userToken the user token sent to your auth callback URL
 * @param accountName the account name for this particular user
 * @param authTokenType the type of the auth token (chosen by you)
 * @param authToken the auth token
 */
public static void createAccount(Mirror mirror, String userToken, String accountName,
    String authTokenType, String authToken) {
  try {
    Account account = new Account();
    List<AuthToken> authTokens = Lists.newArrayList(
        new AuthToken().setType(authTokenType).setAuthToken(authToken));
    account.setAuthTokens(authTokens);
    mirror.accounts().insert(
        userToken, ACCOUNT_TYPE, accountName, account).execute();
  } catch (IOException e) {
    e.printStackTrace();
  }
}

การเรียกข้อมูลบัญชีใน Glass

การเรียกข้อมูลและใช้วัตถุ Account ใน Glass จะคล้ายกับการใช้ Android มาตรฐาน AccountManager

  1. ประกาศสิทธิ์ต่อไปนี้ในไฟล์ Manifest ของ AndroidManifest.xml

    <uses-permission android:name="android.permission.GET_ACCOUNTS" />
    <uses-permission android:name="android.permission.USE_CREDENTIALS" />
    
  2. เรียกข้อมูลบัญชีของ Glassware

    AccountManager accountManager = AccountManager.get(mContext);
    // Use your Glassware's account type.
    Account[] accounts = accountManager.getAccountsByType("com.example");
    
    // Pick an account from the list of returned accounts.
    
  3. เรียกข้อมูลโทเค็นการตรวจสอบสิทธิ์จาก Account

    // Your auth token type.
    final String AUTH_TOKEN_TYPE = "oauth2:https://www.example.com/auth/login";
    
    accountManager.getAuthToken(account, AUTH_TOKEN_TYPE, null, activity, new AccountManagerCallback<Bundle>() {
        public void run(AccountManagerFuture<Bundle> future) {
            try {
                String token = future.getResult().getString(AccountManager.KEY_AUTHTOKEN);
                // Use the token.
            } catch (Exception e) {
                // Handle exception.
            }
        }
    }, null);