Android Concepts (वेब डेवलपर के लिए)

Peter Conn
Peter Conn
Joyce Toh
Joyce Toh

अगर आप वेब डेवलपर हैं और आपने Android और Google Play का इस्तेमाल पहले कभी नहीं किया है, तो आपको कुछ बातों के बारे में पता होना चाहिए. इसके लिए, पहले से ही कई रिसॉर्स और दस्तावेज़ मौजूद हैं. इसके लिए, Android टीम का धन्यवाद. हालांकि, यहां हम कुछ अहम कॉन्सेप्ट और उनके बारे में बताएंगे कि ये Bubblewrap से कैसे जुड़े हैं.

अपलोड पासकोड बनाम साइनिंग पासकोड

अगर आपको Android ऐप्लिकेशन बंडल (एएबी) जनरेट करने के लिए Bubblewrap का इस्तेमाल करना है (ध्यान दें: अगस्त 2021 से, Google Play पर सभी नए ऐप्लिकेशन को Android ऐप्लिकेशन बंडल फ़ॉर्मैट का इस्तेमाल करना होगा) या Google Play पर अपलोड और पब्लिश करने के लिए APK का इस्तेमाल करना है, तो आपको अपने ऐप्लिकेशन पर साइनिंग पासकोड से हस्ताक्षर करना होगा. Google Play पर, इस समस्या को हल करने के लिए आपके पास दो विकल्प हैं:

  • Play ऐप्लिकेशन साइनिंग (इसका सुझाव काफ़ी ज़्यादा दिया जाता है): Google आपके ऐप्लिकेशन के साइनिंग पासकोड को मैनेज करेगा और उसे सुरक्षित रखेगा. Google, ऐप्लिकेशन को उपलब्ध कराने के समय आपके APKs पर हस्ताक्षर करने के लिए भी इसका इस्तेमाल करता है. Play ऐप्लिकेशन साइनिंग की सुविधा, दो कुंजियों का इस्तेमाल करती है. "ऐप्लिकेशन साइनिंग पासकोड", जिसे Google आपके लिए मैनेज करेगा और "अपलोड पासकोड", जिसे आपके पास रखना चाहिए और यह आपके लिए निजी होना चाहिए. Play Console पर अपलोड करने के लिए, अपने ऐप्लिकेशन पर साइन करने के लिए अपलोड पासकोड का इस्तेमाल किया जाता है. इस सिस्टम की मदद से, Play की सहायता टीम से संपर्क करके, अपलोड पासकोड को रीसेट किया जा सकता है. ऐसा तब किया जा सकता है, जब पासकोड खो जाए या उससे छेड़छाड़ की गई हो. फ़िलहाल, Google Play पर ऐप्लिकेशन को एएबी या APK के तौर पर अपलोड किया जा सकता है:
    • Android ऐप्लिकेशन बंडल (एएबी): Play Console पर एएबी अपलोड करने पर, APKs को बनाने और जनरेट करने की प्रोसेस को Google Play Store पर भेज दिया जाता है. जब कोई उपयोगकर्ता आपका ऐप्लिकेशन डाउनलोड और इंस्टॉल करता है, तो Google Play उसे साइन किए गए APK के तौर पर डिस्ट्रिब्यूट करेगा. इसलिए, APKs पर हस्ताक्षर करने की ज़िम्मेदारी भी Google Play की होगी. इसलिए, अगर आपने Play Console पर अपने ऐप्लिकेशन को AAB के तौर पर अपलोड किया है, तो डिफ़ॉल्ट रूप से आपको Play ऐप्लिकेशन साइनिंग का इस्तेमाल करना होगा.
    • APK: APKs के लिए, आपके पास Play ऐप्लिकेशन साइनिंग की सुविधा के लिए ऑप्ट इन करने का विकल्प होता है. हमारा सुझाव है कि आप Play ऐप्लिकेशन साइनिंग की सुविधा के लिए ऑप्ट-इन करें. इससे, आपके ऐप्लिकेशन साइनिंग पासकोड की सुरक्षा बढ़ती है. जैसा कि पहले बताया गया है, Google Play पर जल्द ही सभी नए ऐप्लिकेशन को एएबी फ़ॉर्मैट में अपलोड करना ज़रूरी होगा. इसलिए, हमारा सुझाव है कि आप APK के बजाय एएबी फ़ॉर्मैट में अपलोड करें.
  • अपनी साइनिंग पासकोड मैनेज करना: अगर आपने अपनी साइनिंग पासकोड मैनेज करने का विकल्प चुना है और Play ऐप्लिकेशन साइनिंग की सुविधा के लिए ऑप्ट-इन नहीं किया है, तो आपके ऐप्लिकेशन के साइनिंग पासकोड की पूरी ज़िम्मेदारी आपकी होगी. Play ऐप्लिकेशन साइनिंग की सुविधा के उलट, पासकोड खो जाने पर उसे रीसेट नहीं किया जा सकता. इसलिए, ऐप्लिकेशन साइनिंग पासकोड खोने का मतलब है कि आपके पास ऐप्लिकेशन को अपडेट करने का विकल्प भी नहीं रहेगा.

