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


Использование уведомлений WNS для реализации возобновления работы между устройствами (XDR)

В этом пошаговом руководстве для первых и третьих сторон представлен подробный обзор интеграции непрерывности приложений (резюме) с необработанными уведомлениями службы push-уведомлений Windows (WNS). Он включает предварительные требования, ссылки на соответствующую общедоступную документацию и фрагменты кода для отправки запросов POST в URI канала.

Подготовка к возобновлению работы в Windows

Резюме — это функция ограниченного доступа (LAF). Чтобы получить доступ к этой функции, необходимо получить утверждение от Корпорации Майкрософт, чтобы включить приложение в Windows.

Чтобы запросить доступ, отправьте сообщение электронной почты wincrossdeviceapi@microsoft.com со следующими сведениями:

  • Состояние регистрации WNS вашего приложения и укажите "SID пакета" вашего приложения.
  • Описание пользовательского интерфейса.
  • Снимок экрана: приложение, в котором пользователь выполняет действие, которое можно возобновить на компьютере с Windows.

Если корпорация Майкрософт утверждает запрос, вы получите инструкции по разблокировке функции. Утверждения основаны на ваших сообщениях.

Предпосылки

Прежде чем продолжить интеграцию, убедитесь, что выполняются следующие задачи:

Инструкции по реализации

Ниже описан процесс интеграции непрерывности приложений с помощью необработанных уведомлений WNS.

Шаг 1. Настройка URI канала

Настройте URI канала из приложения Windows и отправьте его на сервер приложений: убедитесь, что приложение может запрашивать и хранить URI канала для уведомлений. Дополнительные сведения см. в статье "Как запрашивать, создавать и сохранять канал уведомлений".

Шаг 2. Запуск сценария возобновления

В вашем мобильном приложении вызовите API необходимой службы приложений, чтобы инициировать запрос на возобновление на базе WNS.

Шаг 3. Настройка HTTP-запроса

Когда сервер приложений получает запрос API от мобильного клиента, он подготавливает запрос POST к URI канала WNS. Запрос должен содержать необходимые заголовки, такие как авторизация, тип контента и X-WNS-Type. Чтобы добавить новый заголовок, добавьте его в конфигурацию заголовка запроса.

Шаг 3.1. Пример отправки POST-запроса на резюме

В следующих фрагментах кода показано, как отправить новое уведомление WNS с заголовком резюме с помощью Python и JavaScript.

В следующем фрагменте кода Python показано, как отправить необработанное уведомление WNS с необходимыми заголовками для непрерывности приложений:

import requests
# Define the channel URI
channel_uri = "[URL]"
# Define the notification payload
payload = """
Sample Notification
This is a sample message
"""
# Define the headers
headers = {
    "Content-Type": "application/octet-stream",
    "X-WNS-Type": "wns/raw",
    "Authorization": "Bearer YOUR_ACCESS_TOKEN",
    "X-WNS-RawNotificationType": "wns/raw/resume",
    "X-WNS-ResumeMetadata": {"title":"Continue call from…","expiry":"300", "type":"1"},
}
# Send the POST request
response = requests.post(channel_uri, data=payload, headers=headers)
# Print the response status
print(f"Response Status: {response.status_code}")
print(f"Response Body: {response.text}")

В следующем фрагменте кода JavaScript показано, как отправлять необработанное уведомление WNS с необходимыми заголовками для непрерывности приложений:

const axios = require('axios');

// Define the channel URI
const channelUri = "[URL]";

// Define the notification payload
const payload = `Sample Notification
This is a sample message`;

// Define the headers
const headers = {
  "Content-Type": "application/octet-stream",
  "X-WNS-Type": "wns/raw",
  "Authorization": "Bearer YOUR_ACCESS_TOKEN",
  "X-WNS-RawNotificationType": "wns/raw/resume",
  "X-WNS-ResumeMetadata": JSON.stringify({
    title: "Continue call from…",
    expiry: "300",
    type: "1"
  })
};

// Send the POST request
axios.post(channelUri, payload, { headers })
  .then(response => {
    console.log(`Response Status: ${response.status}`);
    console.log(`Response Body: ${response.data}`);
  })
  .catch(error => {
    console.error(`Error Status: ${error.response?.status}`);
    console.error(`Error Body: ${error.response?.data}`);
  });

Заголовок X-WNS-RawNotificationType указывает тип отправленного необработанного уведомления. Обычно не требуется включать этот заголовок, но он помогает классифицировать уведомление для различных целей, например "Возобновить". Возможные значения для этого заголовка могут включать такие типы, как wns/raw/resume, который указывает на возобновление работы приложения из Windows.

