Сделано. Я сделал свою первую библиотеку для Windows Phone 8. Этот пост в блоге рассказывает о том, почему я это сделал и как им пользоваться
Почему UserVoice?
У независимых разработчиков есть большая проблема: у нас нет команды поддержки, чтобы объяснить нашим пользователям, как использовать наши приложения или как решать определенные проблемы / проблемы. Что приводит к нашей следующей проблеме: пользователи являются клиентами. Клиенты хотят быть довольными. Наша работа — делать это с нашими приложениями, предоставляя им высокий уровень взаимодействия с пользователем и многофункциональные приложения. Часто пользователи не прилагают лишних усилий, чтобы отправить нам электронное письмо, чтобы сообщить нам, что не так. Или они планируют это, но забывают об этом. Или еще хуже: они раздражаются и удаляют наши приложения.
Как некоторые из вас знают, я работаю в группе поддержки оборудования немецкого телефонного оператора. За эти годы я узнал, как важно выслушивать клиентов, подбирать их идеи и пожелания и работать, чтобы сделать их, если это возможно. И если это невозможно, вы должны сказать им, что — даже это важная часть обслуживания клиентов!
Многие из нас создали учетную запись в Твиттере, отдельный почтовый адрес, возможно, дополнительную онлайн-форму, чтобы отвечать на все запросы пользователей. Но пользователи, как правило, не используют их по одной причине: они не интегрированы в наши приложения. Поэтому я провожу некоторое время, «гугляя с Bing» (спасибо @robwirving за эту потрясающую фразу!) На возможных решениях.
Uservoice — лучшая ценность, если вы используете бесплатную подписку, и у них есть API, который мы можем использовать ( см. Также этот пост о том, как начать работу с uservoice). Я сделал ее очень тонкой библиотекой и сконцентрировалась на функциях, которые нам действительно нужны в нашем приложении на стороне пользователя.
Библиотека!
Вы можете легко получить библиотеку через NuGet прямо в своем приложении. Просто добавьте этот пакет в список пакетов вашего приложения:
Библиотека также нуждается в RestSharp , который автоматически добавляется в ваш проект, если вы устанавливаете библиотеку.
После того, как вы установили его, вам нужно объявлять некоторые переменные, которые нам нужны снова и снова при использовании библиотеки:
Urls.subDomain = "<your subdomain>"; Urls.oAuthCallBackUri = "<your callback url>"; Tokens.ConsumerKey = "<your ConsumerKey>"; Tokens.ConsumerSecret = "<your ConsumerSecret>";
Вы можете получить эти значения из Настройки / Интеграции в вашей учетной записи UserVoice.
Кроме того, вы должны сохранить эти токены, чтобы не запрашивать у пользователя логин снова и снова.
Tokens.AccessToken Tokens.AccessTokenSecret Tokens.OwnerAccessToken Tokens.OwnerAccessTokenSecret
Еще один важный класс, о котором вы должны знать, это класс RequestParamaters:
Он содержит необходимые переменные для всех запросов, и вы можете легко использовать их, чтобы сохранить их для TombStoning или что-либо еще, что вы хотите сохранить их.
Давайте посмотрим на возможные запросы:
- База знаний:
KnowledgeBase kb = new KnowledgeBase();` //load complete knowledge base UservoiceRequests.KnowledgeBase = await kb.knowledgeBase(); //load specific topic UservoiceRequests.KnowledgeBaseTopic = await kb.knowledgeBaseTopic(RequestParameters.topicId);
- Предложения:
Suggestion suggestion = new Suggestion(); //load all suggestions UservoiceRequests.allSuggestions = await suggestion.allSuggestions(RequestParameters.forumId, RequestParameters.suggestionsPage); //vote on a suggestion UservoiceRequests.voteForSuggestion = await suggestion.voteOnSuggestion(RequestParameters.forumId, RequestParameters.suggestionId, RequestParameters.vote); //submit new suggestion UservoiceRequests.postSuggestion = await suggestion.newSuggestion(RequestParameters.forumId, RequestParameters.newSuggestionTitle, RequestParameters.newSuggestionText, RequestParameters.newSuggestionReferrer, RequestParameters.newSuggestionVotes); //search suggestions UservoiceRequests.searchSuggestion = await suggestion.searchSuggestions(RequestParameters.suggestionsSearchQuery);
- Данные пользователя:
User user = new User(); UservoiceRequests.User = await user.userData();
- Билеты:
//Tickets are not associated with the user from the API side. However, you are able to show all tickets from a user with this: ticket = new Ticket(); UservoiceRequests.AllTicketsFromUser = await ticket.allTicketsFromUser(RequestParameters.userMail); //submit a new ticket on behalf of the user UservoiceRequests.newTicket = await ticket.newTicket(RequestParameters.TicketSubject, RequestParameters.TicketMessage);
Как видите, все запросы асинхронные.
Вам не нужно явно аутентифицировать пользователя, потому что библиотека создана для автоматического определения этого. Если требуется аутентифицированный пользователь, он будет перенаправлен на страницу аутентификации UserVoice.
В текущей версии вам нужно будет снова вручную отправить запрос после аутентификации пользователя, но я обновлю библиотеку, чтобы сделать это автоматически в ближайшее время.
И последнее замечание: я не использую сериализатор RestSharp — все запросы возвращают соответствующую строку JSON. Таким образом, каждый из вас может использовать выбранный сериализатор ( хотя я абсолютно рекомендую JSON.net ).
Пожалуйста, рассмотрите текущую версию как бета-версию, и сообщайте обо всех проблемах с этим через Твиттер или почту .
А теперь наслаждайся моей библиотекой и счастливым кодированием!