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 की मदद से जनरेट की गई और आपके ऐप्लिकेशन को साइन करने के लिए इस्तेमाल की गई साइनिंग पासकोड, "अपलोड पासकोड" बन जाता है. चाहे आप साइनिंग करने या अपलोड कुंजी के तौर पर बबल्स की मदद से जनरेट की गई कुंजी का इस्तेमाल करें, आपको कुंजी की सुरक्षा करनी चाहिए और उसे निजी रखना चाहिए. हमारा सुझाव है कि आप इसे वर्शन कंट्रोल में शामिल न करें. इसके बजाय, उस खाते का ऐक्सेस सिर्फ़ कुछ लोगों को दें.

आपकी वेबसाइट और 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. ऐसेट लिंक टूल ऐप्लिकेशन खोलें. इसके बाद, आपको अपने डिवाइस पर इंस्टॉल किए गए सभी ऐप्लिकेशन की सूची, पैकेज के नाम के हिसाब से दिखेगी. सूची को उस ऐप्लिकेशन आईडी के हिसाब से फ़िल्टर करें जिसे आपने पहले bubblewrap init के दौरान चुना था और उस एंट्री पर क्लिक करें.
  4. आपको एक पेज दिखेगा, जिसमें आपके ऐप्लिकेशन का हस्ताक्षर और जनरेट किया गया डिजिटल ऐसेट लिंक होगा. इसे अपनी पसंद के मुताबिक एक्सपोर्ट करने के लिए, सबसे नीचे मौजूद 'कॉपी करें' या 'शेयर करें' बटन पर क्लिक करें (उदाहरण के लिए, Google Keep में सेव करें, उसे खुद को ईमेल करें).

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

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

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

अगर आपकी वेबसाइट को Jekyll (जैसे कि GitHub पेज) से जनरेट किया गया है, तो आपको कॉन्फ़िगरेशन की एक लाइन जोड़नी होगी, ताकि आउटपुट में .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, Digital Asset Links की पुष्टि न हो पाने की वजह को लॉग करता है. साथ ही, adb logcat की मदद से, Android डिवाइस पर लॉग देखे जा सकते हैं. अगर Linux/Mac पर डेवलप किया जा रहा है, तो कनेक्ट किए गए डिवाइस से जुड़े काम के लॉग देखने के लिए:

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

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