होस्ट पर आधारित कार्ड एम्युलेशन की खास जानकारी

एनएफ़सी की सुविधा देने वाले कई Android डिवाइस, पहले से ही एनएफ़सी की सुविधा देते हैं कार्ड एम्युलेशन. ज़्यादातर मामलों में, कार्ड की नकल करने के लिए, डिवाइस, जिसे सुरक्षित एलिमेंट कहा जाता है. वायरलेस मोबाइल और इंटरनेट सेवा देने वाली कंपनियों की ओर से दिए गए कई सिम कार्ड सुरक्षा तत्व भी शामिल है.

Android 4.4 और उसके बाद के वर्शन, कार्ड एम्युलेशन का एक अतिरिक्त तरीका उपलब्ध कराते हैं, इसमें होस्ट पर आधारित कार्ड एम्युलेशन नाम का सुरक्षित एलिमेंट शामिल नहीं होता है. यह किसी भी Android ऐप्लिकेशन को कार्ड की नकल करने और सीधे एनएफ़सी से बात करने की सुविधा देता है रीडर. इस विषय में बताया गया है कि होस्ट पर आधारित कार्ड एम्युलेशन (एचसीई) किस तरह काम करता है Android पर आपको ऐसा ऐप्लिकेशन बनाने का तरीका बताया जाएगा जो एनएफ़सी कार्ड की नकल करने के लिए इसका इस्तेमाल करता है तकनीक.

सुरक्षा एलिमेंट की मदद से कार्ड एम्युलेशन

जब किसी सुरक्षित एलिमेंट का इस्तेमाल करके एनएफ़सी कार्ड एम्युलेशन दिया जाता है, तो कार्ड Android के ज़रिए, डिवाइस के सुरक्षा एलिमेंट में एम्युलेट की गई सुविधा का प्रावधान किया गया है का इस्तेमाल करें. इसके बाद, जब उपयोगकर्ता डिवाइस को एनएफ़सी टर्मिनल के ऊपर रखता है, तो एनएफ़सी डिवाइस में लगा कंट्रोलर, रीडर से सभी डेटा को सीधे सुरक्षित एलिमेंट. पहली इमेज में यह कॉन्सेप्ट दिखाया गया है:


एनएफ़सी रीडर की इमेज, जिसमें एनएफ़सी कंट्रोलर से होकर सुरक्षित एलिमेंट से जानकारी ली जा रही है पहली इमेज. सुरक्षा तत्व वाला एनएफ़सी कार्ड एम्युलेशन.

सिक्योर एलिमेंट खुद ही एनएफ़सी टर्मिनल से कम्यूनिकेशन करता है और इस लेन-देन में कोई Android ऐप्लिकेशन शामिल नहीं है. लेन-देन के बाद पूरी तरह से, Android ऐप्लिकेशन लेन-देन की स्थिति देखी जा सकती है और उपयोगकर्ता को इसकी सूचना दी जा सकती है.

होस्ट पर आधारित कार्ड एम्युलेशन

जब होस्ट-आधारित कार्ड एम्युलेशन का इस्तेमाल करके एनएफ़सी कार्ड को एम्युलेट किया जाता है, तो डेटा को रूट कर दिया जाता है किसी सुरक्षित एलिमेंट पर रूट करने के बजाय, सीधे होस्ट सीपीयू पर जाता है. दूसरी इमेज इसमें दिखाया गया है कि होस्ट पर आधारित कार्ड एम्युलेशन कैसे काम करता है:


एनएफ़सी रीडर की इमेज, जिसमें एनएफ़सी कंट्रोलर की मदद से सीपीयू से जानकारी ली जा रही है दूसरी इमेज. सुरक्षित एलिमेंट के बिना एनएफ़सी कार्ड एम्युलेशन.

इस्तेमाल किए जा सकने वाले एनएफ़सी कार्ड और प्रोटोकॉल


एचसीई प्रोटोकॉल स्टैक दिखाने वाला डायग्राम तीसरी इमेज. Android का HCE प्रोटोकॉल स्टैक.

एनएफ़सी के स्टैंडर्ड कई अलग-अलग प्रोटोकॉल के साथ काम करते हैं. साथ ही, ऐसे कई प्रोटोकॉल हैं जो अलग-अलग तरह के कार्ड शामिल हैं, जिनका आप अनुकरण कर सकते हैं.

Android 4.4 और उसके बाद के वर्शन, ऐसे कई प्रोटोकॉल के साथ काम करते हैं जो मार्केट में आम हैं आगे मिलने वाली सुविधाओं से करें. टच किए बिना पैसे चुकाने की सुविधा वाले कई मौजूदा कार्ड में पहले से ही इन प्रोटोकॉल का इस्तेमाल किया जा रहा है, जैसे कि टच किए बिना पेमेंट करने के कार्ड. ये प्रोटोकॉल कई कंपनियों के साथ भी काम करते हैं आज बाज़ार में मौजूद एनएफ़सी रीडर. इनमें ऐसे Android एनएफ़सी डिवाइस भी शामिल हैं जो पाठक खुद होने चाहिए (IsoDep देखें क्लास) में शामिल किया गया है. इससे आपको एंड-टू-एंड एनएफ़सी सलूशन बनाने और डिप्लॉय करने की सुविधा मिलती है HCE, सिर्फ़ Android पर चलने वाले डिवाइसों का इस्तेमाल करता हो.

खास तौर पर, Android 4.4 और उसके बाद के वर्शन में, एम्युलेट किए जा सकने वाले ऐसे कार्ड काम करते हैं जो एनएफ़सी-फ़ोरम ISO-DEP की खास बातें (ISO/IEC 14443-4 पर आधारित) और प्रोसेस आईएसओ/आईईसी 7816-4 में तय किए गए ऐप्लिकेशन प्रोटोकॉल डेटा यूनिट (एपीडीयू) स्पेसिफ़िकेशन. Android के आईएसओ-डीईपी को सिर्फ़ एनएफ़सी-ए के ऊपर एम्युलेट करने के लिए कहा गया (ISO/IEC 14443-3 टाइप A) टेक्नोलॉजी. NFC-B के लिए सहायता (ISO/IEC 14443-4 टाइप B) टेक्नोलॉजी का इस्तेमाल करना ज़रूरी नहीं है. इमेज 3 में इन सभी की लेयर दिखाई गई है खास जानकारी.

