GDK Glassware के लिए प्रमाणीकरण

अगर आपके GDK Glassware को किसी वेब सेवा के लिए उपयोगकर्ताओं की पुष्टि करनी है, तो GDK एक एपीआई उपलब्ध कराता है. इसकी मदद से, उपयोगकर्ता आपके Glassware इंस्टॉल करते समय अपने क्रेडेंशियल डाल सकते हैं.

इस एपीआई का इस्तेमाल करके, आप Glass उपयोगकर्ताओं को एक जैसा उपयोगकर्ता अनुभव देते हैं और अपनी पसंद के मुताबिक पुष्टि करने की स्कीम को लागू करने से बच जाते हैं.

Google API सेवा खाता बनाना

जब पुष्टि करने की प्रक्रिया ठीक से सेट अप हो जाती है, तो आपके वेब ऐप्लिकेशन का बैक मिरर एपीआई, आपकी सेवा की पुष्टि करने के बाद उपयोगकर्ताओं के खाते की जानकारी Glass पर भेजने के लिए उनके डुप्लीकेट एपीआई का इस्तेमाल करता है.

इस एपीआई को ऐक्सेस करने के लिए, Google API प्रोजेक्ट बनाएं और "सेवा खाते" के लिए क्लाइंट आईडी बनाएं (और "वेब ऐप्लिकेशन" नहीं बनाएं). सेवा खाते का इस्तेमाल करने पर, उपयोगकर्ताओं को अलग से आपके ऐप्लिकेशन को उनके क्रेडेंशियल ग्लास पर भेजने की अनुमति नहीं देनी होगी और उन्हें OAuth की अनुमतियों का पेज और फिर पुष्टि करने वाला आपका पेज, दोनों ही नहीं दिखेंगे.

यह खाता बनाने के लिए:

  1. Google Developers Console पर जाएं.
  2. प्रोजेक्ट बनाएं बटन पर क्लिक करें और मांगी गई जानकारी डालें.
  3. प्रोजेक्ट बनाने के बाद, प्रोजेक्ट नंबर के बारे में जानकारी दें, बाद में इसकी ज़रूरत पड़ेगी.
  4. एपीआई और अनुमति में जाकर, एपीआई पर क्लिक करें और अपने नए प्रोजेक्ट के लिए Google Mirror एपीआई चालू करें.
  5. एपीआई और पुष्टि में जाकर, क्रेडेंशियल पर क्लिक करें. इसके बाद, नया क्लाइंट आईडी बनाएं पर क्लिक करें. प्रोजेक्ट के लिए नया OAuth 2.0 क्लाइंट आईडी बनाने के लिए, सेवा खाता लेबल वाले बॉक्स को चुनें.
  6. आपको पॉप-अप विंडो से पता चलेगा कि कंप्यूटर पर निजी कुंजी डाउनलोड हो रही है. साथ ही, आपको उस निजी कुंजी का पासवर्ड भी मिल जाएगा. इस विंडो को बंद करने के बाद, न तो इस निजी कुंजी को डाउनलोड किया जा सकेगा और न ही पासवर्ड को फिर से देखा जा सकेगा. अगर वे कभी खो जाते हैं, तो आपको एक नया खाता बनाना होगा.
  7. सेवा खाते के ई-मेल पते को नोट कर लें, जिसकी आपको बाद में API कॉल करने के लिए आवश्यकता होगी.

आपके Glassware के बारे में मेटाडेटा देना

अपना Glassware सबमिट करने के लिए, आपको ये जानकारी देनी होगी. इससे हम आपके Glassware को सेट अप कर पाते हैं. साथ ही, उसे लागू करते समय हम उसकी पुष्टि भी करते हैं.

  • आपका पुष्टि करने वाला यूआरएल, जिस पर उपयोगकर्ताओं को MyGlass में आपके Glassware को चालू करने पर रीडायरेक्ट किया जाता है.
  • खाता टाइप (वह स्ट्रिंग जिसका इस्तेमाल, Glass डिवाइस पर Android AccountManager एपीआई को कॉल करने के लिए किया जाएगा)
  • आपके AndroidManifest.xml से आपके ऐप्लिकेशन का पैकेज नाम
  • उस प्रोजेक्ट का अंक वाला Google API प्रोजेक्ट आईडी जिसे आपने ऊपर बनाया है
  • MyGlass पर अपलोड करने के लिए APK. टेस्टिंग के लिए, आपको MyGlass से अपने Glassware के चालू होने पर शुरुआती डाउनलोड को हैंडल करने के लिए यह APK सिर्फ़ एक बार देना होगा. इसके बाद, अपने डिवाइस पर APK को ओवरराइट करके स्थानीय रूप से उसे डीबग कर सकते हैं. ध्यान दें कि इस APK को ये शर्तें पूरी करनी होंगी:
    • यह ज़िप के साथ मेल खाना चाहिए.
    • इसके बाद आपको पैकेज का नाम या निजी हस्ताक्षर कुंजी में कोई भी बदलाव नहीं करना चाहिए (अगर इनमें से किसी भी बदलाव के लिए Android पैकेज मैनेजर अपग्रेड की अनुमति नहीं देता है).
    • यह 50 मेगाबाइट से छोटा होना चाहिए.
    • इसे GDK के सबसे नए वर्शन का इस्तेमाल करके कंपाइल किया जाना चाहिए.

