Push-уведомления с помощью Mobile Services
Для того, чтобы отправлять push-уведомления в ваше приложение с использованием Windows Azure Mobile Services, необходимо воспользоваться сервисом Windows Push Notification (WNS). Результатом этой части руководства будет то, что мобильный сервис будет посылать push-уведомление всякий раз, когда будет вставлена новая запись. .
Регистрация в Магазине Windows
Для отправки push-уведомлений в приложения Магазина Windows из мобильного сервиса, вы должны зарегистрировать ваше приложение в Магазине, после чего настроить соответствующим образом мобильный сервис для интеграции с WNS.
Перейдите на странице регистрации приложения - Submit an app, войдите с вашим аккаунтом Microsoft и нажмите Appname (рисунок 1).
_mini_oszone.png)
Увеличить
Рис. 1. Добавление приложения в Магазин Windows
Введите название вашего приложения в поле Appname, нажмите Reserveappname и Save (рисунок 2).
_mini_oszone.png)
Увеличить
Рис. 2. Добавление приложения в Магазин Windows
Откройте созданный ранее проект и, нажав правой кнопкой мыши на названии проекта, нажмите Store=>AssociateAppwiththeStore.... (рисунок 3).
_mini_oszone.png)
Увеличить
Рис. 3. Интерфейс Visual Studio 2012
Нажмите Sign in и войдите в систему с вашим аккаунтом Microsoft. Выберите зарегистрированное ранее приложение и нажмите Next=>Associate (рисунок 4).
_mini_oszone.png)
Увеличить
Рис. 4. Добавление приложения в Магазин Windows
Перейдите на страницу My Applications page и выберите ваше приложение из списка (рисунок 5).
_mini_oszone.png)
Увеличить
Рис. 5. Настройки приложения
В API Settings запишите значения Client secret и Package security identifier (SID) (рисунок 6).
_mini_oszone.png)
Увеличить
Рис. 6. Настройки приложения
Перейдите на портал управления. Выберите на вкладке MobileServices ваше приложение (рисунок 7).
_mini_oszone.png)
Увеличить
Рис. 7. Портал управления Windows Azure
На вкладке Push введите записанные ранее значения Client secret и Package SID и нажмите Save (рисунок 8).
_mini_oszone.png)
Увеличить
Рис. 8. Настройки push-уведомлений
Интеграция мобильного сервиса и приложения с WNS проведена успешно.
Добавление push-уведомлений в приложение
Добавьте в файл App.xaml.cs:
using Windows.Networking.PushNotifications;
//Добавьте в файл App.xaml.cs:
public static PushNotificationChannel CurrentChannel { get; private set; }
private async void AcquirePushChannel()
{
CurrentChannel =
await PushNotificationChannelManager.CreatePushNotificationChannelForApplicationAsync();
}
В этом коде получается и сохраняется канал push-уведомлений.
Вставьте в начало обработчика OnLaunched вызов нового метода, что будет гарантировать, что при каждом запуске приложения будет инициализироваться свойство CurrentChannel :
AcquirePushChannel();
//Добавьте в MainPage.xaml.cs в класс TodoItem новое свойство:
[DataMember(Name = "channel")]
public string Channel { get; set; }
//Замените метод ButtonSave_Click:
private void ButtonSave_Click(object sender, RoutedEventArgs e)
{
var todoItem = new TodoItem { Text = TextInput.Text, Channel = App.CurrentChannel.Uri };
InsertTodoItem(todoItem);
}
Если вы используете собственный проект, а не сгенерированный на портале управления, откройте Package.appxmanifest file и убедитесь, что на вкладке Application UI значение Toast capable определено как Yes (рисунок 9).
_mini_oszone.png)
Увеличить
Рис. 9. Включения уведомлений
Таким образом приложение сможет использовать всплывающие уведомления.
Обновление скрипта на портале управления
На портале управления перейдите на вкладку Data и выберите таблицу TodoItem (рисунок 10).
_mini_oszone.png)
Увеличить
Рис. 10. Портал управления Windows Azure
На вкладке Script нажмите Insert (рисунок 11).
_mini_oszone.png)
Увеличить
Рис. 11. Портал управления Windows Azure
Замените функцию вставки на следующий код, и нажмите Save:
function insert(item, user, request) {
request.execute({
success: function() {
// записать в ответ и отослать
// уведомление в фоне
request.respond();
push.wns.sendToastText04(item.channel, {
text1: item.text
}, {
success: function(pushResponse) {
console.log("Sent push:", pushResponse);
}
});
}
});
}
Таким образом регистрируется новый скрипт, обрабатывающий операцию вставки и отсылающий push-уведомлений (вставленный текст) в канал, предоставленный запросов на вставку.
Запуск приложения
Запустите приложение, введите текст в поле InsertaTodoItem и нажмите Save (рисунок 12).
_mini_oszone.png)
Увеличить
Рис. 12. Интерфейс приложения
Обратите внимание, что после вставки сущности приложение получит push-уведомление от WNS (рисунок 13).
_mini_oszone.png)
Увеличить
Рис. 13. Интерфейс приложения
Сделаем теперь так, чтобы можно было отсылать push-уведомления пользователям приложения Магазина Windows.
Создание новой таблицы
На портале управления перейдите на вкладку MobileServices и выберите ваше приложение (рисунок 14).
_mini_oszone.png)
Увеличить
Рис. 14. Портал управления Windows Azure
На вкладке Data нажмите Create (рисунок 15).
_mini_oszone.png)
Увеличить
Рис. 15. Портал управления Windows Azure
В открывшемся диалоге введите в поле Tablename значение Channel, остальные значения оставьте стандартными (рисунок 16). Нажмите кнопку.
_mini_oszone.png)
Увеличить
Рис. 16. Создание новой таблицы
В новой таблице будут храниться URI каналов, которые будут использоваться при посылке push-уведомлений отдельно от данных сущности.
Обновление приложения
Удалите из MainPage.xaml.cs свойство Channel в классе TodoItem . Класс должен выглядеть так:
public class TodoItem
{
public int Id { get; set; }
[DataMember(Name = "text")]
public string Text { get; set; }
[DataMember(Name = "complete")]
public bool Complete { get; set; }
}
Замените метод ButtonSave_Click:
private void ButtonSave_Click(object sender, RoutedEventArgs e)
{
var todoItem = new TodoItem { Text = TextInput.Text };
InsertTodoItem(todoItem);
}
//Добавьте код, создающий новый класс Channel:
public class Channel
{
public int Id { get; set; }
[DataMember(Name = "uri")]
public string Uri { get; set; }
}
//Замените в файле App.xaml.cs метод AcquirePushChannel:
private async void AcquirePushChannel()
{
CurrentChannel =
await PushNotificationChannelManager.CreatePushNotificationChannelForApplicationAsync();
IMobileServiceTable<Channel> channelTable = App.MobileService.GetTable<Channel>();
var channel = new Channel { Uri = CurrentChannel.Uri };
await channelTable.InsertAsync(channel);
}
В этом коде происходит вставка текущего канала в таблицу Channel.
Обновление серверных скриптов
На портале управления на вкладке Data выберите таблицу Channel (рисунок 18).
_mini_oszone.png)
Увеличить
Рис. 18. Портал управления Windows Azure
На вкладке Script нажмите Insert (рисунок 19).
_mini_oszone.png)
Увеличить
Рис. 19. Портал управления Windows Azure
Замените функцию вставки (Insert) и нажмите Save:
function insert(item, user, request) {
var channelTable = tables.getTable('Channel');
channelTable
.where({ uri: item.uri })
.read({ success: insertChannelIfNotFound });
function insertChannelIfNotFound(existingChannels) {
if (existingChannels.length > 0) {
request.respond(200, existingChannels[0]);
} else {
request.execute();
}
}
}
Скрипт проверяет таблицу Channel на наличие каналов с идентичным URI и, в том случае, если такового нет, происходит вставка канала.
Нажмите Script и выберите Insert (рисунок 20).
_mini_oszone.png)
Увеличить
Рис. 20. Портал управления Windows Azure
Замените функцию вставки и нажмите Save:
function insert(item, user, request) {
request.execute({
success: function() {
request.respond();
sendNotifications();
}
});
function sendNotifications() {
var channelTable = tables.getTable('Channel');
channelTable.read({
success: function(channels) {
channels.forEach(function(channel) {
push.wns.sendToastText04(channel.uri, {
text1: item.text
}, {
success: function(pushResponse) {
console.log("Sent push:", pushResponse);
}
});
});
}
});
}
}
Скрипт вставки будет отправлять push-уведомление с текстом вставленной сущности во все каналы, хранящиеся в таблице Channel.
Запуск приложения
Запустите приложение и введите текст в поле InsertaTodoItem, после чего нажмите Save (рисунок 21).
_mini_oszone.png)
Увеличить
Рис. 21. Интерфейс приложения
Запустите на нескольких машинах ваше приложение и повторите процедуру, обратите внимание, что везде будет приходить push-уведомление от WNS (рисунок 22).
_mini_oszone.png)
Увеличить
Рис. 22. Интерфейс приложения