HCE सेवाएं

Android का HCE आर्किटेक्चर, Android पर आधारित है Service कॉम्पोनेंट (HCE) के नाम से जाना जाता है सेवाएं) में भी शामिल हैं. किसी सेवा का एक मुख्य लाभ यह है कि वह बिना किसी यूज़र इंटरफ़ेस के बैकग्राउंड का इस्तेमाल किया जा सकता है. यह कई एचसीई के लिए स्वाभाविक रूप से सही है जैसे लॉयल्टी या बस, मेट्रो वगैरह के लिए कार्ड, जैसे कि वे ऐप्लिकेशन जिनका इस्तेमाल उपयोगकर्ता को नहीं करना चाहिए इस्तेमाल करने के लिए कोई ऐप्लिकेशन लॉन्च करें. इसके बजाय, एनएफ़सी रीडर पर डिवाइस को टैप करने से अगर सेवा पहले से नहीं चल रही है और ट्रांज़ैक्शन लागू करती है, तो सही सेवा को बैकग्राउंड में चलाने की सुविधा मिलती है. बेशक, आप अतिरिक्त यूज़र इंटरफ़ेस (यूआई) लॉन्च करने के लिए स्वतंत्र हैं (जैसे उपयोगकर्ता नोटिफ़िकेशन) भेजे जाएंगे.

सेवा का चुनाव

जब उपयोगकर्ता किसी डिवाइस पर एनएफ़सी रीडर पर टैप करता है, तब Android सिस्टम को यह जानने की ज़रूरत होती है कि जिसकी HCE सेवा के साथ एनएफ़सी रीडर कनेक्ट करना चाहता है. आईएसओ/आईईसी 7816-4 स्पेसिफ़िकेशन में, ऐप्लिकेशन को चुनने का तरीका बताया गया है. ऐप्लिकेशन आईडी (AID). AID में ज़्यादा से ज़्यादा 16 बाइट होते हैं. अगर आपको किसी प्रॉडक्ट या सेवा के बारे में मौजूदा एनएफ़सी रीडर इन्फ़्रास्ट्रक्चर के लिए कार्ड, जो पाठक आम तौर पर लोकप्रिय और सार्वजनिक रूप से पंजीकृत होते हैं (उदाहरण के लिए, पेमेंट नेटवर्क के आईडी, जैसे कि Visa और MasterCard).

अगर आपको अपने ऐप्लिकेशन के लिए नई रीडर इन्फ़्रास्ट्रक्चर डिप्लॉय करना है, तो को अपने AID रजिस्टर करने होंगे. AIDs के लिए रजिस्ट्रेशन प्रोसेस के बारे में यहां बताया गया है का पालन करना होगा. हमारा सुझाव है कि आप 7816-5 के मुताबिक एआईडी रजिस्टर करें अगर आप Android के लिए कोई HCE ऐप्लिकेशन डिप्लॉय कर रहे हैं, क्योंकि वह टकरावों से बचाता है अन्य ऐप्लिकेशन के साथ काम करता है.

AID ग्रुप

कुछ मामलों में, HCE सेवा को एक से ज़्यादा एआईडी रजिस्टर करने पड़ सकते हैं. साथ ही, उन्हें डिफ़ॉल्ट हैंडलर की एक ऐसी फ़ाइल है जिसमें सभी AID का इस्तेमाल करें. ग्रुप में शामिल कुछ AID किसी दूसरी सेवा पर जाने की सुविधा काम नहीं करते.

एक साथ रखी जाने वाली AID की सूची को AID ग्रुप कहा जाता है. सभी एआईडी के लिए AID ग्रुप के मामले में, Android इनमें से किसी एक की गारंटी देता है:

  • ग्रुप के सभी AID को इस एचसीई सेवा पर रूट किया जाता है.
  • ग्रुप में किसी भी AID को इस HCE सेवा पर रूट नहीं किया जाता. उदाहरण के लिए, क्योंकि उपयोगकर्ता ने किसी अन्य सेवा को प्राथमिकता दी, जिसने आपके ग्रुप में एक या उससे ज़्यादा AID का अनुरोध किया भी देखें).

दूसरे शब्दों में, ऐसी कोई स्थिति नहीं है, जहां ग्रुप में कुछ AID यह काम कर सकें एक HCE सेवा पर रूट किया जाता है और कुछ को दूसरी.

AID ग्रुप और कैटगरी

हर AID ग्रुप को किसी कैटगरी से जोड़ा जा सकता है. इससे Android, ग्रुप बनाने के लिए कैटगरी के हिसाब से एक साथ HCE सेवाएं मिलती हैं और उपयोगकर्ता को ये सेवाएं सेट करने में मदद मिलती हैं AID लेवल के बजाय, कैटगरी लेवल पर डिफ़ॉल्ट होता है. AID का ज़िक्र करने से बचें उपयोगकर्ता को मिलने वाले किसी भी हिस्से में देखने की सुविधा देते हैं, क्योंकि उनका कोई मतलब नहीं है औसत उपयोगकर्ता तक सीमित नहीं है.

Android 4.4 और उसके बाद वाले वर्शन दो श्रेणियों का समर्थन करते हैं:

  • CATEGORY_PAYMENT (इसमें इंडस्ट्री स्टैंडर्ड वाले पेमेंट ऐप्लिकेशन शामिल हैं)
  • CATEGORY_OTHER (अन्य सभी HCE ऐप्लिकेशन के लिए)

किसी एचसीई सेवा को लागू करना