bubblewrap init सेटअप के दौरान, "साइनिंग पासकोड की जानकारी (5/5)" वाले सेक्शन में जाने पर, आपसे "पासकोड स्टोर करने की जगह" और "पासकोड का नाम" डालने के लिए कहा जाएगा. इसके अलावा, डिफ़ॉल्ट वैल्यू का इस्तेमाल भी किया जा सकता है. डिफ़ॉल्ट रूप से, पासकोड को आपकी प्रोजेक्ट डायरेक्ट्री में मौजूद android.keystore फ़ाइल में सेव किया जाता है. साथ ही, पासकोड का डिफ़ॉल्ट नाम android होता है. अगर Bubblewrap को उस जगह पर, उस कुंजी के नाम वाला कोई मौजूदा कीस्टोर नहीं मिलता है, तो वह आपके लिए एक कीस्टोर बना देगा. साथ ही, आपसे पासवर्ड भी मांगेगा. आपने जो पासवर्ड डाले हैं उन पर ध्यान दें, क्योंकि आपको उन्हें बिल्ड करने की प्रोसेस (bubblewrap build) के दौरान ज़रूरत पड़ेगी. इस प्रोसेस के दौरान, आपके ऐप्लिकेशन को साइन करने के लिए पासवर्ड का इस्तेमाल किया जाएगा. अगर आपने 'Play ऐप्लिकेशन साइनिंग' में ऑप्ट इन किया है, तो Bubblewrap की मदद से जनरेट की गई और आपके ऐप्लिकेशन को साइन करने के लिए इस्तेमाल की गई साइनिंग पासकोड, "अपलोड पासकोड" बन जाता है. चाहे आपने Bubblewrap से जनरेट की गई कुंजी को साइनिंग या अपलोड कुंजी के तौर पर इस्तेमाल करने का विकल्प चुना हो, आपको इस कुंजी को सुरक्षित रखना चाहिए. हमारा सुझाव है कि आप इसे वर्शन कंट्रोल में शामिल न करें. इसके बजाय, उस खाते का ऐक्सेस सिर्फ़ कुछ लोगों को दें.

आपकी वेबसाइट और Android ऐप्लिकेशन के बीच के संबंध की जानकारी देने के लिए, डिजिटल ऐसेट के लिंक ज़रूरी हैं. Bubblewrap से जनरेट किए गए Android ऐप्लिकेशन की पुष्टि सही तरीके से हो और वह Chrome कस्टम टैब के बजाय, भरोसेमंद वेब गतिविधि के तौर पर लॉन्च हो, यह पक्का करने के लिए आपको अपनी assetlinks.json फ़ाइल में सही कुंजी जोड़नी होगी. इसके बाद, इसे अपनी वेबसाइट पर .well-known/assetlinks.json (रूट के हिसाब से) पर अपलोड करें. आपकी assetlinks.json फ़ाइल इस फ़ॉर्मैट में होनी चाहिए:

[{
 "relation": ["delegate_permission/common.handle_all_urls"],
 "target": {
   "namespace": "android_app",
   "package_name": "com.your.package_name",
   "sha256_cert_fingerprints": [
     "XX:XX:XX:..."
   ]
 }
}]

SHA256 सर्टिफ़िकेट फ़िंगरप्रिंट पाना

assetlinks.json फ़ाइल बनाने के लिए, आपको अपने ऐप्लिकेशन की साइनिंग पासकोड से जुड़ा SHA 256 सर्टिफ़िकेट फ़िंगरप्रिंट चाहिए होगा. ध्यान देने वाली अहम बात यह है कि आपके साइनिंग और अपलोड पासकोड से जुड़े फ़िंगरप्रिंट अलग-अलग होंगे. इस अंतर को ध्यान में रखना ज़रूरी है. ऐसा तब ज़्यादा ज़रूरी है, जब आपका ऐप्लिकेशन Chrome कस्टम टैब के तौर पर लॉन्च हो रहा हो. ऐसा होने पर, हो सकता है कि आपकी assetlinks.json फ़ाइल में, सही कुंजी से जुड़ा फ़िंगरप्रिंट न हो.

