Push-уведомления с помощью Mobile Services
Для того, чтобы отправлять push-уведомления в ваше приложение с использованием Windows Azure Mobile Services, необходимо воспользоваться сервисом Windows Push Notification (WNS). Результатом этой части руководства будет то, что мобильный сервис будет посылать push-уведомление всякий раз, когда будет вставлена новая запись. .
Регистрация в Магазине Windows
Для отправки push-уведомлений в приложения Магазина Windows из мобильного сервиса, вы должны зарегистрировать ваше приложение в Магазине, после чего настроить соответствующим образом мобильный сервис для интеграции с WNS.
Перейдите на странице регистрации приложения - Submit an app, войдите с вашим аккаунтом Microsoft и нажмите Appname (рисунок 1).
Увеличить
Рис. 1. Добавление приложения в Магазин Windows
Введите название вашего приложения в поле Appname, нажмите Reserveappname и Save (рисунок 2).
Увеличить
Рис. 2. Добавление приложения в Магазин Windows
Откройте созданный ранее проект и, нажав правой кнопкой мыши на названии проекта, нажмите Store=>AssociateAppwiththeStore.... (рисунок 3).
Увеличить
Рис. 3. Интерфейс Visual Studio 2012
Нажмите Sign in и войдите в систему с вашим аккаунтом Microsoft. Выберите зарегистрированное ранее приложение и нажмите Next=>Associate (рисунок 4).
Увеличить
Рис. 4. Добавление приложения в Магазин Windows
Перейдите на страницу My Applications page и выберите ваше приложение из списка (рисунок 5).
Увеличить
Рис. 5. Настройки приложения
В API Settings запишите значения Client secret и Package security identifier (SID) (рисунок 6).
Увеличить
Рис. 6. Настройки приложения
Перейдите на портал управления. Выберите на вкладке MobileServices ваше приложение (рисунок 7).
Увеличить
Рис. 7. Портал управления Windows Azure
На вкладке Push введите записанные ранее значения Client secret и Package SID и нажмите Save (рисунок 8).
Увеличить
Рис. 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).
Увеличить
Рис. 9. Включения уведомлений
Таким образом приложение сможет использовать всплывающие уведомления.
Обновление скрипта на портале управления
На портале управления перейдите на вкладку Data и выберите таблицу TodoItem (рисунок 10).
Увеличить
Рис. 10. Портал управления Windows Azure
На вкладке Script нажмите Insert (рисунок 11).
Увеличить
Рис. 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).
Увеличить
Рис. 12. Интерфейс приложения
Обратите внимание, что после вставки сущности приложение получит push-уведомление от WNS (рисунок 13).
Увеличить
Рис. 13. Интерфейс приложения
Сделаем теперь так, чтобы можно было отсылать push-уведомления пользователям приложения Магазина Windows.
Создание новой таблицы
На портале управления перейдите на вкладку MobileServices и выберите ваше приложение (рисунок 14).
Увеличить
Рис. 14. Портал управления Windows Azure
На вкладке Data нажмите Create (рисунок 15).
Увеличить
Рис. 15. Портал управления Windows Azure
В открывшемся диалоге введите в поле Tablename значение Channel, остальные значения оставьте стандартными (рисунок 16). Нажмите кнопку.
Увеличить
Рис. 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).
Увеличить
Рис. 18. Портал управления Windows Azure
На вкладке Script нажмите Insert (рисунок 19).
Увеличить
Рис. 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).
Увеличить
Рис. 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).
Увеличить
Рис. 21. Интерфейс приложения
Запустите на нескольких машинах ваше приложение и повторите процедуру, обратите внимание, что везде будет приходить push-уведомление от WNS (рисунок 22).
Увеличить
Рис. 22. Интерфейс приложения