होस्ट पर आधारित कार्ड एम्युलेशन का इस्तेमाल करके एनएफ़सी कार्ड को एम्युलेट करने के लिए, आपको Service कॉम्पोनेंट, जो एनएफ़सी लेन-देन को मैनेज करता है.

देखें कि इस डिवाइस पर एचसीई की सुविधा काम करती है या नहीं

आपका ऐप्लिकेशन FEATURE_NFC_HOST_CARD_EMULATION सुविधा. <uses-feature> का इस्तेमाल करें अपने ऐप्लिकेशन के मेनिफ़ेस्ट में टैग करें, ताकि यह एलान किया जा सके कि आपका ऐप्लिकेशन HCE का इस्तेमाल करता है सुविधा के बारे में जानकारी देनी होगी और यह देखना होगा कि ऐप्लिकेशन के काम करने के लिए इसकी ज़रूरत है या नहीं.

सेवा लागू करना

Android 4.4 और उसके बाद वाले वर्शन में एक सुविधा Service क्लास मिलती है, जिसका इस्तेमाल किया जा सकता है को लागू करने की एक वजह: HostApduService क्लास.

पहला चरण HostApduService का विस्तार करना है, जैसा कि इस कोड में दिखाया गया है नमूना:

Kotlin

class MyHostApduService : HostApduService() {

    override fun processCommandApdu(commandApdu: ByteArray, extras: Bundle?): ByteArray {
       ...
    }

    override fun onDeactivated(reason: Int) {
       ...
    }
}

Java

public class MyHostApduService extends HostApduService {
    @Override
    public byte[] processCommandApdu(byte[] apdu, Bundle extras) {
       ...
    }
    @Override
    public void onDeactivated(int reason) {
       ...
    }
}

HostApduService, दो ऐसे ऐब्सट्रैक्ट तरीकों का एलान करता है जिन्हें आपको बदलना होगा और लागू करें. इनमें से एक, processCommandApdu() जब भी कोई एनएफ़सी रीडर ऐप्लिकेशन प्रोटोकॉल डेटा यूनिट (एपीडीयू) भेजता है, तो उस कॉल को कॉल किया जाता है आपको सेवाएं देती हैं. APDU के बारे में ISO/IEC 7816-4 स्पेसिफ़िकेशन में बताया गया है. APDU ऐप्लिकेशन-लेवल के पैकेट हैं जिन्हें एनएफ़सी रीडर और को ऐक्सेस करें. ऐप्लिकेशन-लेवल का प्रोटोकॉल हाफ़-डूप्लेक्स है: एनएफ़सी रीडर आपको एक आदेश APDU भेजता है और यह आपके द्वारा APDU में प्रतिक्रिया भेजे जाने का इंतज़ार करता है वापसी.

जैसा कि पहले बताया जा चुका है, Android, AID का इस्तेमाल करके यह तय करता है कि पाठक से बात करना है. आम तौर पर, एनएफ़सी रीडर आपके डिवाइस पर सबसे पहले APDU डिवाइस SELECT AID पीडीयू है; इस APDU में वह AID है जो पाठक चाहता है बात करने के लिए. Android, APDU से AID इकट्ठा करके उसे HCE में बदलता है और फिर उस APDU को हल की गई सेवा पर भेज देता है.

जवाब APDU के आधार पर, जवाब के APDU को बाइट भेजकर जवाब दिया जा सकता है processCommandApdu(). ध्यान दें कि यह तरीका मुख्य थ्रेड पर कॉल किया जाता है को ब्लॉक नहीं करना चाहिए, तो उसे ब्लॉक न करें. अगर आप कंप्यूट करके वापस नहीं आ पा रहे हैं APDU के तुरंत बाद कोई जवाब नहीं मिला. इसके बाद, ज़रूरी काम इस पर किया जा सकता है और sendResponseApdu() आपके होने पर जवाब भेजने के लिए, HostApduService क्लास में बताया गया तरीका हो गया.

Android, रीडर से आपकी सेवा में नए APDU तब तक फ़ॉरवर्ड करता रहता है, जब तक इनमें से कोई वजह हो सकती है:

  • एनएफ़सी रीडर, एक और SELECT AID एपीडीयू भेजता है, जिसे ओएस, यह काम करना बंद कर देगा.
  • एनएफ़सी रीडर और आपके डिवाइस के बीच एनएफ़सी का लिंक काम नहीं कर रहा है.

इन दोनों मामलों में, आपकी कक्षा का onDeactivated() लागू करने के लिए एक तर्क दिया जाता है, जो बताता है कि दोनों में से क्या हुआ है.

अगर आपको मौजूदा रीडर इन्फ़्रास्ट्रक्चर का इस्तेमाल करना है, तो आपको जो लोग आपकी HCE सेवा में उम्मीद करते हैं.

अगर ऐसा नया रीडर इन्फ़्रास्ट्रक्चर डिप्लॉय किया जा रहा है जिसका कंट्रोल भी आपके पास है, तो आपका अपना प्रोटोकॉल और APDU क्रम तय कर सकते हैं. एपीडीयू की मात्रा को सीमित करने की कोशिश करें और एक्सचेंज करने के लिए डेटा का साइज़: इससे यह पक्का होता है कि आपके उपयोगकर्ताओं के पास सिर्फ़ कुछ समय के लिए अपने डिवाइस को एनएफ़सी रीडर के ऊपर रखने के लिए. ऐप्लिकेशन उचित ऊपरी सीमा करीब 1 केबी डेटा है, जो आम तौर पर 300 मिलीसेकंड के अंदर बदल दिया जाता है.

सेवा मेनिफ़ेस्ट का एलान और सहायता आईडी रजिस्ट्रेशन

