Поделиться через


Создание приложения смарт-карты NFC

Это важно

Этот раздел относится только к Windows 10 Mobile.

В этом разделе описывается, как использовать эмуляцию карточки узла (HCE) для непосредственного взаимодействия с картой nfc и разрешить клиентам получать доступ к своим службам по телефону (вместо физической карты) без оператора мобильной сети (MNO).

Что необходимо для разработки приложения HCE

Чтобы разработать приложение эмуляции карт на основе HCE, необходимо установить Microsoft Visual Studio 2015 (см. страницу скачивания Visual Studio) (в том числе средства разработчика Windows) и эмулятор Windows 10 Mobile.

Дополнительные сведения о настройке см. в разделе Тест с использованием эмулятора Майкрософт для Windows 10 Mobile.

При необходимости, если вы хотите протестировать с помощью реального устройства Windows 10 Mobile вместо включенного эмулятора Windows 10 Mobile, вам также потребуется следующее.

  • Устройство Windows 10 Mobile с поддержкой NFC HCE.
  • Терминал чтения, поддерживающий протоколы ISO/IEC 14443-4 и ISO/IEC 7816-4

Windows 10 Mobile реализует службу HCE, которая предоставляет следующие функции.

  • Приложения могут зарегистрировать идентификаторы applet (AID) для карточек, которые они хотели бы эмулировать.
  • Разрешение конфликтов и маршрутизация пары команд и ответов блока данных протокола прикладного уровня (APDU) в одно из зарегистрированных приложений на основе выбора внешнего считывателя карт и предпочтений пользователя.
  • Обработка событий и уведомлений для приложений в результате действий пользователей.

Windows 10 поддерживает эмуляцию смарт-карт, основанных на ISO-DEP (ISO-IEC 14443-4) и обменивается данными с использованием API, как определено в спецификации ISO-IEC 7816-4. Windows 10 поддерживает технологию ISO/IEC 14443-4 Type A для приложений HCE. Технологии типа B, типа F и не-ISO-DEP (например, MIFARE) направляются на сим-карту по умолчанию.

Только устройства Windows 10 Mobile включены с помощью функции эмуляции карт. Эмуляция карт на основе SIM и HCE недоступна в других версиях Windows 10.

На схеме ниже показана архитектура поддержки эмуляции карт на основе технологий HCE и SIM.

Архитектура для эмуляции HCE и SIM-карты

Выбор приложений и маршрутизация AID

Чтобы разработать приложение HCE, необходимо понять, как устройства Windows 10 Mobile направляют ИИД в определенное приложение, так как пользователи могут устанавливать несколько разных приложений HCE. Каждое приложение может зарегистрировать несколько карт на основе HCE и SIM-карт.

Когда пользователь нажимает устройство Windows 10 Mobile на терминал, данные автоматически направляются в соответствующее приложение, установленное на устройстве. Эта маршрутизация основана на идентификаторе applet (AID), который является идентификатором 5-16 байтов. Во время касания внешний терминал передаст команду SELECT APDU, чтобы указать идентификатор приложения, на который должны быть направлены все последующие команды APDU. Последующие команды SELECT снова изменят маршрутизацию. На основе идентификаторов AID, зарегистрированных приложениями, и настроек пользователей, трафик APDU направляется в конкретное приложение, которое отправляет ответный APDU. Помните, что терминал может потребовать взаимодействия с несколькими различными приложениями во время одного касания. Таким образом, вы должны убедиться, что фоновая задача вашего приложения завершается как можно быстрее, когда она деактивируется, чтобы освободить место для фоновой задачи другого приложения, которое реагирует на APDU. Далее в этом разделе мы обсудим фоновые задачи.

Приложения HCE должны регистрировать себя с определенными AID, которые они могут обрабатывать, чтобы они получали APDU для AID. Приложения объявляют ИИД с помощью групп AID. Группа AID концептуально эквивалентна отдельной физической карте. Например, одна кредитная карта объявлена с одной группой AID, а вторая кредитная карта из другого банка объявлена с другой, второй группой AID, даже если обе могут иметь один и тот же AID.