पुष्टि करने का तरीका लागू करना

इस डायग्राम में, GDK Glassware के लिए पुष्टि करने की बुनियादी प्रक्रिया दिखाई गई है:

पुष्टि करने का तरीका लागू करने के लिए:

  1. जब उपयोगकर्ता MyGlass में आपके Glassware को चालू करते हैं, तो उन्हें आपके प्रमाणीकरण URL पर रीडायरेक्ट किया जाता है. इन अनुरोधों में userToken नाम का एक क्वेरी पैरामीटर शामिल होता है, जिसका आपको बाद में इस्तेमाल करना होगा.

  2. उपयोगकर्ता, पुष्टि करने वाले पेज पर अपने क्रेडेंशियल डालता है.

  3. आपका सर्वर उपयोगकर्ता के क्रेडेंशियल की पुष्टि करता है. अगर क्रेडेंशियल मान्य हैं, तो mirror.accounts.insert तरीके का इस्तेमाल करके, डुप्लीकेट एपीआई कॉल करें. इस तरीके में मिरर सेवा ऑब्जेक्ट बनाते समय, https://www.googleapis.com/auth/glass.thirdpartyauth के दायरे की जानकारी देना ज़रूरी है. रॉ एचटीटीपी या Java की मदद से, इस एपीआई कॉल को करने के उदाहरण खाता बनाने के उदाहरणों में दिखाए गए हैं.

    नीचे दिए गए पैरामीटर और अनुरोध का मुख्य हिस्सा वही जानकारी दिखाता है जो आप Android के AccountManager को देते हैं. यह जानकारी डिवाइस पर बनाते समय ही दी जाती है.

    प्रॉपर्टी का नाम वैल्यू ब्यौरा
    features[] स्ट्रिंग की सूची सुविधाओं की सूची (AccountManager.hasFeatures देखें).
    password स्ट्रिंग खाते का पासवर्ड (AccountManager.getPassword देखें). हमारा सुझाव है कि आप उपयोगकर्ता का वास्तविक पासवर्ड इस फ़ील्ड में सेव करें, बल्कि इसका इस्तेमाल रीफ़्रेश टोकन की तरह लंबे समय तक निजी डेटा स्टोर करने के लिए करें.
    userData[] ऑब्जेक्ट की सूची खाते से जुड़े उपयोगकर्ता के डेटा के एक या उससे ज़्यादा (AccountManager.getUserData देखें).
    userData[].key स्ट्रिंग किसी खास उपयोगकर्ता डेटा के की-वैल्यू पेयर से जुड़ी कुंजी.
    userData[].value स्ट्रिंग किसी खास उपयोगकर्ता डेटा के की-वैल्यू पेयर से जुड़ी वैल्यू.
    authTokens[] ऑब्जेक्ट की सूची खाते से जुड़े एक या उससे ज़्यादा पुष्ट टोकन (AccountManager.getAuthToken देखें).
    authTokens[].type स्ट्रिंग पुष्टि करने वाले टोकन का टाइप.
    authTokens[].authToken स्ट्रिंग पुष्टि करने वाला टोकन.
  4. mirror.account.insert अनुरोध मिलने पर, मिरर एपीआई खाते को उपयोगकर्ता के Glass डिवाइसों पर भेज देता है. अब इस डिवाइस को AccountManager क्लास से ऐक्सेस किया जा सकता है.