आपको हमेशा की तरह, मेनिफ़ेस्ट में अपनी सेवा का एलान करना होगा. हालांकि, आपको कुछ जानकारी जोड़नी होगी साथ ही:

  1. प्लैटफ़ॉर्म को यह बताना कि यह एक HCE सेवा है, जो HostApduService इंटरफ़ेस, इसके लिए इंटेंट फ़िल्टर जोड़ें SERVICE_INTERFACE कार्रवाई करें.

  2. इस सेवा के लिए, प्लैटफ़ॉर्म को यह बताने के लिए कि AIDs ग्रुप से जुड़े कौनसे अनुरोध किए गए हैं एक SERVICE_META_DATA सेवा की घोषणा में मौजूद <meta-data> टैग, जो एक्सएमएल की जानकारी देता है वाला संसाधन जिसमें HCE सेवा के बारे में ज़्यादा जानकारी दी गई है.

  3. android:exported एट्रिब्यूट को true पर सेट करें और ऐसा करना ज़रूरी है आपकी सेवा के एलान में android.permission.BIND_NFC_SERVICE अनुमति है. पहले वाले फ़ॉर्मैट से यह पक्का होता है कि सेवा के लिए बाहरी ऐप्लिकेशन का इस्तेमाल किया जा सकता है. फिर बाद वाला नियम, सिर्फ़ उन बाहरी ऐप्लिकेशन को लागू करता है जो android.permission.BIND_NFC_SERVICE की अनुमति, आपकी सेवा से जुड़ी हो सकती है. android.permission.BIND_NFC_SERVICE सिस्टम से जुड़ी अनुमति है. इसलिए, यह यह नीति लागू करती है कि सिर्फ़ Android OS आपकी सेवा से जुड़ सकता है.

यहां HostApduService मेनिफ़ेस्ट का एक उदाहरण दिया गया है:

<service android:name=".MyHostApduService" android:exported="true"
         android:permission="android.permission.BIND_NFC_SERVICE">
    <intent-filter>
        <action android:name="android.nfc.cardemulation.action.HOST_APDU_SERVICE"/>
    </intent-filter>
    <meta-data android:name="android.nfc.cardemulation.host_apdu_service"
               android:resource="@xml/apduservice"/>
</service>

यह मेटा-डेटा टैग, apduservice.xml फ़ाइल पर ले जाता है. नीचे दी गई चीज़ें एक ऐसी फ़ाइल का उदाहरण जिसमें एक AID ग्रुप के बारे में जानकारी दी गई है और जिसमें दो शामिल हैं मालिकाना हक वाले AID:

<host-apdu-service xmlns:android="http://schemas.android.com/apk/res/android"
           android:description="@string/servicedesc"
           android:requireDeviceUnlock="false">
    <aid-group android:description="@string/aiddescription"
               android:category="other">
        <aid-filter android:name="F0010203040506"/>
        <aid-filter android:name="F0394148148100"/>
    </aid-group>
</host-apdu-service>

<host-apdu-service> टैग में <android:description> एट्रिब्यूट होना ज़रूरी है जिसमें उस सेवा के बारे में उपयोगकर्ता के लिए आसान जानकारी शामिल हो जिसे आप ऐप का यूज़र इंटरफ़ेस (यूआई) है. आप requireDeviceUnlock एट्रिब्यूट का इस्तेमाल करके यह बता सकते हैं कि APDU को मैनेज करने के लिए इस सेवा का इस्तेमाल करने से पहले डिवाइस को अनलॉक किया जाता है.

<host-apdu-service> में एक या उससे ज़्यादा <aid-group> टैग होने चाहिए. हर इन कामों के लिए <aid-group> टैग की ज़रूरत होगी:

  • इसमें ऐसा android:description एट्रिब्यूट शामिल है जो लोगों के लिए आसान है AID ग्रुप की जानकारी, जो यूज़र इंटरफ़ेस (यूआई) में दिखाने के लिए सही है.
  • AID की कैटगरी बताने के लिए, android:category एट्रिब्यूट को सेट करें ग्रुप से जुड़ा है, जैसे कि CATEGORY_PAYMENT के तय किए गए स्ट्रिंग कॉन्सटेंट या CATEGORY_OTHER.
  • इसमें एक या उससे ज़्यादा <aid-filter> टैग होने चाहिए और हर टैग में एक ही AID होता है. AID को हेक्साडेसिमल फ़ॉर्मैट में तय करें और पक्का करें कि इसमें एक सम वैल्यू हो वर्णों की संख्या.

आपके ऐप्लिकेशन के लिए यह भी ज़रूरी है कि इस ईमेल पते के तौर पर रजिस्टर करने के लिए NFC की अनुमति HCE सेवा.

AID के लिए विवाद का समाधान

एक ही डिवाइस पर HostApduService के कई कॉम्पोनेंट इंस्टॉल किए जा सकते हैं और एक ही AID को एक से ज़्यादा सेवा के ज़रिए रजिस्टर किया जा सकता है. Android, AID को ठीक करता है AID किस कैटगरी से जुड़ा है, इस आधार पर अलग-अलग टकराव होता है. हर हो सकता है कि श्रेणी में, विरोधाभास समाधान नीति अलग हो.

पेमेंट जैसी कुछ कैटगरी के लिए, उपयोगकर्ता किसी डिफ़ॉल्ट पेमेंट को चुन सकते हैं दिखाई गई है. अन्य कैटगरी के लिए, नीति के तहत उपयोगकर्ता से हमेशा पूछें कि संघर्ष की स्थिति में कौन-सी सेवा का उपयोग करना चाहिए. जानकारी के लिए किसी खास कैटगरी के लिए, विवाद सुलझाने की नीति से जुड़ी क्वेरी करने का तरीका जानने के लिए, getSelectionModeForCategory().

यह देखना कि आपकी सेवा डिफ़ॉल्ट तौर पर चालू है या नहीं

ऐप्लिकेशन यह देख सकते हैं कि उनकी HCE सेवा, किसी खास कैटगरी के विज्ञापन की टारगेटिंग के लिए, isDefaultServiceForCategory() एपीआई.