Разрешение конфликтов для групп помощи для оплаты

Когда приложение регистрирует физические карточки (группы идентификаторов приложений, AID), оно может объявить категорию группы AID как "Платеж" или "Другие". Хотя в любой момент времени может быть зарегистрировано несколько платёжных групп AID, в один момент времени может быть активирована только одна из этих групп для Tap and Pay, которая выбрана пользователем. Это поведение существует, так как пользователь ожидает, что он будет контролировать осознанный выбор одной кредитной или дебетовой карты, чтобы не оплатить другой непреднамеренной картой при поднесении устройства к терминалу.

Однако несколько групп AID, зарегистрированных как "Другие", могут быть включены одновременно без взаимодействия с пользователем. Такое поведение проявляется потому, что ожидается, что другие типы карт, такие как карты лояльности, купоны или проездные, будут просто работать без труда или необходимости что-то предпринимать при прикосновении телефона.

Все группы AID, зарегистрированные в качестве оплаты, отображаются в списке карт на странице параметров NFC, где пользователь может выбрать свою платежную карту по умолчанию. Если выбрана платёжная карта по умолчанию, приложение, зарегистрированное этой платежной группой AID, становится приложением оплаты по умолчанию. Приложения для оплаты по умолчанию могут включать или отключать любые группы AID без взаимодействия с пользователем. Если пользователь отклоняет запрос на оплату по умолчанию, текущее приложение оплаты по умолчанию (если таковое) продолжает оставаться как по умолчанию. На следующем снимках экрана показана страница параметров NFC.

снимок экрана страницы параметров NFC

Используя приведенный выше пример снимка экрана, если пользователь изменяет карту оплаты по умолчанию на другую карту, которая не зарегистрирована приложением HCE 1, система создает запрос на подтверждение согласия пользователя. Однако если пользователь изменяет карту оплаты по умолчанию на другую карту, зарегистрированную приложением HCE Application 1, система не создает запрос подтверждения для пользователя, так как "HCE Application1" уже является приложением оплаты по умолчанию.

Разрешение конфликтов для групп с проблемами неоплаты AID

Неплатежные карты, классифицированные как "Другие", не отображаются на странице параметров NFC.

Ваше приложение может создавать, регистрировать и активировать неплатежные группы AID тем же способом, что и платежные группы AID. Основное различие заключается в том, что для неплатёжных групп AID категория эмуляции установлена как "Другие" вместо "Платеж". После регистрации группы AID в системе необходимо включить группу AID для получения трафика NFC. При попытке включить неплатежную группу AID для получения трафика пользователю не запрашивается подтверждение, если только не существует конфликта с одним из AID, уже зарегистрированных в системе другим приложением. Если возникает конфликт, пользователю будет предоставлена информация о том, какая карта и связанное с ней приложение будут отключены, если пользователь решит включить недавно зарегистрированную группу AID.

Сосуществование с приложениями NFC на основе SIM

В Windows 10 Mobile система настраивает таблицу маршрутизации контроллера NFC, которая используется для принятия решений по маршрутизации на уровне контроллера. Таблица содержит сведения о маршрутизации для следующих элементов.

  • Отдельные маршруты AID.
  • Маршрут, основанный на протоколе (ISO-DEP).
  • Маршрутизация на основе технологий (NFC-A/B/F).

Когда внешний читатель отправляет команду SELECT AID, контроллер NFC сначала проверяет маршруты AID в таблице маршрутизации для сопоставления. Если совпадения нет, он будет использовать маршрут на основе протокола в качестве маршрута по умолчанию для трафика ISO-DEP (14443-4-A). Для любого другого трафика, отличного отISO-DEP, он будет использовать маршрутизацию на основе технологии.