उपयोगकर्ता के लिए बने पुष्टि करने के फ़्लो को लागू करने के लिए, इन दिशा-निर्देशों का पालन करें:

  • मोबाइल डिवाइस के लिए अपने फ़्लो को ऑप्टिमाइज़ करें.
  • अगर आपके फ़्लो में कोई दायरा है और उपयोगकर्ता उन्हें रद्द करता है, तो अच्छी तरह से डिज़ाइन किया गया गड़बड़ी का मैसेज दिखाएं.
  • पक्का करें कि आपने जिन दायरों का अनुरोध किया है वे असल में आपके Glassware में इस्तेमाल किए जा रहे हैं.
  • अगर किसी उपयोगकर्ता खाते को कनेक्ट किया जा सकता है, तो पक्का करें कि आपने उसे कनेक्ट किया हो.
  • जहां तक हो सके, उपयोगकर्ता के डेटा का क्लाउड पर बैक अप लेना चाहिए.

Glassware प्रमाणीकरण में समानता बनाए रखने के लिए, निम्न में से किसी एक प्रमाणीकरण फ़्लो का उपयोग करें:

किसी खाते के बिना मिरर या हाइब्रिड

  1. MyGlass में टॉगल करने के बाद, आपका पुष्टि करने वाला यूआरएल पॉप-अप में खुलता है.
  2. यह उपयोगकर्ता को सीधे स्वीकार करने के लिए, दायरे पर भेजता है.
  3. दायरे को स्वीकार या रद्द करने के बाद, पॉप-अप बंद करें.

किसी खाते के साथ मिरर करें

  1. MyGlass में टॉगल करने के बाद, आपका पुष्टि करने वाला यूआरएल पॉप-अप में खुलता है.
    • अगर उपयोगकर्ता ने पहले से ही आपकी सेवा में साइन इन किया हुआ है, तो उपयोगकर्ता को सीधे दायरे में भेजें.
    • अगर उपयोगकर्ता साइन इन नहीं है, तो साइन-इन फ़ील्ड दिखाएं, उन्हें आपकी सेवा में साइन इन करने और फिर उन्हें दायरे में भेजने की अनुमति दें.
    • अगर उपयोगकर्ता के पास कोई खाता नहीं है, तो खाता बनाने के लिए एक लिंक दें. उपयोगकर्ताओं के पास इंस्टॉल फ़्लो की प्रोसेस के तहत खाता बनाने का तरीका होना चाहिए.
  2. उपयोगकर्ता दायरे स्वीकार करता है.
    • अगर आपके Glassware में कॉन्फ़िगर करने लायक सेटिंग हैं, तो उपयोगकर्ता को सही डिफ़ॉल्ट चुने गए सेटिंग पेज पर भेजें.
    • अगर आपके Glassware की कॉन्फ़िगर करने लायक सेटिंग नहीं है, तो उपयोगकर्ता को पुष्टि करने वाले पेज पर भेजें. अगर किसी अतिरिक्त कॉन्फ़िगरेशन की ज़रूरत नहीं है, तो पॉप-अप बंद करें.

खाते के साथ हाइब्रिड व्यू

  1. MyGlass में टॉगल करने के बाद, आपका पुष्टि करने वाला यूआरएल पॉप-अप में खुलता है.
    • अगर उपयोगकर्ता ने पहले से ही आपकी सेवा में साइन इन किया हुआ है, तो उपयोगकर्ता को सीधे दायरे में भेजें.
    • अगर उपयोगकर्ता ने साइन इन नहीं किया हुआ है, तो साइन इन फ़ील्ड दिखाएं, उसे साइन इन करने की अनुमति दें, और फिर उसे दायरे में भेजें.
    • अगर उपयोगकर्ता के पास खाता नहीं है, तो खाता बनाने के लिए लिंक दें.
  2. उपयोगकर्ता दायरे स्वीकार करता है.
  3. GDK खाता सम्मिलित करने के लिए Mirror API को अनुरोध भेजें.
    • उपयोगकर्ता को उचित डिफ़ॉल्ट चयनित सेटिंग पेज पर भेजें.
    • उपयोगकर्ता को पुष्टि करने वाला पेज भेजें. अगर किसी अतिरिक्त कॉन्फ़िगरेशन की ज़रूरत नहीं है, तो पॉप-अप बंद करें.