अगर आपकी सेवा डिफ़ॉल्ट तौर पर चालू नहीं है, तो इसे डिफ़ॉल्ट सेवा बनाने का अनुरोध किया जा सकता है इसका उपयोग कर रहा है ACTION_CHANGE_DEFAULT.

पेमेंट ऐप्लिकेशन

Android, ऐसी HCE सेवा को स्वीकार करता है जिन्होंने payment कैटगरी का इस्तेमाल करें. Android 4.4 और उसके बाद वाले वर्शन में शीर्ष-स्तरीय सेटिंग मेनू प्रविष्टि, जिसे टैप और pay, जिसमें सभी वैल्यू शामिल होती हैं ऐसे भुगतान ऐप्लिकेशन. इस सेटिंग मेन्यू में उपयोगकर्ता, यह डिफ़ॉल्ट पेमेंट ऐप्लिकेशन तब शुरू होता है, जब किसी पेमेंट टर्मिनल पर टैप किया गया हो.

पेमेंट ऐप्लिकेशन के लिए ज़रूरी ऐसेट

देखने में ज़्यादा आकर्षक उपयोगकर्ता अनुभव देने के लिए, HCE पेमेंट ऐप्लिकेशन सेवा बैनर उपलब्ध कराना ज़रूरी है.

Android 13 और उसके बाद के वर्शन के लिए

सेटिंग यूज़र इंटरफ़ेस (यूआई) में डिफ़ॉल्ट भुगतान चयन सूची में बेहतर फ़िट होने के लिए, स्क्वेयर आइकॉन के लिए बैनर की ज़रूरत. आम तौर पर, यह ऐप्लिकेशन लॉन्चर आइकॉन का डिज़ाइन. इस बदलाव से, ज़्यादा एक जैसा अनुभव मिलता है और साफ़ लुक.

Android 12 और उससे पहले वाले वर्शन के लिए

सर्विस बैनर का साइज़ 260x96 dp पर सेट करें. इसके बाद, सर्विस बैनर का साइज़ सेट करें अपनी मेटाडेटा एक्सएमएल फ़ाइल में, android:apduServiceBanner एट्रिब्यूट को <host-apdu-service> टैग, जो ड्रॉ किए जा सकने वाले संसाधन पर ले जाता है. कॉन्टेंट बनाने यहां एक उदाहरण दिया गया है:

<host-apdu-service xmlns:android="http://schemas.android.com/apk/res/android"
        android:description="@string/servicedesc"
        android:requireDeviceUnlock="false"
        android:apduServiceBanner="@drawable/my_banner">
    <aid-group android:description="@string/aiddescription"
               android:category="payment">
        <aid-filter android:name="F0010203040506"/>
        <aid-filter android:name="F0394148148100"/>
    </aid-group>
</host-apdu-service>

स्क्रीन बंद होने और लॉक स्क्रीन पर कार्रवाई

HCE सेवाओं का व्यवहार, Android के उस वर्शन के हिसाब से अलग-अलग होता है जो डिवाइस.

Android 12 और उसके बाद के वर्शन के लिए

Android 12 (एपीआई लेवल 31) और उसके बाद के वर्शन को टारगेट करने वाले ऐप्लिकेशन में, एनएफ़सी को चालू किया जा सकता है डिवाइस की स्क्रीन चालू न होने पर पेमेंट करने के लिए सेट करें. requireDeviceScreenOn से false.

Android 10 और उसके बाद के वर्शन के लिए

Android 10 (एपीआई लेवल 29) या उसके बाद के वर्शन वाले डिवाइस सुरक्षित एनएफ़सी पर टैप करें. सुरक्षित होने पर एनएफ़सी चालू है. सभी कार्ड एम्युलेटर (होस्ट ऐप्लिकेशन और ऑफ़-होस्ट ऐप्लिकेशन) हैं यह सुविधा, डिवाइस की स्क्रीन बंद होने पर उपलब्ध नहीं होती है. सुरक्षित एनएफ़सी की सुविधा बंद होने पर, होस्ट न होने पर ऐप्लिकेशन तब उपलब्ध होते हैं, जब डिवाइस की स्क्रीन बंद होती है. आप यह देख सकते हैं: इसका उपयोग करके NFC समर्थन सुरक्षित करें isSecureNfcSupported().

Android 10 और उसके बाद के वर्शन वाले डिवाइसों पर, सेटिंग करने के लिए एक जैसी सुविधाएं true से android:requireDeviceUnlock की वैल्यू, डिवाइसों के मामले में लागू होती है जिनमें Android 9 और इससे पहले के वर्शन पर चलने वाले डिवाइस शामिल हों. यह सुविधा सिर्फ़ तब मिलेगी, जब 'सुरक्षित एनएफ़सी की सुविधा' बंद हो. इसका मतलब है कि अगर सुरक्षित एनएफ़सी की सुविधा चालू है. लॉक स्क्रीन से एचसीई सेवाएं काम नहीं कर सकतीं android:requireDeviceUnlock की सेटिंग पर ध्यान दिए बिना.

Android 9 और उससे पहले वाले वर्शन के लिए

Android 9 (एपीआई लेवल 28) और इससे पहले के वर्शन वाले डिवाइसों पर, एनएफ़सी कंट्रोलर और ऐप्लिकेशन प्रोसेसर पूरी तरह से बंद हो जाता है, जब डिवाइस बंद हो. इसलिए, स्क्रीन बंद होने पर HCE सेवाएं काम नहीं करती हैं.

साथ ही, Android 9 और इससे पहले के वर्शन पर, HCE सेवाएं लॉक स्क्रीन से काम कर सकती हैं. हालांकि, इसे कंट्रोल करने के लिए, android:requireDeviceUnlock एट्रिब्यूट का इस्तेमाल किया जाता है आपकी HCE सेवा का <host-apdu-service> टैग. डिफ़ॉल्ट रूप से, डिवाइस अनलॉक करने की सुविधा की आवश्यकता नहीं है, और डिवाइस लॉक होने पर भी आपकी सेवा शुरू हो जाती है.

