Xamarin iOS В Azure возможно ли иметь два концентратора уведомлений для одного и того же веб-API, один в производстве, а другой в режиме разработки? - PullRequest
0 голосов
/ 20 ноября 2018

В настоящее время у меня есть мобильное приложение, получающее push-уведомления через центр уведомлений в Azure и серверную часть веб-API. Я хочу выполнить тестирование приложений для iOS с дополнительным концентратором уведомлений, установленным в «Разработка», чтобы зарегистрированные пользователи не получали уведомления о моем тестировании.

На портале Azure я вижу, что серверная часть связана с концентратором уведомлений, который в настоящее время настроен на производство для Apple APNS, как показано на фотографии ниже.

enter image description here

В мобильном приложении, в проекте Xamarin iOS, регистрация с бэкэндом выполняется следующим образом:

async Task SendRegistrationToServerAsync(NSData deviceToken)
        {
            //this is the template/payload used by iOS. It contains the "messageParam"
            // that will be replaced by our service

            const string templateBodyAPNS = @"{
                                                ""aps"" : {
                                                    ""alert"" : ""$(messageParam)"",
                                                    ""mutable-content"": 1
                                                },
                                            }";


            var templates = new JObject();
            templates["genericMessage"] = new JObject
            {
                {"body", templateBodyAPNS }
            };

            // send registration to web api
            // MobileServiceUrl points to the Web API mentioned above
            var client = new MobileServiceClient(MyMobileAppName.App.MobileServiceUrl); 
            await client.GetPush().RegisterAsync(deviceToken, templates);

            //get the installation id
            Console.WriteLine("Installation id1: " + client.InstallationId.ToString());
        }

Вопросы:

  1. В Настройки приложения можно ли добавить еще один HubName и HubId (для разделения разработки и производства), а также добавить для него связанную вторую строку подключения в Строки подключения .Будет регистрироваться в Веб-API в приведенной выше строке кода автоматически определяет, какой концентратор находится в разработке, а какой - в зависимости от среды, в которой выполняется приложение?

ИЛИ Будет ли ошибка при наличии двух концентраторов, связанных с одним и тем же веб-API, и приложение не будет работать должным образом?

Ответы [ 2 ]

0 голосов
/ 21 ноября 2018

Для решения этой проблемы я создал вторичную службу разработки веб-API с почти идентичным кодом.

Я понял, что каждый веб-API может быть подключен к одному концентратору уведомлений при выборе вкладки «Push» в Azure на вкладке «Обзор» службы веб-API.

Веб-API для разработки. Я подключился к недавно созданному Центру уведомлений (в том же пространстве имен, что и в проекте мобильного приложения), для которого установлено значение «Песочница» для APNS.

Я изменил ключ "authorlements.plist" "apns-environemt" проекта iOS в Xamarin на "development" и загрузил p12 для разработки в новый центр уведомлений.

Также я изменил строку кода в проекте iOS, который регистрируется в веб-API, чтобы указывать на созданный новый веб-API (и, следовательно, зарегистрироваться в новом хабе для уведомлений).

// send registration to the NEW development web api               
            var client = new MobileServiceClient(MyMobileAppName.App.NewWebAPIMobileServiceUrl); 
            await client.GetPush().RegisterAsync(deviceToken, templates);

            //get the installation id
            Console.WriteLine("Installation id1: " + client.InstallationId.ToString());

Когда все будет готово для отправки обновления в магазин приложений, я просто изменяю приведенную выше строку кода, чтобы указать на исходный, производственный веб-интерфейс и концентратор, а также, конечно, редактирую списки прав доступа для проекта iOS и, возможно, службы уведомлений. расширение для изменения их "aps-environment" на "production".

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

0 голосов
/ 20 ноября 2018

Будет ли регистрация в веб-API в строке кода автоматически определять, какой концентратор находится в разработке, а какой - в зависимости от среды, в которой выполняется приложение?

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

Это достигается путем установки параметра «прилипать к слоту». Мы могли бы получить больше информации из этого блога .

enter image description here

...