Я пытаюсь добавить уведомления в свое мобильное приложение Azure (мобильное приложение служб приложений Azure), и мне не удается заставить их работать с iOS. Я успешно заставил их работать на Android.
Я выполнил инструкции в Интернете, чтобы настроить сертификаты Apple и профили обеспечения:
https://adrianhall.github.io/develop-mobile-apps-with-csharp-and-azure/chapter5/ios/
Приложение iOS регистрируется в APNS, и получен токен устройства. Затем я удаляю символы «‹ »и«> »и пробелы и отправляю регистрацию в центры уведомлений.
var templates = new JObject
{
["genericMessage"] = new JObject
{
{"body", "{\"aps\":{\"alert\":\"$(message)\"}}"}
}
};
var push = m_MobileServiceClient.GetPush();
await push.RegisterAsync(token, templates);
Когда я отправляю первый запрос на push-уведомление ...
var notification = new Dictionary<string, string> { { "message", "Test notification message" } };
await m_Hub.SendTemplateNotificationAsync(notification);
... регистрация удаляется из Центров уведомлений.
Я повысил уровень цен в Центре уведомлений Azure до «Стандартный» и использовал его для поиска отслеживания, хранящегося в учетной записи хранения, и он показывает «InvalidToken» как ошибку от APNS.
Что я сделал / проверил:
- Центр уведомлений в качестве учетных данных APNS, установленных с помощью сертификата разработки (создан и экспортирован с портала разработчика Apple для идентификатора приложения без подстановочного знака, для которого включено push-уведомление) и для среды песочницы.
- Проект приложения iOS настроен на использование идентификатора разработчика и профиля подготовки, с которым связан идентификатор приложения:
Я добавил следующее в Info.plist (не все инструкции включали это, но в других статьях предполагалось, что это необходимо)
<key>aps-environment</key> <string>development</string>
Вещи, которые я пытался исправить
- Пробовал заглавные буквы DeviceToken
- Пробовал НЕ удалять пробелы и / или символы '‹' '>' (при этом возникла ошибка InvalidTokenSize, из-за которой я решил, что удаление символов является обязательным)
- Пытался изменить концентратор уведомлений для использования сертификата производственного push-уведомления (удаленный концентратор между сменой сертификата)
Тем не менее, я продолжаю получать InvalidToken.
Есть ли у кого-нибудь идеи, что я делаю не так?
ИЗМЕНИТЬ
DeviceToken для APNS (после удаления пробелов и символов '‹' '>') имеет длину 64 символа. Я проверил, и это то, что я получаю в клиенте и отправляю в центр уведомлений. Но когда я смотрю в центр уведомлений, я получаю DeviceToken длиной 128 символов.
Похоже, это причина проблемы. Это мои журналы на мобильной стороне (я выводю в окно вывода)
RegisteredForRemoteNotifications срабатывает ‹7012d5d7 66e3d765 de017f65 a58e0dfb 461a6b77 9c57b6c6 60040f64 95ea20ab>
Регистрация с NH: 7012D5D766E3D765DE017F65A58E0DFB461A6B779C57B6C660040F6495EA20AB
но это то, что затем появляется в Регистрации устройства (вызов https: // {my_namespace} .servicebus.windows.net / {my_hub} / installation / {installationid}? api-version = 2015-01
{
"installationId": "{installationId}",
"pushChannel": "37303132443544373636453344373635444530313746363541353845304446423436314136423737394335374236433636303034304636343935454132304142",
"pushChannelExpired": false,
"platform": "apns",
"expirationTime": "9999-12-31T23:59:59.9999999Z",
"tags": [
...
],
"templates": {
"genericMessage": {
"body": "{\"aps\":{\"alert\":\"$(message)\"}}",
"tags": [
"genericMessage"
]
}
}
}
Мне удалось добиться успешной работы Уведомления, используя REST API, чтобы ПОСТАВИТЬ установку, чтобы DeviceToken был указан в журналах на стороне клиента.
Если я перезапущу приложение, значение изменится обратно при повторной регистрации в Центре уведомлений, поэтому где-то после вызова NotificationHubClient значение изменяется!
ИЗМЕНИТЬ 2
Я записал трафик httpclient в окно вывода, и оказалось, что это проблема на стороне клиента, поскольку DeviceToken неверен при вызове сервера:
Method: PUT,
RequestUri: 'https://{my_namespace}/push/installations/5ed26cac-2735-4d58-91f4-2220569a3f0c',
Version: 1.1,
Content: System.Net.Http.StringContent,
Headers:
{
X-ZUMO-INSTALLATION-ID: 5ed26cac-2735-4d58-91f4-2220569a3f0c
X-ZUMO-AUTH: ...
Accept: application/json
User-Agent: ZUMO/3.1 (lang=Managed; os=iOS; os_version=10.3.2; arch=MacOSX; version=3.1.50105.0)
X-ZUMO-VERSION: ZUMO/3.1 (lang=Managed; os=iOS; os_version=10.3.2; arch=MacOSX; version=3.1.50105.0)
ZUMO-API-VERSION: 2.0.0
Content-Type: application/json; charset=utf-8
}
{
"pushChannel": "37303132443544373636453344373635444530313746363541353845304446423436314136423737394335374236433636303034304636343935454132304142",
"platform": "apns",
"templates": {
"genericMessage": {
"body": "{\"aps\":{\"alert\":\"$(message)\"}}"
}
}
}