Windows 10 Mobile предоставляет пункт меню "SIM-карта" на странице параметров NFC для продолжения использования устаревших приложений на основе SIM-карт Windows Phone 8.1, которые не регистрируют свои идентификаторы приложений (AID) в системе. Если пользователь выбирает SIM-карту в качестве карты оплаты по умолчанию, то маршрут ISO-DEP задан на UICC, для всех остальных выборов в раскрывающемся меню маршрут ISO-DEP направляется к узлу.

Маршрут ISO-DEP установлен на 'SIM-карта' для устройств с включенной SE SIM-картой при первой загрузке устройства с Windows 10 Mobile. Когда пользователь устанавливает приложение с поддержкой HCE и это приложение включает любые регистрации групп HCE AID, маршрут ISO-DEP будет указывать на хост. Чтобы определенные маршруты AID были заполнены в таблице маршрутизации контроллера, приложения, основанные на SIM, должны зарегистрировать AID в SIM.

Создание приложения на основе HCE

Приложение HCE состоит из двух частей.

  • Основное приложение переднего плана для взаимодействия с пользователем.
  • Фоновая задача, активируемая системой для обработки APDU для заданного AID.

Из-за очень жестких требований к производительности для загрузки фоновой задачи в ответ на касание NFC рекомендуется реализовать всю фоновую задачу в машинном коде C++/CX (включая все зависимости, ссылки или библиотеки, от которых вы зависите), а не на C# или управляемый код. Хотя C# и управляемый код обычно хорошо выполняются, есть издержки, такие как загрузка среды CLR .NET, которую можно избежать, написав его в C++/CX.

Создание и регистрация фоновой задачи

Необходимо создать фоновую задачу в приложении HCE для обработки и реагирования на APDU, направляемые системой. При первом запуске приложения на переднем плане регистрируется фоновая задача HCE, реализующая интерфейс IBackgroundTaskRegistration, как показано в следующем коде.

var taskBuilder = new BackgroundTaskBuilder();
taskBuilder.Name = bgTaskName;
taskBuilder.TaskEntryPoint = taskEntryPoint;
taskBuilder.SetTrigger(new SmartCardTrigger(SmartCardTriggerType.EmulatorHostApplicationActivated));
bgTask = taskBuilder.Register();

Обратите внимание, что для триггера задачи задано значение SmartCardTriggerType. EmulatorHostApplicationActivated. Это означает, что всякий раз, когда ОС получает команду SELECT AID (APDU), которая адресуется вашему приложению, запускается ваша фоновая задача.

Получение и обработка APDU сообщений

Когда APDU предназначен для вашего приложения, система запустит фоновую задачу. Фоновая задача получает APDU, передаваемую через свойство SmartCardEmulatorApduReceivedEventArgs объекта CommandApdu и реагирует на APDU с помощью метода TryRespondAsync одного объекта. По соображениям производительности рекомендуется оставить фоновую задачу для легких операций. Например, немедленно отвечайте на APDUs и выйдите из фоновой задачи по завершении обработки. Из-за характера транзакций NFC пользователи, как правило, удерживают свое устройство возле считывателя лишь на очень короткое время. Фоновая задача будет продолжать получать трафик от ридера до тех пор, пока соединение не будет отключено, после чего вы получите объект SmartCardEmulatorConnectionDeactivatedEventArgs. Подключение можно отключить из-за следующих причин, как указано в свойстве SmartCardEmulatorConnectionDeactivatedEventArgs.Reason.

  • Если подключение деактивировано со значением ConnectionLost, это означает, что пользователь убрал устройство от считывателя. Если вашему приложению требуется, чтобы пользователь нажимал на терминал дольше, вам может потребоваться предложить им обратную связь. Вы должны быстро завершить фоновую задачу (освободив отсрочку), чтобы убедиться, что при повторном касании действие не будет задержано из-за ожидания завершения предыдущей фоновой задачи.
  • Если подключение деактивировано с помощью ConnectionRedirected, это означает, что терминал отправил новую команду SELECT AID APDU, направленную на другой AID. В этом случае приложение должно немедленно выйти из фоновой задачи (завершив отсрочку), чтобы разрешить выполнение другой фоновой задачи.