Заголовок X-WNS-ResumeMetadata предоставляет метаданные об уведомлении о возобновлении, которое вы отправляете. Хотя это не является строго обязательным, оно улучшает уведомление путем добавления таких сведений, как название или время окончания срока действия. Вы передаете метаданные как объект JSON/Dictionary (любой другой тип вызывает исключение проверки) и может включать такие поля, как:

  • title: описательное название уведомления (например, "Продолжить вызов из...").
  • срок действия: срок действия уведомления в секундах (например, "300" в течение 5 минут).
  • тип уведомления — 1 для нового запроса резюме, 2 для удаления (при отсутствии действия).

В следующем фрагменте кода JavaScript показано, как отправить необработанное уведомление WNS с необходимыми заголовками для обновления уведомления о возобновлении:

const axios = require('axios');

// Define the channel URI
const channelUri = "[URL]";

// Define the notification payload
const payload = `Sample Notification
This is a sample message`;

// Define the headers
const headers = {
  "Content-Type": "application/octet-stream",
  "X-WNS-Type": "wns/raw",
  "Authorization": "Bearer YOUR_ACCESS_TOKEN",
  "X-WNS-RawNotificationType": "wns/raw/resume",
  "X-WNS-ResumeMetadata": JSON.stringify({
    title: "Continue call from…",
    expiry: "300",
    type: "2"  // 2-represents update type.
  })
};

// Send the POST request
axios.post(channelUri, payload, { headers })
  .then(response => {
    console.log(`Response Status: ${response.status}`);
    console.log(`Response Body: ${response.data}`);
  })
  .catch(error => {
    console.error(`Error Status: ${error.response?.status}`);
    console.error(`Error Body: ${error.response?.data}`);
  });

В следующем фрагменте кода JavaScript показано, как отправить необработанное уведомление WNS с необходимыми заголовками для удаления уведомления о возобновлении:

const axios = require('axios');

// Define the channel URI
const channelUri = "[URL]";

// Define the notification payload
const payload = `Sample Notification
This is a sample message`;

// Define the headers
const headers = {
  "Content-Type": "application/octet-stream",
  "X-WNS-Type": "wns/raw",
  "Authorization": "Bearer YOUR_ACCESS_TOKEN",
  "X-WNS-RawNotificationType": "wns/raw/resume",
  "X-WNS-ResumeMetadata": JSON.stringify({
    title: "Continue call from…",
    expiry: "300",
    type: "3"  // 3-represents delete type.
  })
};

// Send the POST request
axios.post(channelUri, payload, { headers })
  .then(response => {
    console.log(`Response Status: ${response.status}`);
    console.log(`Response Body: ${response.data}`);
  })
  .catch(error => {
    console.error(`Error Status: ${error.response?.status}`);
    console.error(`Error Body: ${error.response?.data}`);
  });

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

Шаг 4. Проверка реализации

Убедитесь, что приложение успешно регистрирует уведомления и что заголовки резюме включены в запрос POST. Для проверки HTTP-запроса и ответа можно использовать такие средства, как vscode REST Client, Postman или Fiddler.

Ниже приведен пример отправки запроса с помощью расширения REST Клиента Visual Studio Code. Для обеспечения непрерывности приложений требуются заголовки X-WNS-RawNotificationType и X-WNS-ResumeMetadata.

POST {{channel_uri}}
Content-Type: application/octet-stream
X-WNS-Type: wns/raw
X-WNS-RequestForStatus: true
X-WNS-RawNotificationType: wns/raw/resume
X-WNS-ResumeMetadata: {"title": "Continue call from...", "expiry": "300", "type": "1"}
Authorization: Bearer {{bearer}}

[{"hello"}]

Ответ от клиента REST VS Code отображается в том же формате, что и существующие ответы на уведомления. Дополнительные сведения о кодах состояния см. по ссылке: отправка собственного уведомления служб push-уведомлений Windows (WNS).

Conclusion

Выполнив действия, описанные в этом руководстве, первые и сторонние стороны могут успешно добавлять пользовательские заголовки в уведомления WNS. Убедитесь, что вы выполнили все предварительные требования и тщательно протестируете, чтобы гарантировать простую интеграцию.

Для любых запросов или помощи в отношении реализации обратитесь к нашей команде по следующему адресу:

Отправить по электронной почте: wincrossdeviceapi@microsoft.com

Мы здесь помогаем обеспечить гладкий процесс интеграции.