SimpleSamples-WindowsPhone ru
Contents |
Введение
Каждый сэмпл представляет собой стандартный одностраничный проект WP7. В стандартном классе App.xaml.cs происходит инициализация необходимых компонент. В главной странице приложения MainPage.xaml.cs непосредственно выполняются операции с сервисами QuickBlox. Каждый сэмпл состоит из четырех компонент: инициализация контекста и установление соединения с сервером, инициализация определенного сервиса, реализация обработчика ответов и методы, которые отправляют команды на сервер.
Инициализация контекста и установление соединения с сервером происходят в каждом сэмпле одинаково в App.xaml.cs:
private const int AppID = 150; private const int OwnerID = 4331; private const string AuthKey = "8vXrOPEEXFacuEa"; private const string AuthSecret = "Up3AjdkjEDAzraL"; public QuickBloxSDK_Silverlight.QuickBlox QBlox { get; set; } public App() { this.QBlox = new QuickBloxSDK_Silverlight.QuickBlox(AppID, OwnerID, AuthKey, AuthSecret, null, true); UnhandledException += Application_UnhandledException; InitializeComponent(); InitializePhoneApplication(); }
SimpleSample-Users-WindowsPhone7
Демонстрирует работу с пользователями в QuickBlox. Позволяет добавлять, удалять, редактировать и т.д.
В MainPage() получим наш контекст и назначим eventHandler для сервиса:
//Set up service Context for this Page this.appContext = App.Current as App; this.QBlox = this.appContext.QBlox; this.QBlox.userService.UserServiceEvent += new QuickBloxSDK_Silverlight.users.UserService.UserServiceHeandler(userService_UserServiceEvent);
Пишем сами команды-запросы. Каждая команда запускается по тапу пункта меню:
1. Получить всех пользователей:
this.QBlox.userService.GetUsers();
2. Получить определенного пользователя:
this.QBlox.userService.GetUser(this.TestUser.id, false);
3. Добавить нового пользователя:
User user = new User(); user.Email = "vova@rsk-k161.com"; user.Password = "123456"; ... this.Password = user.Password; this.QBlox.userService.AddUser(user);
4. Изменить данные определенного пользователя:
... this.TestUser.Website = "Kreditstore.org"; this.QBlox.userService.EditUser(this.TestUser);
5. Удалить пользователя:
this.QBlox.userService.DeleteUser(this.TestUser.id, false);
6. Аутентифицировать пользователя:
this.QBlox.userService.Authenticate(this.QBlox.Username, this.Password);
Необходимо реализовать обработку ответов от сервера (реализация userService_UserServiceEvent(QuickBloxSDK_Silverlight.users.UserServiceEventArgs Args) ). Команды посылают запросы на сервер в асинхронном режиме. Обработчик же в свою очередь отлавливает их. Для работы обработчика в асинхронном режиме необходимо использовать Dispatcher:
Dispatcher.BeginInvoke(new Action(() => { ... })
Внутри него мы получаем и обрабатываем результаты, находящиеся в аргументе. Для начала определяем какую команду необходимо было выполнить: Args.currentCommand (например, GetUsers, GetUser, DeleteUser и т.д.). Затем проверяем успешность выполнения данного запроса:
QuickBloxSDK_Silverlight.Core.Status. [OK, ValidationError, AuthenticationError, NotFoundError, AccessDenied, ContentError, StreamError]).
В результате получаем либо ответ об удачном/неудачном выполнении запроса, либо еще и данные. Например:
User user = (User)Args.result;
SimpleSample-Geo-WindowsPhone7
Демонстрирует работу с сервисом Location и оперирует объектами GeoData. Показывает как добавлять местоположения, удалять их, делать выборки и т.д. Необходимо отметить, что сервис Users используется везде, так как все действия требуют аутентификацию. Необходимый функционал содержится как раз в этом классе.
Аналогичным образом назначаем контекст и eventHandler:
this.appContext = App.Current as App; this.QBlox = this.appContext.QBlox; this.QBlox.geoService.GeoServiceEvent += new QuickBloxSDK_Silverlight.Geo.GeoService.GeoServiceHeandler(geoService_GeoServiceEvent); this.QBlox.userService.UserServiceEvent += new QuickBloxSDK_Silverlight.users.UserService.UserServiceHeandler(userService_UserServiceEvent);
Пишем сами команды-запросы. Каждая команда запускается по тапу пункта меню:
1. Получить все геодаты, 10 записей первой страницы:
this.QBlox.geoService.GetGeoLocationsForApp(1, 10);
2. Получить 5 объектов GeoData с первой страницы для ID пользователя равного 518:
this.QBlox.geoService.GetGeoLocationsForUser(518, 1, 5);
3. Получить GeoData по ID:
this.QBlox.geoService.GetGeoLocation(12317);
4. Добавить новую локацию (объект GeoData)
this.QBlox.geoService.AddGeoLocation(new GeoData(518, decimal.Parse("51,46546546"), decimal.Parse("122,6565465"), "Hi"));
Аналогичным образом реализуем eventHandler – geoService_GeoServiceEvent!
SimpleSample-BackgroundMode-WindowsPhone7
Данный сэмпл показывает каким образом использование background режима помогает в построении качественного приложения. Данный режим позволяет всегда иметь возможность через контекст обратиться и получить:
- Всех пользователей приложения;
- Все локации (объекты GeoData) приложения;
- Проверить соединение с сервером.
Для того, чтобы запустить данный режим необходимо задать интервал опроса сервера и дать команду на старт:
this.QBlox = new QuickBloxSDK_Silverlight.QuickBlox(AppID, OwnerID, this.AuthKey, this.AuthSecret, null, true); this.QBlox.BackgroundEvent += new QuickBloxSDK_Silverlight.QuickBlox.BGR(QBlox_BackgroundEvent); this.QBlox.PingInterval = 5; this.QBlox.BackgroundUpdateStart();
Теперь мы можем отлавливать каждое обновление и выполнять необходимые действия. Для этого необходимо лишь создать eventHandler для данного режима:
this.QBlox.BackgroundEvent += new QuickBloxSDK_Silverlight.QuickBlox.BGR(QBlox_BackgroundEvent);
Команды представляют собой строки: "users" (User[] users = (User[])Result;) , "geodata" (GeoData[] geo = (GeoData[])Result;), "Connection", "Online", "Offline".
var MainContext = App.Current as App; this.QBlox = MainContext.QBlox; this.QBlox.BackgroundEvent += new QuickBloxSDK_Silverlight.QuickBlox.BGR(QBlox_BackgroundEvent); switch (Command) { case "users": { User[] users = (User[])Result; this.MainText.Text += "Users updates : " + users.Length.ToString() + " elements count \n-------------\n"; break; } case "geodata": { GeoData[] geo = (GeoData[])Result; this.MainText.Text += "GeoData updates : " + geo.Length.ToString() + " elements count \n-------------\n"; break; } case "Connection": { this.MainText.Text = "App connection...\n"; break; } case "Online": { this.MainText.Text = "App online \n"; break; } case "Offline": { this.MainText.Text = "App offline\n"; break; } }
SimpleSample-chat_locations-wp7
Данный пример показывает как можно реализовать простой чат, используя несколько сервисов библиотеки QuickBlox. Идея работы примера построена на статье [[1]]. Весь Функционал (получение всех сообщений, отправка нового сообщения) строится на 3 сервисах библиотеки QuickBlox:
- Background Mode - реализует автоматическое получение сообщений
- User Service - аутентификация
- GeoService - работа с сообщениями (основа для хранения кодированных xml-структур)
Для работы чата используются два основных класса (MessageManager и Message), последний представляет собой "обертку" над объектами GeoData, а первый методы для работы с объктами Message.
Для работы чата назначаем контекст и eventHandler'ы необходимых сервисов:
this.appContext = App.Current as App; //Create context this.QBlox = MainContext.QBlox; //Add event handler for GeoService events this.QBlox.geoService.GeoServiceEvent += new GeoService.GeoServiceHandler(geoService_GeoServiceEvent); //Add event handler for Background events this.QBlox.BackgroundEvent += new QuickBloxSDK_Silverlight.QuickBlox.BGR(QBlox_BackgroundEvent);
В обработчике событий background режима реализуется аутентификация пользователя и обработка полученного массива GeoData объектов:
//Authenticate sample user (Jane) this.QBlox.userService.Authenticate("Jane", "123456"); //Get from all geoData all chat Messages var res = MessageManager.GetChatMessages(QBlox.GeoData); //Update chat list if (res != null && CommonMessages != null) { if (res.Count() != CommonMessages.Count()) for (int i = CommonMessages.Count(); i < res.Count(); i++) CommonMessages.Add(res[i]); }
Осталось только добавить возможность создавать сообщение и отправлять его:
//ID of Sample User int UserID = 578; //Post new Message this.QBlox.geoService.AddGeoLocation(new GeoData(UserID, 0, 0, MessageManager.CreateChatMessage(chatField.Text)));
SimpleSample-messages_users_background-wp7
Данный пример показывает как Вы можете реализовать push-нотификацию, используя сервисы QuickBlox. 1. Вам необходимо подключить контекст библиотеки QuickBlox и описать обработчиков для основных используемых сервисов. Для работы понадобятся 2 базовых (BackgroundMode для определения статуса приложения, UserService для аутентификации) и pushNotificationService:
//Create context var MainContext = App.Current as App; this.QBlox = MainContext.QBlox; //Add event handler for Background events this.QBlox.BackgroundEvent += new QuickBloxSDK_Silverlight.QuickBlox.BGR(QBlox_BackgroundEvent); //Add event handler for User Service events this.QBlox.userService.UserServiceEvent += new UserService.UserServiceHandler(userService_UserServiceEvent); //Add event handler for Push Notification events this.QBlox.pushNotificationService.PushNotificationServiceEvent += new PushNotificationService.PushNotificationServiceHandler(pushNotificationService_PushNotificationServiceEvent);
2. Затем Вы должны создать канал (получить от сервера Microsoft) или взять его из особого хранилища в приложении:
this.Channel = HttpNotificationChannel.Find(ChannelName);
или
this.Channel = new HttpNotificationChannel(ChannelName);
3. Надо описать обработчиков для пришедших нотификаций и в первую очередь для ShellToastNotification:
//Set the event handler when toast notification received this.Channel.ShellToastNotificationReceived += new EventHandler<NotificationEventArgs>(delegate(object senderObj, NotificationEventArgs arg) { StringBuilder sb = new StringBuilder(); foreach (string key in arg.Collection.Keys) sb.AppendFormat("{0}:{1}\n", key, arg.Collection[key]); string result = sb.ToString(); });
4. Теперь можно работать с нотификациями. Для этого после того как Вы подключились и удачно аутентифицировались, необходимо получить token для нотификаций, который определяет вашу подписку:
//If User has been connected then create token for push this.QBlox.pushNotificationService.CreatePushToken(this.Channel.ChannelUri.ToString()); void pushNotificationService_PushNotificationServiceEvent( QuickBloxSDK_Silverlight.PushNotification.PushNotificationEventArgs Args) { this.Dispatcher.BeginInvoke(new Action(() => { if (Args.currentCommand == PushNotificationCommand.CreatePushToken) { this.URLPush = ((PushToken)Args.result).ClientIdentificationSequence; this.PushTokenId = ((PushToken)Args.result).Id; } })); }
5. Имея PushTokenId и URLPush, мы можем создать подписку на уведомления или подписаться на уведомления:
//Create subscription this.QBlox.pushNotificationService.CreateSubscription(this.URLPush, QuickBloxSDK_Silverlight.PushNotification.NotificationType.mpns);
6. Теперь мы можем отправлять уведомления через админку всем подписанным пользователям, либо мы можем из программы отправить уведомление любому пользователю, id которого мы знаем и который подписан на уведомления данного приложения:
string notificationHeader = "Simple Push Notification"; string textMesssage = "This is test notification. Please try it."; //Page that will be opened when you tap on the toast. string pagePath = "/Main.xaml"; /Create new Notifications with Title and Text string notificationMessage = new PushNotification(PushNotificationType.Toast, notificationHeader,textMesssage, pagePath).ToBase64String(); //Create notification //In order to make it work you need to put your message between "mpns=" and "26headers=Q29udGV..." this.QBlox.pushNotificationService.CreateEvent(new int[] { SimpleUserId }, "mpns=" + notificationMessage + "%26headers=Q29udGVudC1UeXBlLHRleHQveG1sLENvbnRlbnQtTGVuZ3RoLDIxOCxYLU5vdGlmaWNhdGlvbkNsYXNzLDIsWC1XaW5kb3dzUGhvbmUtVGFyZ2V0LHRvYXN0");
Sources
Project homepage on GIT — https://github.com/QuickBlox/SimpleSample-Users-WindowsPhone7
Clone from GIT dev version — git@github.com:QuickBlox/SimpleSample-Users-WindowsPhone7.git
Download ZIP for dev version — https://github.com/QuickBlox/SimpleSample-Users-WindowsPhone7/zipball/master