Фоновая задача также должна зарегистрировать событие "Canceled" в интерфейсе IBackgroundTaskInstance, и аналогичным образом быстро завершить свою работу (завершив отсрочку), поскольку это событие инициируется системой, когда задача завершена системой. Ниже приведен код, демонстрирующий фоновую задачу приложения HCE.

void BgTask::Run(
    IBackgroundTaskInstance^ taskInstance)
{
    m_triggerDetails = static_cast<SmartCardTriggerDetails^>(taskInstance->TriggerDetails);
    if (m_triggerDetails == nullptr)
    {
        // May be not a smart card event that triggered us
        return;
    }

    m_emulator = m_triggerDetails->Emulator;
    m_taskInstance = taskInstance;

    switch (m_triggerDetails->TriggerType)
    {
    case SmartCardTriggerType::EmulatorHostApplicationActivated:
        HandleHceActivation();
        break;

    case SmartCardTriggerType::EmulatorAppletIdGroupRegistrationChanged:
        HandleRegistrationChange();
        break;

    default:
        break;
    }
}

void BgTask::HandleHceActivation()
{
 try
 {
        auto lock = m_srwLock.LockShared();
        // Take a deferral to keep this background task alive even after this "Run" method returns
        // You must complete this deferral immediately after you have done processing the current transaction
        m_deferral = m_taskInstance->GetDeferral();

        DebugLog(L"*** HCE Activation Background Task Started ***");

        // Set up a handler for if the background task is cancelled, we must immediately complete our deferral
        m_taskInstance->Canceled += ref new Windows::ApplicationModel::Background::BackgroundTaskCanceledEventHandler(
            [this](
            IBackgroundTaskInstance^ sender,
            BackgroundTaskCancellationReason reason)
        {
            DebugLog(L"Cancelled");
            DebugLog(reason.ToString()->Data());
            EndTask();
        });

        if (Windows::Phone::System::SystemProtection::ScreenLocked)
        {
            auto denyIfLocked = Windows::Storage::ApplicationData::Current->RoamingSettings->Values->Lookup("DenyIfPhoneLocked");
            if (denyIfLocked != nullptr && (bool)denyIfLocked == true)
            {
                // The phone is locked, and our current user setting is to deny transactions while locked so let the user know
                // Denied
                DoLaunch(Denied, L"Phone was locked at the time of tap");

                // We still need to respond to APDUs in a timely manner, even though we will just return failure
                m_fDenyTransactions = true;
            }
        }
        else
        {
            m_fDenyTransactions = false;
        }

        m_emulator->ApduReceived += ref new TypedEventHandler<SmartCardEmulator^, SmartCardEmulatorApduReceivedEventArgs^>(
            this, &BgTask::ApduReceived);

        m_emulator->ConnectionDeactivated += ref new TypedEventHandler<SmartCardEmulator^, SmartCardEmulatorConnectionDeactivatedEventArgs^>(
                [this](
                SmartCardEmulator^ emulator,
                SmartCardEmulatorConnectionDeactivatedEventArgs^ eventArgs)
            {
                DebugLog(L"Connection deactivated");
                EndTask();
            });

  m_emulator->Start();
        DebugLog(L"Emulator started");
 }
 catch (Exception^ e)
 {
        DebugLog(("Exception in Run: " + e->ToString())->Data());
        EndTask();
 }
}

Создание и регистрация групп AID

Во время первого запуска приложения при подготовке карточки вы создадите и зарегистрируете группы AID в системе. Система определяет приложение, с которым внешний считыватель хотел бы взаимодействовать, и направляет APDU соответствующим образом на основе зарегистрированных идентификаторов приложений и пользовательских настроек.

