หาก GDK Glassware ต้องการตรวจสอบสิทธิ์ผู้ใช้กับบริการเว็บ GDK มี API ที่อนุญาตให้ผู้ใช้ป้อนข้อมูลเข้าสู่ระบบเมื่อติดตั้ง Glassware
การใช้ API นี้จะช่วยให้ผู้ใช้ได้รับประสบการณ์การใช้งานที่สอดคล้องกันสําหรับผู้ใช้ Glass และหลีกเลี่ยงค่าใช้จ่ายในการดําเนินการรูปแบบการตรวจสอบสิทธิ์ที่กําหนดเองของคุณ
การสร้างบัญชีบริการ Google API
เมื่อตั้งค่าการตรวจสอบสิทธิ์อย่างถูกต้องแล้ว ส่วนหลังของเว็บแอปจะใช้ Mirror API เพื่อพุชข้อมูลบัญชีของผู้ใช้ไปยัง Glass หลังจากที่ผู้ใช้ตรวจสอบสิทธิ์กับบริการของคุณแล้ว
หากต้องการเข้าถึง API นี้ ให้สร้างโปรเจ็กต์ Google API แล้วสร้างรหัสไคลเอ็นต์สําหรับ "บัญชีบริการ" (และไม่ใช่ "เว็บแอปพลิเคชัน") เมื่อใช้บัญชีบริการ ผู้ใช้ไม่จําเป็นต้องให้สิทธิ์แอปพลิเคชันของคุณในการส่งข้อมูลรับรองไปยัง Glass และจะไม่แสดงในทั้งหน้าสิทธิ์ OAuth และหน้าการตรวจสอบสิทธิ์อีกครั้ง
วิธีสร้างบัญชีนี้
- ไปที่ Google Developers Console
- คลิกปุ่มสร้างโปรเจ็กต์แล้วป้อนข้อมูลที่ระบบขอ
- เมื่อสร้างโปรเจ็กต์แล้ว ให้จดหมายเลขโปรเจ็กต์ ซึ่งคุณจะต้องใช้ในภายหลัง
- ในส่วน API และการตรวจสอบสิทธิ์ ให้คลิก API และเปิดใช้ Google Mirror API สําหรับโปรเจ็กต์ใหม่
- ในส่วน API และการตรวจสอบสิทธิ์ ให้คลิกข้อมูลเข้าสู่ระบบ แล้วคลิกสร้างรหัสไคลเอ็นต์ใหม่ เลือกช่อง Service account (บัญชีบริการ) เพื่อสร้างรหัสไคลเอ็นต์ OAuth 2.0 ใหม่สําหรับโปรเจ็กต์
- หน้าต่างป๊อปอัปจะแจ้งว่ากําลังดาวน์โหลดคีย์ส่วนตัวลงในคอมพิวเตอร์ และให้รหัสผ่านสําหรับคีย์ส่วนตัวนั้น เมื่อปิดหน้าต่างนี้แล้ว คุณจะดาวน์โหลดคีย์ส่วนตัวนี้หรือดูรหัสผ่านไม่ได้อีก หากสูญหาย คุณต้องสร้างรายการใหม่
- จดบันทึกอีเมลของบัญชีบริการ ซึ่งคุณจะต้องใช้ในภายหลังเพื่อเรียก 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
วิธีใช้ขั้นตอนการตรวจสอบสิทธิ์
เมื่อผู้ใช้เปิด Glassware ใน MyGlass ระบบจะเปลี่ยนเส้นทางผู้ใช้ไปยัง URL การตรวจสอบสิทธิ์ คําขอเหล่านี้มีพารามิเตอร์การค้นหาชื่อ
userToken
ที่คุณต้องใช้ในภายหลังผู้ใช้ป้อนข้อมูลเข้าสู่ระบบในหน้าการตรวจสอบสิทธิ์
เซิร์ฟเวอร์จะตรวจสอบข้อมูลเข้าสู่ระบบของผู้ใช้ หากข้อมูลเข้าสู่ระบบถูกต้อง โปรดเรียกใช้ 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
สตริง โทเค็นการตรวจสอบสิทธิ์ เมื่อได้รับคําขอ
mirror.account.insert
Mirror API จะพุชบัญชีไปยังอุปกรณ์ Glass ของผู้ใช้ ตอนนี้คุณเข้าถึงได้โดยใช้ชั้นเรียนAccountManager
ขั้นตอนการตรวจสอบสิทธิ์ที่แนะนํา
ปฏิบัติตามหลักเกณฑ์เหล่านี้เพื่อใช้ขั้นตอนการตรวจสอบสิทธิ์ที่ใช้ง่าย
- เพิ่มประสิทธิภาพขั้นตอนสําหรับอุปกรณ์เคลื่อนที่
- หากขั้นตอนมีขอบเขตและผู้ใช้ยกเลิก ให้เห็นข้อความแสดงข้อผิดพลาดที่ออกแบบมาอย่างดี
- ตรวจสอบว่ามีการใช้ขอบเขตที่คุณขอใน Glassware แล้วจริงๆ
- หากเชื่อมต่อบัญชีผู้ใช้ได้ โปรดตรวจสอบว่าคุณเชื่อมต่อแล้ว
- หากเป็นไปได้ ข้อมูลผู้ใช้ควรสํารองไปยังระบบคลาวด์
ใช้ขั้นตอนการตรวจสอบสิทธิ์อย่างใดอย่างหนึ่งต่อไปนี้เพื่อรักษาความสอดคล้องในการตรวจสอบสิทธิ์ Glassware
มิเรอร์หรือแบบผสมโดยไม่มีบัญชี
- หลังจากสลับไปที่ MyGlass แล้ว URL การตรวจสอบสิทธิ์จะเปิดขึ้นในป๊อปอัป
- วิธีนี้จะส่งผู้ใช้ไปยังขอบเขตที่จะยอมรับโดยตรง
- หลังจากผู้ใช้ยอมรับหรือยกเลิกขอบเขตแล้ว ให้ปิดป๊อปอัป
มิเรอร์ด้วยบัญชี
- หลังจากสลับไปที่ MyGlass แล้ว URL การตรวจสอบสิทธิ์จะเปิดขึ้นในป๊อปอัป
- หากผู้ใช้ลงชื่อเข้าใช้บริการของคุณแล้ว ให้ส่งผู้ใช้ไปยังขอบเขตโดยตรง
- หากผู้ใช้ไม่ได้ลงชื่อเข้าใช้ ให้แสดงช่องลงชื่อเข้าใช้ จากนั้นอนุญาตให้ผู้ใช้ลงชื่อเข้าใช้บริการของคุณ แล้วส่งผู้ใช้ไปยังขอบเขต
- หากผู้ใช้ไม่มีบัญชี ให้ระบุลิงก์เพื่อสร้างบัญชี ผู้ใช้ต้องมีวิธีสร้างบัญชีเป็นส่วนหนึ่งของกระบวนการติดตั้ง
- ผู้ใช้ยอมรับขอบเขต
- หาก Glassware มีการตั้งค่าที่กําหนดค่าได้ ให้ส่งผู้ใช้ไปยังหน้าการตั้งค่าที่เลือกไว้โดยค่าเริ่มต้นที่เหมาะสม
- หาก Glassware ไม่มีการตั้งค่าที่กําหนดค่าได้ ให้ส่งผู้ใช้ไปยังหน้ายืนยัน ปิดป๊อปอัปหากไม่จําเป็นต้องกําหนดค่าเพิ่มเติม
การทํางานแบบผสมผสานกับบัญชี
- หลังจากสลับไปที่ MyGlass แล้ว URL การตรวจสอบสิทธิ์จะเปิดขึ้นในป๊อปอัป
- หากผู้ใช้ลงชื่อเข้าใช้บริการของคุณแล้ว ให้ส่งผู้ใช้ไปยังขอบเขตโดยตรง
- หากผู้ใช้ไม่ได้ลงชื่อเข้าใช้ แสดงช่องลงชื่อเข้าใช้ จากนั้นอนุญาตให้ผู้ใช้ลงชื่อเข้าใช้ แล้วส่งผู้ใช้ไปยังขอบเขต
- หากผู้ใช้ไม่มีบัญชี ให้ระบุลิงก์เพื่อสร้างบัญชี
- ผู้ใช้ยอมรับขอบเขต
- ส่งคําขอไปยัง Mirror API เพื่อแทรกบัญชี GDK
- ส่งผู้ใช้ไปยังหน้าการตั้งค่าที่เลือกไว้โดยค่าเริ่มต้นอย่างเหมาะสม
- ส่งหน้ายืนยันให้กับผู้ใช้ ปิดป๊อปอัปหากไม่จําเป็นต้องกําหนดค่าเพิ่มเติม
มิเรอร์หรือแบบผสมกับบัญชีและขอบเขตที่กําหนดเอง
- หลังจากสลับไปที่ MyGlass แล้ว URL การตรวจสอบสิทธิ์จะเปิดขึ้นในป๊อปอัป
- หากผู้ใช้ลงชื่อเข้าใช้บริการของคุณอยู่แล้ว ให้นําผู้ใช้ไปยังขอบเขตภายใน
- หากผู้ใช้ไม่ได้ลงชื่อเข้าใช้ แสดงช่องลงชื่อเข้าใช้ อนุญาตให้ผู้ใช้ลงชื่อเข้าใช้ แล้วส่งไปยังขอบเขตภายใน
- หากผู้ใช้ไม่มีบัญชี ให้ระบุลิงก์เพื่อสร้างบัญชี
- เมื่อผู้ใช้ยอมรับขอบเขตที่กําหนดเอง ให้นําผู้ใช้ไปยังขอบเขตของ Google
- ส่งคําขอไปยัง Mirror API เพื่อแทรกบัญชี GDK
- ส่งผู้ใช้ไปยังหน้าการตั้งค่าที่เลือกไว้โดยค่าเริ่มต้นอย่างเหมาะสม
- ส่งหน้ายืนยันให้กับผู้ใช้ ปิดป๊อปอัปหากไม่จําเป็นต้องกําหนดค่าเพิ่มเติม
มิเรอร์หรือแบบผสมด้วยแอป Android/iPhone
- หลังจากสลับไปที่ MyGlass แล้ว URL การตรวจสอบสิทธิ์จะเปิดขึ้นในป๊อปอัป
- วิธีนี้จะส่งผู้ใช้ไปยังขอบเขตที่จะยอมรับโดยตรง
- หลังจากที่ผู้ใช้ยอมรับขอบเขตแล้ว
- หากผู้ใช้มีแอปที่ใช้ร่วมกันและผ่านการตรวจสอบสิทธิ์แล้ว ให้ปิดหน้าต่างป๊อปอัป
- หากไม่มี โปรดนําผู้ใช้ไปยังโฆษณาคั่นระหว่างหน้าที่ขอให้ผู้ใช้ดาวน์โหลดแอปจาก Google Play Store หรือ iOS Store
- หลังจากติดตั้งแอปและตรวจสอบสิทธิ์แล้ว ให้ปิดหน้าต่างป๊อปอัป
GDK และไม่มีบัญชี
การสลับใช้ Glassware ใน MyGlass จําเป็นสําหรับขั้นตอนนี้
GDK มีบัญชี
- หลังจากสลับไปที่ MyGlass แล้ว URL การตรวจสอบสิทธิ์จะเปิดขึ้นในป๊อปอัป
- หากผู้ใช้ลงชื่อเข้าใช้บริการของคุณอยู่แล้ว ให้ส่งผู้ใช้ไปยังหน้าจอยืนยัน
- หากผู้ใช้ไม่ได้ลงชื่อเข้าใช้ ให้แสดงช่องลงชื่อเข้าใช้ จากนั้นอนุญาตให้ผู้ใช้ลงชื่อเข้าใช้ แล้วส่งหน้าจอยืนยัน
- หากผู้ใช้ไม่มีบัญชี ให้ระบุลิงก์เพื่อสร้างบัญชี
- ผู้ใช้ยอมรับขอบเขต
- ส่งคําขอไปยัง Mirror API เพื่อแทรกบัญชี GDK
- แสดงหน้าจอยืนยันและปิดหน้าจอหลังจากแสดงเป็นระยะเวลาสั้นๆ
ตัวอย่างการสร้างบัญชี
ใช้ไลบรารีของไคลเอ็นต์สําหรับ 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
ประกาศสิทธิ์ Manifest ต่อไปนี้ในไฟล์
AndroidManifest.xml
<uses-permission android:name="android.permission.GET_ACCOUNTS" /> <uses-permission android:name="android.permission.USE_CREDENTIALS" />
เรียกดูบัญชีของ 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.
เรียกโทเค็นการตรวจสอบสิทธิ์จาก
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);