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

Peter Conn
Peter Conn
Joyce Toh
Joyce Toh

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

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

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

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

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

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

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

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