Большинство карт оплаты регистрируются для одного и того же идентификатора приложения (AID), среды системы ближнего поля (PPSE), а также дополнительных идентификаторов приложения (AID), специфичных для сети карт оплаты. Каждая группа AID представляет собой карту, и когда пользователь включает карту, все AID в группе включаются. Аналогичным образом, когда пользователь деактивирует карту, все идентификаторы AID в группе отключены.

Чтобы зарегистрировать группу AID, необходимо создать объект SmartCardAppletIdGroup и настроить его свойства таким образом, чтобы отразить, что это платежная карта на основе HCE. Отображаемое имя должно быть описательным для пользователя, так как оно будет отображаться в меню параметров NFC, а также в запросах пользователей. Для карт оплаты HCE свойство SmartCardEmulationCategory должно иметь значение Оплата, а свойство SmartCardEmulationType должно иметь значение Хост.

public static byte[] AID_PPSE =
        {
            // File name "2PAY.SYS.DDF01" (14 bytes)
            (byte)'2', (byte)'P', (byte)'A', (byte)'Y',
            (byte)'.', (byte)'S', (byte)'Y', (byte)'S',
            (byte)'.', (byte)'D', (byte)'D', (byte)'F', (byte)'0', (byte)'1'
        };

var appletIdGroup = new SmartCardAppletIdGroup(
                        "Example DisplayName",
                                new List<IBuffer> {AID_PPSE.AsBuffer()},
                                SmartCardEmulationCategory.Payment,
                                SmartCardEmulationType.Host);

Для карт HCE без оплаты свойство SmartCardEmulationCategory должно иметь значение Другие, а свойство SmartCardEmulationType должно иметь значение Host.

public static byte[] AID_OTHER =
        {
            (byte)'1', (byte)'2', (byte)'3', (byte)'4',
            (byte)'5', (byte)'6', (byte)'7', (byte)'8',
            (byte)'O', (byte)'T', (byte)'H', (byte)'E', (byte)'R'
        };

var appletIdGroup = new SmartCardAppletIdGroup(
                        "Example DisplayName",
                                new List<IBuffer> {AID_OTHER.AsBuffer()},
                                SmartCardEmulationCategory.Other,
                                SmartCardEmulationType.Host);

Вы можете включить до 9 АИД (длиной 5–16 байт каждый) в каждую группу АИД.

Используйте метод RegisterAppletIdGroupAsync, чтобы зарегистрировать группу AID в системе, которая вернет объект SmartCardAppletIdGroupRegistration. По умолчанию свойство ActivationPolicy объекта регистрации установлено в Отключено. Это означает, что даже если ваши идентификаторы ИИ зарегистрированы в системе, они еще не включены и не будут получать трафик.

reg = await SmartCardEmulator.RegisterAppletIdGroupAsync(appletIdGroup);

Вы можете включить зарегистрированные карточки (группы AID) с помощью метода RequestActivationPolicyChangeAsync классаSmartCardAppletIdGroupRegistration, как показано ниже. Поскольку в системе одновременно может быть активирована только одна платежная карта, установка ActivationPolicy группы идентификаторов приложения для оплаты на Включено эквивалентна установке карты оплаты по умолчанию. Пользователю будет предложено разрешить эту карту как платежную карту по умолчанию, независимо от того, выбрана ли платежная карта по умолчанию. Данное утверждение не соответствует действительности, если ваше приложение уже является приложением оплаты по умолчанию и просто меняется между своими собственными группами AID. Вы можете зарегистрировать до 10 групп AID на каждое приложение.

reg.RequestActivationPolicyChangeAsync(AppletIdGroupActivationPolicy.Enabled);

Вы можете запросить зарегистрированные группы AID вашего приложения в ОС и проверить их политику активации с помощью метода GetAppletIdGroupRegistrationsAsync.