अगर आपने अपने एचसीई के लिए android:requireDeviceUnlock एट्रिब्यूट को true पर सेट किया है, तो नहीं है, तो Android निम्न के लिए उपयोगकर्ता को डिवाइस अनलॉक करने का संकेत देता है होने की तारीख:

  • उपयोगकर्ता किसी एनएफ़सी रीडर पर टैप करता है.
  • एनएफ़सी रीडर किसी ऐसे AID को चुनता है जिसे आपकी सेवा के लिए रिज़ॉल्व किया जाता है.

अनलॉक करने के बाद, Android एक डायलॉग बॉक्स दिखाता है. इसमें, उपयोगकर्ता को दोबारा टैप करने के लिए कहा जाता है लेन-देन पूरा करें. यह इसलिए आवश्यक है क्योंकि हो सकता है कि उपयोगकर्ता ने डिवाइस को एनएफ़सी रीडर से दूर रखने के लिए किया जा सकता है.

सुरक्षित एलिमेंट वाले कार्ड के साथ, उपयोगकर्ताओं को अपने साथ जोड़े रखना

यह सेक्शन उन डेवलपर के लिए है जिन्होंने ऐप्लिकेशन डिप्लॉय किया है जो कार्ड एम्युलेशन के लिए सुरक्षा एलिमेंट पर निर्भर होता है. Android का HCE लागू करना इसे कार्ड को लागू करने के अन्य तरीकों के साथ-साथ काम करने के लिए डिज़ाइन किया गया है एम्युलेटर. इसमें सुरक्षा से जुड़े एलिमेंट का इस्तेमाल भी शामिल है.

यह को-एसिस्टेंस एआईडी रूटिंग नाम के सिद्धांत पर आधारित है. एनएफ़सी कंट्रोलर, रूटिंग टेबल को सेव रखता है, जिसमें रूटिंग की एक (सीमित) सूची होती है नियम. रूटिंग के हर नियम में एक AID और एक डेस्टिनेशन होता है. गंतव्य ये काम कर सकता है या तो होस्ट सीपीयू हो, जहां Android ऐप्लिकेशन चल रहे हों या फिर कनेक्ट किया गया हो एलिमेंट.

जब एनएफ़सी रीडर, SELECT AID के साथ APDU भेजता है, तो एनएफ़सी कंट्रोलर को पार्स किया जाता है वह देखता है कि AIDs, इसकी रूटिंग टेबल में मौजूद AID से मेल खाता है या नहीं. अगर यह मैच करता है, तो APDU और इसके बाद के सभी APDU डेस्टिनेशन पर भेजे जाते हैं जब तक कि कोई दूसरा SELECT AID एपीडीयू नहीं मिलता या एनएफ़सी नहीं मिलता लिंक काम नहीं कर रहा है.

इमेज 4 में यह आर्किटेक्चर दिखाया गया है:


एनएफ़सी रीडर को दिखाने वाला डायग्राम, जिसमें सुरक्षित एलिमेंट और सीपीयू, दोनों के साथ बातचीत की गई है चौथी इमेज. सुरक्षा एलिमेंट और होस्ट-कार्ड एम्युलेशन, दोनों के साथ काम करने वाला Android.

एनएफ़सी कंट्रोलर में आम तौर पर, एपीडीयू के लिए एक डिफ़ॉल्ट रूट भी होता है. जब कोई रूटिंग टेबल में AID नहीं मिला, डिफ़ॉल्ट रूट का इस्तेमाल किया गया है. हालांकि, यह अलग-अलग डिवाइस के लिए सेटिंग अलग हो सकती है, इसलिए Android डिवाइस ज़रूरी हैं ताकि यह पक्का किया जा सके कि आपके ऐप्लिकेशन से रजिस्टर किए जा रहे AID होस्ट.

ऐसे Android ऐप्लिकेशन जो किसी HCE सेवा को लागू करते हैं या सुरक्षित एलिमेंट का इस्तेमाल करते हैं रूटिंग टेबल को कॉन्फ़िगर करने के बारे में चिंता करने की ज़रूरत नहीं है; इसकी ज़िम्मेदारी यह है कि Android अपने-आप. Android को सिर्फ़ यह जानने की ज़रूरत है कि कौनसे AID हैंडल किए जा सकते हैं को HCE सेवाओं के ज़रिए हैंडल करना होगा और जिन्हें सुरक्षित एलिमेंट के ज़रिए मैनेज किया जा सकता है. रूटिंग टेबल अपने-आप कॉन्फ़िगर हो जाती है. ऐसा इस आधार पर होता है कि कौनसी सेवाएं इंस्टॉल की गई हैं और जिसे उपयोगकर्ता ने पसंदीदा के तौर पर कॉन्फ़िगर किया है.

नीचे दिए गए सेक्शन में बताया गया है कि कार्ड एम्युलेशन के लिए सुरक्षा तत्व.

सुरक्षा तत्व के लिए AID रजिस्ट्रेशन

कार्ड एम्युलेशन के लिए सुरक्षा तत्व का इस्तेमाल करने वाले ऐप्लिकेशन ऑफ़-होस्ट सेवा का इस्तेमाल करते हैं. ऐसी सेवा की घोषणा यह एचसीई सेवा के एलान की तरह होता है. अपवाद इस तरह के हैं अनुसरण करता है:

  • इंटेंट फ़िल्टर में इस्तेमाल की गई कार्रवाई इस पर सेट होनी चाहिए SERVICE_INTERFACE.
  • मेटा-डेटा नाम विशेषता SERVICE_META_DATA.
  • मेटा-डेटा एक्सएमएल फ़ाइल में, <offhost-apdu-service> रूट टैग का इस्तेमाल करना ज़रूरी है.

    <service android:name=".MyOffHostApduService" android:exported="true"
           android:permission="android.permission.BIND_NFC_SERVICE">
      <intent-filter>
          <action android:name="android.nfc.cardemulation.action.OFF_HOST_APDU_SERVICE"/>
      </intent-filter>
      <meta-data android:name="android.nfc.cardemulation.off_host_apdu_service"
                 android:resource="@xml/apduservice"/>
    </service>
    