अपने ऐप्लिकेशन को स्थानीय तौर पर आसानी से डीबग करने के लिए, अपने assetlinks.json में साइनिंग और अपलोड सर्टिफ़िकेट, दोनों का फ़िंगरप्रिंट होना ज़रूरी है. assetlinks.json फ़ाइल में दोनों पासकोड रखने के तरीके के बारे में ज़्यादा जानकारी के लिए, नीचे ज़्यादा पासकोड जोड़ना देखें.

फ़िंगरप्रिंट पाने के कुछ तरीके हैं. इनके बारे में अगले सेक्शन में बताया गया है. इन सभी तरीकों से आपको एक ही फ़िंगरप्रिंट मिलेंगे. इसलिए, अपनी पसंद के हिसाब से कोई भी तरीका चुनें.

Play Console से

आपके पास एक या दो पासकोड हो सकते हैं. यह इस बात पर निर्भर करता है कि आपने 'Play ऐप्लिकेशन साइनिंग' में ऑप्ट इन किया है या नहीं. हर कुंजी के लिए सही SHA256 फ़िंगरप्रिंट पाने के लिए:

  1. Play Console पर जाएं
  2. वह ऐप्लिकेशन चुनें जिसमें आपकी दिलचस्पी है
  3. बाईं ओर मौजूद नेविगेशन मेन्यू में, रिलीज़ में जाकर, सेटअप -> ऐप्लिकेशन के लिए पूरी सुरक्षा देने की सुविधा पर जाएं.
  4. सही कुंजी के लिए SHA256 को कॉपी करें:

अपने साइनिंग या अपलोड पासकोड के लिए, सही SHA256 सर्टिफ़िकेट फ़िंगरप्रिंट वापस पाना

  • साइनिंग पासकोड: "ऐप्लिकेशन साइनिंग पासकोड सर्टिफ़िकेट" के लिए SHA256 फ़िंगरप्रिंट कॉपी करें. अगर आपने Google Play Store से ऐप्लिकेशन डाउनलोड किया है, तो यह फ़िंगरप्रिंट आपके ऐप्लिकेशन से मेल खाएगा. ऐसा इसलिए है, क्योंकि Google Play, साइनिंग पासकोड से हस्ताक्षर किए गए आपके ऐप्लिकेशन को डिस्ट्रिब्यूट करता है.

  • अपलोड पासकोड: "अपलोड पासकोड का सर्टिफ़िकेट" के लिए SHA256 फ़िंगरप्रिंट कॉपी करें. अगर आपने ऐप्लिकेशन को स्थानीय तौर पर इंस्टॉल किया है, तो यह फ़िंगरप्रिंट आपके ऐप्लिकेशन से मेल खाएगा. उदाहरण के लिए, यूएसबी के ज़रिए ADB के ज़रिए. आपकी लोकल मशीन पर मौजूद APK को Bubblewrap ने बनाया था. इसलिए, उस पर init सेटअप के दौरान, आपके लिए बनाई गई कुंजी से साइन किया गया है. याद रखें कि यह आपके डिवाइस पर इंस्टॉल किए गए ऐप्लिकेशन के लिए साइनिंग पासकोड हो सकता है. हालांकि, Play के ज़रिए ऐप्लिकेशन पब्लिश करने के बाद, यह "अपलोड पासकोड" बन जाता है.

keytool के ज़रिए

keytool, पासकोड और सर्टिफ़िकेट मैनेज करने वाला टूल है. जनरेट किए गए APK या AAB Bubblewrap से जुड़े SHA 256 फ़िंगरप्रिंट को निकालने के लिए, keytool का इस्तेमाल किया जा सकता है. ध्यान दें कि यह फ़िंगरप्रिंट, लोकल साइनिंग पासकोड के लिए है. अगर आपने Play पर अपना ऐप्लिकेशन अपलोड किया है और Play ऐप्लिकेशन साइनिंग की सुविधा के लिए ऑप्ट इन किया है, तो यह पासकोड "अपलोड पासकोड" बन जाता है.

keytool -printcert -jarfile [path to APK or AAB] | grep SHA256