Когда вы изменяете политику активации платежной карты с отключено на включено, пользователям будет выдано уведомление, только если ваше приложение еще не является приложением оплаты по умолчанию. Пользователи будут уведомлены только при изменении политики активации неплатежной карты с отключено на включено, если существует конфликт AID.

var registrations = await SmartCardEmulator.GetAppletIdGroupRegistrationsAsync();
    foreach (var registration in registrations)
    {
registration.RequestActivationPolicyChangeAsync (AppletIdGroupActivationPolicy.Enabled);
    }

Уведомление о событии при изменении политики активации

В вашей фоновой задаче вы можете зарегистрироваться для получения уведомлений о изменении политики активации одной из регистраций группы AID вне вашего приложения. Например, пользователь может изменить приложение оплаты по умолчанию с помощью меню параметров NFC из одной из карт на другую карту, размещенную другим приложением. Если ваше приложение должно знать об этом изменении для внутренней настройки, например об обновлении динамических плиток, вы можете получать уведомления о событиях для этого изменения и принимать меры в приложении соответствующим образом.

var taskBuilder = new BackgroundTaskBuilder();
taskBuilder.Name = bgTaskName;
taskBuilder.TaskEntryPoint = taskEntryPoint;
taskBuilder.SetTrigger(new SmartCardTrigger(SmartCardTriggerType.EmulatorAppletIdGroupRegistrationChanged));
bgTask = taskBuilder.Register();

Поведение замещения переднего плана

Вы можете изменить ActivationPolicy любой из регистраций группы AID на ForegroundOverride, пока ваше приложение находится на переднем плане, не запрашивая пользователя. Когда пользователь нажимает свое устройство на терминал, пока ваше приложение находится на переднем плане, трафик направляется в приложение, даже если ни одна из ваших карт оплаты не была выбрана пользователем в качестве карты оплаты по умолчанию. При изменении политики активации карты на ForegroundOverrideэто изменение будет временным, пока приложение не покидает передний план и не изменит текущую платежную карту по умолчанию, установленную пользователем. Вы можете изменить ActivationPolicy банковских или небанковских карт из активного приложения следующим образом. Обратите внимание, что метод RequestActivationPolicyChangeAsync можно вызывать только из приложения переднего плана и не может вызываться из фоновой задачи.

reg.RequestActivationPolicyChangeAsync(AppletIdGroupActivationPolicy.ForegroundOverride);

Кроме того, можно зарегистрировать группу AID, состоящую из одного AID нулевой длины, что приведет к тому, что система будет направлять все APDU независимо от AID и включая любые командные APDU, отправленные перед получением команды SELECT AID. Однако такая группа AID работает только в то время как приложение находится на переднем плане, так как оно может быть установлено только для ForegroundOverride и не может быть постоянно включено. Кроме того, этот механизм работает как для хоста, так и для UICC значений перечисления SmartCardEmulationType, чтобы направлять весь трафик либо в фоновую задачу HCE, либо на SIM-карту.

public static byte[] AID_Foreground =
        {};

var appletIdGroup = new SmartCardAppletIdGroup(
                        "Example DisplayName",
                                new List<IBuffer> {AID_Foreground.AsBuffer()},
                                SmartCardEmulationCategory.Other,
                                SmartCardEmulationType.Host);
reg = await SmartCardEmulator.RegisterAppletIdGroupAsync(appletIdGroup);
reg.RequestActivationPolicyChangeAsync(AppletIdGroupActivationPolicy.ForegroundOverride);

Проверка поддержки NFC и HCE

Приложение должно проверить, имеет ли устройство оборудование NFC, поддерживает ли функция эмуляции карт, и поддерживает ли эмуляцию карт в режиме хоста, прежде чем предлагать такие функции пользователю.

Функция эмуляции смарт-карт NFC включена только в Windows 10 Mobile, поэтому при попытке использовать API эмулятора смарт-карт в других версиях Windows 10 возникают ошибки. Вы можете проверить поддержку API смарт-карт в следующем фрагменте кода.