यहां इससे जुड़ी apduservice.xml फ़ाइल का एक उदाहरण दिया गया है दो AID रजिस्टर करना:

<offhost-apdu-service xmlns:android="http://schemas.android.com/apk/res/android"
           android:description="@string/servicedesc">
    <aid-group android:description="@string/subscription" android:category="other">
        <aid-filter android:name="F0010203040506"/>
        <aid-filter android:name="F0394148148100"/>
    </aid-group>
</offhost-apdu-service>

android:requireDeviceUnlock एट्रिब्यूट, ऑफ़-होस्ट सेवाओं पर लागू नहीं होता, क्योंकि इस लेन-देन में होस्ट सीपीयू शामिल नहीं है. इसलिए, ये काम नहीं कर सकते डिवाइस के सुरक्षित होने पर, सुरक्षा एलिमेंट को लेन-देन करने से रोकता है लॉक.

ऑफ़-होस्ट सेवाओं के लिए, android:apduServiceBanner एट्रिब्यूट ज़रूरी है जो पेमेंट ऐप्लिकेशन हों और जिन्हें डिफ़ॉल्ट पेमेंट के तौर पर चुना जा सके का इस्तेमाल करें.

ऑफ़-होस्ट सेवा शुरू करना

Android कभी भी ऐसी सेवा को शुरू नहीं करता या उससे बाइंड नहीं करता जिसे "ऑफ़-होस्ट" कहा जाता है. क्योंकि वास्तविक लेन-देन सुरक्षा तत्व द्वारा निष्पादित किए जाते हैं, न कि Android सेवा पर लोड हो रहे थे. सेवा के एलान में, ऐप्लिकेशन को सिर्फ़ इन चीज़ों के लिए अनुमति दी जाती है सुरक्षा तत्व पर मौजूद AID रजिस्टर करें.

एचसीई और सुरक्षा

HCE आर्किटेक्चर सुरक्षा का एक अहम हिस्सा है. इसकी वजह यह है कि सेवा को इंटरनेट से सुरक्षित रखने के लिए, BIND_NFC_SERVICE सिस्टम की अनुमति का इस्तेमाल करते हैं, तो सिर्फ़ ओएस आपकी सेवा से बाइंड और कम्यूनिकेट कर सकता है. इससे यह पक्का होता है कि आपको जो भी APDU मिला है वह असल में वह APDU है जो ओएस, और यह कि जिस APDU को आप वापस भेजते हैं वह सिर्फ़ उसी ओएस का इस्तेमाल किया है, जो एपीडीयू को सीधे एनएफ़सी कंट्रोलर पर फ़ॉरवर्ड कर देता है.

बची हुई आखिरी चिंता यह है कि आपको अपने ऐप्लिकेशन से भेजा जाने वाला डेटा कहां मिलेगा एनएफ़सी रीडर में कनेक्ट कर दिया जाएगा. इसे जान-बूझकर एचसीई डिज़ाइन में जोड़ा गया है; यह काम करता है इस बात की परवाह नहीं करती कि डेटा कहां से आता है, यह बस यह सुनिश्चित करता है कि यह एनएफ़सी कंट्रोलर में ट्रांसफ़र किया गया और उसे एनएफ़सी रीडर में ले जाया गया.

यह सेटिंग उस डेटा को सुरक्षित तरीके से सेव करने और वापस पाने के लिए होती है जिसे आपको अपने एचसीई से भेजना है उदाहरण के लिए, हमारी सेवा के लिए Android ऐप्लिकेशन सैंडबॉक्स पर भरोसा किया जा सकता है, आपके ऐप्लिकेशन के डेटा को अन्य ऐप्लिकेशन से अलग करता है. Android के बारे में ज़्यादा जानकारी के लिए सुरक्षा, सुरक्षा से जुड़ी सलाह पढ़ें.

प्रोटोकॉल के पैरामीटर और जानकारी

यह सेक्शन उन डेवलपर के लिए है जो अपने हिसाब से प्रोटोकॉल के बारे में जानना चाहते हैं एंटी-कलीशन और ऐक्टिवेशन फ़ेज़ के दौरान, HCE डिवाइसों का इस्तेमाल करने वाले पैरामीटर एनएफ़सी प्रोटोकॉल का पालन करता है. इससे ऐसा रीडर इन्फ़्रास्ट्रक्चर बनाया जा सकता है जो Android HCE डिवाइसों के साथ काम करता है.

एनएफ़सी-ए (आईएसओ/आईईसी 14443 टाइप ए) प्रोटोकॉल एंटी-कलीज़न और ऐक्टिवेशन

एनएफ़सी-ए प्रोटोकॉल चालू करने के दौरान, कई फ़्रेम एक-दूसरे से बदले जाते हैं.

एक्सचेंज के पहले हिस्से में, HCE डिवाइस अपना यूआईडी दिखाता है; HCE डिवाइस का इस्तेमाल एक रैंडम यूआईडी के रूप में किया जाना चाहिए. इसका मतलब है कि हर टैप पर, यूआईडी जो लोगों को दिखाया जाता है वह रैंडम तरीके से जनरेट किया गया यूआईडी होता है. इस वजह से, एनएफ़सी रीडर को अलग-अलग तरह के एचसीई डिवाइसों के यूआईडी पर निर्भर नहीं होना चाहिए पहचान की पुष्टि करता है.

