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

หาก GDK Glassware ต้องการตรวจสอบสิทธิ์ผู้ใช้กับบริการเว็บ 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 และการตรวจสอบสิทธิ์ ให้คลิกข้อมูลเข้าสู่ระบบ แล้วคลิกสร้างรหัสไคลเอ็นต์ใหม่ เลือกช่อง Service account (บัญชีบริการ) เพื่อสร้างรหัสไคลเอ็นต์ OAuth 2.0 ใหม่สําหรับโปรเจ็กต์
  6. หน้าต่างป๊อปอัปจะแจ้งว่ากําลังดาวน์โหลดคีย์ส่วนตัวลงในคอมพิวเตอร์ และให้รหัสผ่านสําหรับคีย์ส่วนตัวนั้น เมื่อปิดหน้าต่างนี้แล้ว คุณจะดาวน์โหลดคีย์ส่วนตัวนี้หรือดูรหัสผ่านไม่ได้อีก หากสูญหาย คุณต้องสร้างรายการใหม่
  7. จดบันทึกอีเมลของบัญชีบริการ ซึ่งคุณจะต้องใช้ในภายหลังเพื่อเรียก API

ระบุข้อมูลเมตาเกี่ยวกับ Glassware

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

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

    พารามิเตอร์และคําขอที่คุณระบุด้านล่างเป็นข้อมูลเดียวกันกับที่ให้กับ 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);