Windows.Foundation.Metadata.ApiInformation.IsTypePresent("Windows.Devices.SmartCards.SmartCardEmulator");

Кроме того, вы можете проверить, поддерживает ли устройство аппаратное обеспечение NFC, способное выполнять эмуляцию карты, проверив, возвращает ли метод SmartCardEmulator.GetDefaultAsync значение null. Если это так, на устройстве не поддерживается эмуляция карты NFC.

var smartcardemulator = await SmartCardEmulator.GetDefaultAsync();<

Поддержка маршрутизации UICC на основе HCE и AID доступна только на недавно запущенных устройствах, таких как Lumia 730, 830, 640 и 640 XL. Все новые устройства с поддержкой NFC под управлением Windows 10 Mobile и после этого должны поддерживать HCE. Приложение может проверить поддержку HCE следующим образом.

Smartcardemulator.IsHostCardEmulationSupported();

Блокировка экрана и режим выключения экрана

Windows 10 Mobile располагает настройками эмуляции карт на уровне устройства, которые задаются мобильным оператором или производителем устройства. По умолчанию переключатель "Коснитесь для оплаты" отключен, а для параметра "Политика включения на уровне устройства" задано значение Always, если только MO или OEM не перезаписывает эти значения.

Ваше приложение может запрашивать значение EnablementPolicy на уровне устройства и предпринимать действия в каждом конкретном случае в зависимости от желаемого поведения вашего приложения в каждом состоянии.

SmartCardEmulator emulator = await SmartCardEmulator.GetDefaultAsync();

switch (emulator.EnablementPolicy)
{
case Never:
// you can take the user to the NFC settings to turn "tap and pay" on
await Windows.System.Launcher.LaunchUriAsync(new Uri("ms-settings-nfctransactions:"));
break;

 case Always:
return "Card emulation always on";

 case ScreenOn:
 return "Card emulation on only when screen is on";

 case ScreenUnlocked:
 return "Card emulation on only when screen unlocked";
}

Фоновая задача вашего приложения будет запущена, даже если телефон заблокирован и/или экран выключен, только если внешний считыватель выбирает AID, который соотносится с вашим приложением. Вы можете ответить на команды от считывателя в фоновой задаче, но если вам нужны какие-либо входные данные от пользователя или если вы хотите отобразить сообщение пользователю, вы можете запустить ваше приложение в переднем плане с некоторыми аргументами. Фоновая задача может запустить приложение переднего плана с помощью следующего поведения.

  • На экране блокировки устройства (пользователь увидит ваше приложение на переднем плане только после разблокировки устройства)
  • Над экраном блокировки устройства (после закрытия приложения устройство по-прежнему находится в заблокированном состоянии)
        if (Windows::Phone::System::SystemProtection::ScreenLocked)
        {
            // Launch above the lock with some arguments
            var result = await eventDetails.TryLaunchSelfAsync("app-specific arguments", SmartCardLaunchBehavior.AboveLock);
        }

Регистрация AID и другие обновления для приложений на основе SIM-карт

Приложения эмуляции карт, использующие SIM-карту в качестве безопасного элемента, могут зарегистрироваться в службе Windows, чтобы объявить идентификаторы приложений, поддерживаемые на SIM-карте. Эта регистрация очень похожа на регистрацию приложения на основе HCE. Единственное различие заключается в том, что SmartCardEmulationTypeдолжен быть установлен на Uicc для приложений на основе SIM. В результате регистрации карты оплаты отображаемое имя карты также будет заполнено в меню параметров NFC.

var appletIdGroup = new SmartCardAppletIdGroup(
                        "Example DisplayName",
                                new List<IBuffer> {AID_PPSE.AsBuffer()},
                                SmartCardEmulationCategory.Payment,
                                SmartCardEmulationType.Uicc);