एनएफ़सी रीडर, SEL_REQ भेजकर एचसीई डिवाइस को चुन सकता है आदेश. HCE डिवाइस के SEL_RES रिस्पॉन्स में कम से कम छठा बिट होता है (0x20) सेट है, जिससे पता चलता है कि डिवाइस ISO-DEP पर काम करता है. ध्यान दें कि अन्य बिट में SEL_RES को भी सेट किया जा सकता है. इससे यह पता चलता है कि यह एनएफ़सी-डीईपी पर काम करता है (p2p) प्रोटोकॉल. अन्य बिट सेट हो सकते हैं, इसलिए पाठक HCE डिवाइसों को साफ़ तौर पर सिर्फ़ छठे बिट की जांच करनी चाहिए. उनकी तुलना नहीं की जानी चाहिए 0x20 की वैल्यू वाला पूरा SEL_RES.

आईएसओ-डीईपी को चालू करना

एनएफ़सी-ए प्रोटोकॉल चालू होने के बाद, एनएफ़सी रीडर आईएसओ-डीईपी को शुरू कर देता है प्रोटोकॉल चालू करना. यह आरएटीएस ('जवाब देने के लिए अनुरोध') भेजता है आदेश. एनएफ़सी कंट्रोलर, आरएटीएस रिस्पॉन्स यानी एटीएस जनरेट करता है; एटीएस ऐसा नहीं है इसे HCE सेवाओं से कॉन्फ़िगर किया जा सकता है. हालांकि, HCE सेवा लागू करने के लिए एनएफ़सी फ़ोरम की शर्तों को पूरा करना होगा एटीएस रिस्पॉन्स की ज़रूरतें पूरी करती हैं, ताकि एनएफ़सी का इस्तेमाल करने वाले लोग इन पैरामीटर पर भरोसा कर सकें को एनएफ़सी फ़ोरम की ज़रूरी शर्तों के मुताबिक सेट किया जा रहा हो.

नीचे दिए गए सेक्शन में, एटीएस की अलग-अलग बाइट के बारे में ज़्यादा जानकारी दी गई है किसी HCE डिवाइस पर एनएफ़सी कंट्रोलर से मिलने वाला रिस्पॉन्स:

  • टीएलएस: एटीएस जवाब की लंबाई. वर्णों की संख्या 20 से ज़्यादा नहीं होनी चाहिए बाइट हैं.
  • T0: बिट 5, 6, और 7 को सभी HCE डिवाइसों पर सेट करना ज़रूरी है. इससे टीए(1), टीबी(1) के बारे में जानकारी मिलती है और TC(1), ATS के जवाब में शामिल होते हैं. बिट 1 से 4 एफ़एससीआई को दिखाते हैं, ज़्यादा से ज़्यादा फ़्रेम साइज़ को कोडिंग कर सकता है. एचसीई डिवाइसों पर एफ़एससीआई की वैल्यू 0 बजे से 8 बजे के बीच.
  • T(A)1: रीडर और एम्युलेटर के बीच बिटरेट तय करता है. साथ ही, यह बताता है कि क्या वे एसिमेट्रिक. HCE डिवाइसों के लिए, बिटरेट की कोई शर्त या गारंटी नहीं है.
  • T(B)1: बिट 1 से 4, स्टार्ट-अप फ़्रेम गार्ड टाइम इंटीजर (एसएफ़जीआई) के बारे में बताते हैं. चालू है एचसीई डिवाइस, एसएफ़जीआई की लंबाई <= 8 घंटे होनी चाहिए. बिट 5 से 8, फ़्रेम वेटिंग को दिखाते हैं time Integer (FWI) और फ़्रेम वेटिंग टाइम (एफ़डब्ल्यूटी) को कोड करता है. एचसीई डिवाइसों पर, एफ़डब्ल्यूआई <= 8 घंटे होना चाहिए.
  • T(C)1: बिट 5 "ऐडवांस प्रोटोकॉल सुविधाओं" के लिए काम करता है. HCE डिवाइस "ऐडवांस प्रोटोकॉल की सुविधाओं" का इस्तेमाल किया जा सकता है या नहीं भी. बिट 2 समर्थन का संकेत देता है DID के लिए. एचसीई डिवाइस, डीआईडी के साथ काम कर भी सकते हैं और नहीं भी. बिट 1 इसके लिए समर्थन का संकेत देता है NAD. HCE डिवाइसों पर, NAD काम नहीं करना चाहिए और न ही बिट 1 को शून्य पर सेट करना चाहिए.
  • पुरानी बाइट: HCE डिवाइस 15 ऐतिहासिक बाइट तक लौटा सकते हैं. एनएफ़सी जो लोग HCE सेवाओं का इस्तेमाल करना चाहते हैं उन्हें यह अनुमान नहीं लगाना चाहिए कि पुरानी बाइट का कॉन्टेंट या उनकी मौजूदगी.

ध्यान दें कि कई HCE डिवाइस शायद प्रोटोकॉल की ज़रूरी शर्तों का पालन करते हों यह जानकारी, EMVCo में शामिल पेमेंट नेटवर्क ने अपने "टच किए बिना पैसे चुकाने की सुविधा" में दी है कम्यूनिकेशन प्रोटोकॉल" स्पेसिफ़िकेशन. खास तौर पर:

  • T0 में FSCI, 2 से 8 घंटे के बीच होना चाहिए.
  • T(A)1 को 0x80 पर सेट किया जाना चाहिए, जो बताता है कि सिर्फ़ 106 kbit/s बिटरेट है काम करता है और रीडर और एम्युलेटर के बीच एसिमेट्रिक बिटरेट नहीं हैं समर्थित हैं.
  • T(B)1 में FWI, 7 घंटे से कम होना चाहिए.

एपीडीयू डेटा एक्सचेंज

जैसा कि पहले बताया गया है, HCE सेवा लागू करने के लिए सिर्फ़ एक लॉजिकल चैनल का इस्तेमाल किया जा सकता है. अलग-अलग लॉजिकल चैनल पर ऐप्लिकेशन चुनने की सुविधा काम नहीं करती एक HCE डिवाइस है.