Как я описал в своем первом сообщении в блоге о uservoice, у uservoice есть форум обратной связи, где пользователи могут отправлять и голосовать за идеи.
Этот пост о том, как внедрить эти идеи в ваше приложение. На стороне API идеи называются предложениями. Теперь, когда мы знаем, как аутентифицировать наших пользователей для API , мы можем получить список предложений в наше приложение:
public void GetSuggestions() { string suggestionsPath = "api/v1/forums/<yourforumid>/suggestions.json"; var client = new RestClient(BaseUrl) { Authenticator = OAuth1Authenticator.ForProtectedResource(ConsumerKey, ConsumerSecret, AccessToken, AccessTokenSecret) }; var request = new RestRequest(suggestionsPath, Method.GET); var response = client.ExecuteAsync(request, HandleGetSuggestionResponse); }</yourforumid>
Это довольно просто. Мы используем oAuth1Authenticator с нашими сохраненными токенами в качестве параметра для вызова конечной точки предложений API uservoice. В результате получается строка JSON, которая содержит все предложения в виде списка.
В нашем обработчике ответов мы можем десериализовать наш Список предложений (лучше всего с JSON.net ):
private void HandleGetSuggestionResponse(IRestResponse restResponse) { var response = restResponse; var suggestionslist = JsonConvert.DeserializeObject<SuggestionsDataClass.SuggestionsData>(response.Content); suggestionsListBox.ItemsSource = suggestionslist.suggestions; }
Чтобы получить элементы SuggestionsDataClass, просто перейдите на json2csharp.com и передайте строку json, которую мы получили с response.Content или загрузите ее здесь: SuggestionsDataClass .
Теперь давайте посмотрим, как представить новую идею от имени нашего пользователя. Чтобы представить идею, мы используем метод POST после того, как мы снова аутентифицировали нашего пользователя с помощью API uservoice:
public void PostSuggestion() { string suggestionsPath = "api/v1/forums/<yourforumid>/suggestions.json"; var client = new RestClient(BaseUrl) { Authenticator = OAuth1Authenticator.ForProtectedResource(ConsumerKey, ConsumerSecret, AccessToken, AccessTokenSecret) }; var request = new RestRequest(suggestionsPath, Method.POST); request.AddHeader("Accept", "application/json"); request.Parameters.Clear(); request.RequestFormat = DataFormat.Json; var newSuggestion = new SuggestionsDataClass.Suggestion(); newSuggestion.title = "test suggestion number 2 from app development"; newSuggestion.text = "please ignore this suggestion as we are testing integration of ideas into our apps"; newSuggestion.vote_count = 3; request.AddParameter("suggestion[title]", newSuggestion.title); request.AddParameter("suggestion[text]", newSuggestion.text); request.AddParameter("suggestion[votes]", newSuggestion.vote_count); request.AddParameter("suggestion[referrer]", "uservoice test app"); var response = client.ExecuteAsync(request, HandlePostSuggestionResponse); }</yourforumid>
Этот звонок немного отличается от предыдущего. Нам нужно передать данные идеи в качестве параметров нашего запроса. Параметр «предложение [название]» является основным и всегда обязательным. Как видите, «предложение [текст]» и «предложение [голоса]» — это дополнительные параметры, которые делают идею завершенной. Все остальные даты генерируются сервером пользовательских голосов (например, отправленный по адресу, подключение к пользователю, который опубликовал это и т. Д.). Параметр «предложение [реферрер]» виден только в нашей консоли администратора и может помочь вам отследить, откуда было отправлено предложение.
В нашем обработчике ответов мы получаем полный набор данных предложений в виде строки JSON, которую мы можем использовать для отображения нашим пользователям и, например, разрешить обмен этой идеей:
private void HandlePostSuggestionResponse(IRestResponse restResponse) { var response = restResponse; //tbd: do something with the result (e.g. checking response.StatusCode) }
Последний важный момент, который я хочу показать вам, — как позволить пользователю проголосовать за идею.
public void VoteOnSuggestion() { string postUserVotesPath = "/api/v1/forums/<yourforumid>/suggestions/{0}/votes.json"; string suggestionId = "<yoursuggestionid>"; var client = new RestClient(BaseUrl) { Authenticator = OAuth1Authenticator.ForProtectedResource(ConsumerKey, ConsumerSecret, AccessToken, AccessTokenSecret) }; var request = new RestRequest(string.Format(postUserVotesPath, suggestionId), Method.POST); request.AddHeader("Accept", "application/json"); request.Parameters.Clear(); request.RequestFormat = DataFormat.Json; request.AddParameter("to", 3); var response = client.ExecuteAsync(request, HandleVotingResponse); }</yoursuggestionid></yourforumid>
Конечно, нам нужно снова аутентифицировать нашего пользователя. Нам нужно передать идентификатор предложения в путь запроса (который является частью класса Предложение). Этот вызов принимает только один параметр («to»). Значение может быть от 1 до 3 (совет: предложите только три варианта из вашего кода, чтобы избежать ошибочных ответов).
Обработчик ответа возвращает строку предложения JSON, за которую пользователь снова проголосовал:
private void HandleVotingResponse(IRestResponse restResponse) { var response = restResponse; //tbd: do something with the result (e.g. checking response.StatusCode) }
Это все о том, как интегрировать форум обратной связи вашей учетной записи пользователя в ваше приложение. Как всегда, я надеюсь, что это будет полезно для некоторых из вас.
Если вы хотите узнать, какие дополнительные конечные точки есть в пользовательском счете, вам достаточно одного щелчка мыши: https://developer.uservoice.com/docs/api/reference/
Удачного кодирования всем!