Статьи

Как интегрировать форум отзывов Uservoice в ваше приложение для Windows Phone

Как я описал в своем первом сообщении в блоге о 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)
        }

Снимок экрана (305)

Последний важный момент, который я хочу показать вам, — как позволить пользователю проголосовать за идею.

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/

Удачного кодирования всем!