खाते और कस्टम स्कोप के साथ मिरर या हाइब्रिड

  1. MyGlass में टॉगल करने के बाद, आपका पुष्टि करने वाला यूआरएल पॉप-अप में खुलता है.
    • अगर उपयोगकर्ता ने पहले से ही आपकी सेवा में साइन इन किया हुआ है, तो उपयोगकर्ता को अपने आंतरिक दायरे में भेजें
    • अगर उपयोगकर्ता ने साइन इन नहीं किया हुआ है, तो साइन इन फ़ील्ड दिखाएं, उसे साइन इन करने की अनुमति दें, और फिर उसे अपने अंदरूनी दायरे में भेजें
    • अगर उपयोगकर्ता के पास खाता नहीं है, तो खाता बनाने के लिए लिंक दें.
  2. जब उपयोगकर्ता आपके कस्टम दायरे स्वीकार करता है, तब उपयोगकर्ता को Google के दायरे में भेजें.
  3. GDK खाता सम्मिलित करने के लिए Mirror API को अनुरोध भेजें.
    • उपयोगकर्ता को उचित डिफ़ॉल्ट चयनित सेटिंग पेज पर भेजें.
    • उपयोगकर्ता को पुष्टि करने वाला पेज भेजें. अगर किसी अतिरिक्त कॉन्फ़िगरेशन की ज़रूरत नहीं है, तो पॉप-अप बंद करें.

Android/iPhone ऐप्लिकेशन के साथ मिरर या हाइब्रिड

  1. MyGlass में टॉगल करने के बाद, आपका पुष्टि करने वाला यूआरएल पॉप-अप में खुलता है.
  2. यह उपयोगकर्ता को सीधे स्वीकार करने के लिए, दायरे पर भेजता है.
  3. उपयोगकर्ता के दायरे स्वीकार करने के बाद:
    • अगर उपयोगकर्ता के पास साथी ऐप्लिकेशन है और उसकी पुष्टि की गई है, तो पॉप-अप विंडो बंद करें.
    • अगर नहीं, तो उपयोगकर्ता को अचानक दिखने वाले किसी ऐसे पेज पर भेजें जो उन्हें Google Play Store या iOS स्टोर से ऐप्लिकेशन डाउनलोड करने के लिए भेजता है
  4. ऐप्लिकेशन इंस्टॉल करने और पुष्टि करने के बाद, पॉप-अप विंडो बंद कर दें

GDK और कोई खाता नहीं

इस प्रोसेस के लिए, MyGlass में Glassware को चालू करना ही काफ़ी है.

खाते के साथ GDK

  1. MyGlass में टॉगल करने के बाद, आपका पुष्टि करने वाला यूआरएल पॉप-अप में खुलता है.
    • अगर उपयोगकर्ता ने पहले से आपकी सेवा में साइन इन किया हुआ है, तो उपयोगकर्ता को पुष्टि करने वाली स्क्रीन पर भेजें.
    • अगर उपयोगकर्ता ने साइन इन नहीं किया है, तो साइन इन वाले फ़ील्ड दिखाएं और उसे पुष्टि करने वाली स्क्रीन पर भेजें.
    • अगर उपयोगकर्ता के पास खाता नहीं है, तो खाता बनाने के लिए लिंक दें.
  2. उपयोगकर्ता दायरे स्वीकार करता है.
  3. GDK खाता सम्मिलित करने के लिए Mirror API को अनुरोध भेजें.
  4. पुष्टि करने वाली स्क्रीन दिखाएं और स्क्रीन को कुछ समय के लिए दिखाने के बाद उसे बंद कर दें.

खाता बनाने के उदाहरण

जब भी हो सके, मिरर एपीआई के लिए क्लाइंट लाइब्रेरी का इस्तेमाल करें. यह खाता बनाने के लिए mirror.accounts.insertको कॉल करना आसान बनाता है.

रॉ एचटीटीपी का उदाहरण

नीचे दिया गया उदाहरण, सिर्फ़ अनुरोध का यूआरएल और JSON के जानकारी का उदाहरण दिखाता है. किसी सेवा खाते की ओर से रॉ एचटीटीपी अनुरोध करने की प्रक्रिया ज़्यादा मुश्किल है (पूरी जानकारी के लिए, सर्वर से सर्वर ऐप्लिकेशन के लिए OAuth 2.0 का इस्तेमाल करना देखें). इसलिए, हमारा सुझाव है कि अगर मुमकिन हो, तो आप हमारी किसी Google API का इस्तेमाल करेंक्लाइंट लाइब्रेरी.

अनुरोध का तरीका और यूआरएल:

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} को अनुरोध के यूआरएल से उस टोकन से बदलें जिसे पुष्टि करने के फ़्लो को लागू करने वाले पहले चरण में आपके पुष्टि करने वाले यूआरएल को भेजा गया था.

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 पर खाते वापस पाना

Glass पर Account ऑब्जेक्ट वापस पाना और उनका इस्तेमाल करना, Android के स्टैंडर्ड वर्शन को इस्तेमाल करने जैसा ही है AccountManager.

  1. नीचे दी गई मेनिफ़ेस्ट अनुमतियों का एलान अपनी 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);