Niko
Niko

Reputation: 8153

Application not visible in Tap and Pay

What is the key thing to adjust in NFC HCE application to get it visible under settings NFC Tap and Pay

Following code returns true for the app, so it's capable of payment:

boolean isDefault = CardEmulation
                .getInstance(NfcAdapter.getDefaultAdapter(this))
                .isDefaultServiceForCategory(
                        new ComponentName(this, MyPaymentService.class),
                        CardEmulation.CATEGORY_PAYMENT);

Service declaration in manifest:

<service
    android:name="my.package.MyPaymentService"
    android:exported="true"
    android:permission="android.permission.BIND_NFC_SERVICE" >
    <intent-filter>
        <action android:name="android.nfc.cardemulation.action.HOST_APDU_SERVICE" />

        <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>

    <meta-data
        android:name="android.nfc.cardemulation.host_apdu_service"
        android:resource="@xml/apduservice" />
</service>

apduservice:

<host-apdu-service xmlns:android="http://schemas.android.com/apk/res/android"
    android:requireDeviceUnlock="true" >

    <aid-group
        android:category="payment"
        android:description="@string/paymentGroup" >
        <aid-filter
            android:name="325041592E5359532E4444463031"
            android:description="@string/ppse" />
        <aid-filter
            android:name="A0000000041010"
            android:description="@string/mastercard" />
        <aid-filter
            android:name="A0000000031010"
            android:description="@string/visa" />
        <aid-filter
            android:name="A000000003101001"
            android:description="@string/visa" />
        <aid-filter
            android:name="A0000002771010"
            android:description="@string/interac" />
    </aid-group>

</host-apdu-service>

I'm missing something but not sure what and where to put it.

Thanks.

Upvotes: 6

Views: 4047

Answers (3)

Phileo99
Phileo99

Reputation: 5659

Using this Google sample project, I tried to add the suggestions by @Michael Roland (eg. adding android:apduServiceBanner, category and description).

As a result, the graphic shows up in the Tap and Pay Settings screen, but not the text. I logged an issue with the sample project, but do not expect any resolution.

The current workaround is to create a apduServiceBanner drawable that has the text built into the drawable.

Upvotes: 2

10five10
10five10

Reputation: 31

Additional information - if you forget the following two lines in the manifest, the application will also not show up in "tap and pay" menu.

<uses-feature android:name="android.hardware.nfc.hce" android:required="true" />
<uses-permission android:name="android.permission.NFC" />

Upvotes: 3

Michael Roland
Michael Roland

Reputation: 40849

In order to be shown in the tap-and-pay menu, a HCE app must provide a banner graphic. You would include the graphic into the host-apdu-service XML using the android:apduServiceBanner attribute:

<host-apdu-service xmlns:android="http://schemas.android.com/apk/res/android"
    android:requireDeviceUnlock="true"
    android:apduServiceBanner="@drawable/servicebanner">

    <aid-group android:category="payment"
               android:description="@string/paymentGroup" >
        <aid-filter ... />
    </aid-group>
</host-apdu-service>

The service banner should be a graphic file (e.g. a .png file) with dimensions of 260 x 96 pixels.

Upvotes: 10

Related Questions