अपने ऐप्लिकेशन के लिए सही डिजिटल एसेट लिंक फ़ाइल पाने का एक और तरीका है, एसेट लिंक टूल का इस्तेमाल करना:

  1. Play Store से ऐसेट लिंक टूल इंस्टॉल करें.
  2. उसी डिवाइस पर, Google Play Store से अपना ऐप्लिकेशन डाउनलोड करें या उसे स्थानीय तौर पर इंस्टॉल करें.
  3. Asset Link Tool ऐप्लिकेशन खोलें. इसके बाद, आपको अपने डिवाइस पर पैकेज के नाम के हिसाब से इंस्टॉल किए गए सभी ऐप्लिकेशन की सूची दिखेगी. सूची को उस ऐप्लिकेशन आईडी के हिसाब से फ़िल्टर करें जिसे आपने पहले bubblewrap init के दौरान चुना था और उस एंट्री पर क्लिक करें.
  4. आपको एक पेज दिखेगा, जिसमें आपके ऐप्लिकेशन का हस्ताक्षर और जनरेट किया गया डिजिटल ऐसेट लिंक होगा. अपनी पसंद के मुताबिक एक्सपोर्ट करने के लिए, सबसे नीचे मौजूद 'कॉपी करें' या 'शेयर करें' बटन पर क्लिक करें. उदाहरण के लिए, Google Keep में सेव करें या अपने ईमेल पते पर भेजें.

साइनिंग या अपलोड पासकोड के लिए भी यही तरीका लागू होता है. अगर आपने अपना ऐप्लिकेशन Google Play Store से इंस्टॉल किया है, तो एसेट लिंक टूल से आपको अपने ऐप्लिकेशन की साइनिंग पासकोड का फ़िंगरप्रिंट मिलेगा. अगर आपने ऐप्लिकेशन को सीधे अपनी लोकल मशीन से इंस्टॉल किया है, तो फ़िंगरप्रिंट, Bubblewrap की जनरेट की गई कुंजी के लिए है.

फ़ाइल अपलोड करने के बाद, पक्का करें कि आपके पास ब्राउज़र में एसेट लिंक फ़ाइल को ऐक्सेस करने का विकल्प हो. देखें कि https://example.com/.well-known/assetlinks.json, उस फ़ाइल पर ले जाता है जिसे आपने अभी अपलोड किया है.

Jekyll पर आधारित वेबसाइटें

अगर आपकी वेबसाइट Jekyll (जैसे, GitHub Pages) से जनरेट की गई है, तो आपको कॉन्फ़िगरेशन की एक लाइन जोड़नी होगी, ताकि .well-known डायरेक्ट्री को आउटपुट में शामिल किया जा सके. GitHub सहायता केंद्र पर, इस विषय के बारे में ज़्यादा जानकारी उपलब्ध है. अपनी साइट के रूट में _config.yml नाम की फ़ाइल बनाएं (या अगर वह पहले से मौजूद है, तो उसमें जोड़ें) और ये डालें:

# Folders with dotfiles are ignored by default.
include: [.well-known]

ज़्यादा कुंजियां जोड़ना

किसी डिजिटल ऐसेट लिंक फ़ाइल में एक से ज़्यादा ऐप्लिकेशन हो सकते हैं. साथ ही, हर ऐप्लिकेशन के लिए एक से ज़्यादा कुंजियां हो सकती हैं. उदाहरण के लिए, दूसरी कुंजी जोड़ने के लिए, ऐसेट लिंक टूल का इस्तेमाल करके कुंजी तय करें और उसे दूसरी एंट्री के तौर पर जोड़ें. Chrome में इस JSON को पार्स करने वाला कोड काफ़ी सख्त है. इसलिए, पक्का करें कि आपने गलती से सूची के आखिर में एक अतिरिक्त कॉमा न जोड़ा हो.

[{
  "relation": ["delegate_permission/common.handle_all_urls"],
  "target": {
    "namespace": "android_app",
    "package_name": "com.your.package_name",
    "sha256_cert_fingerprints": [
      "XX:XX:XX:..."
    ]
  }
},{
  "relation": ["delegate_permission/common.handle_all_urls"],
  "target": {
    "namespace": "android_app",
    "package_name": "com.your.package_name",
    "sha256_cert_fingerprints": [
      "XX:XX:XX:..."
    ]
  }
}]

समस्या का हल

Chrome, डिजिटल एसेट लिंक की पुष्टि न हो पाने की वजह को लॉग करता है. adb logcat की मदद से, Android डिवाइस पर लॉग देखे जा सकते हैं. अगर Linux/Mac पर डेवलप किया जा रहा है, तो कनेक्ट किए गए डिवाइस से जुड़े काम के लॉग देखने के लिए:

> adb logcat -v brief | grep -e OriginVerifier -e digital_asset_links

उदाहरण के लिए, अगर आपको Statement failure matching fingerprint. मैसेज दिखता है, तो आपको एसेट लिंक टूल का इस्तेमाल करके अपने ऐप्लिकेशन का हस्ताक्षर देखना चाहिए. साथ ही, यह पक्का करना चाहिए कि वह आपकी assetlinks.json फ़ाइल में मौजूद हस्ताक्षर से मेल खाता हो.