Incentivized Reviews

This tutorial introduces developers to incentivized badges and incentivized review count in the Android SDK.

Introduction

Authenticity is a core value at Bazaarvoice. This means indicating, or badging, user generated content (UGC) where the author has been offered an incentive. FTC regulations concerning consumer-generated content, as well as the Bazaarvoice Authenticity Policy, require that reviews display a notification (either as a graphic badge or plain text) any time the consumer has received or been offered material compensation for writing their review. This includes, but is not limited to, any of the following being provided to the consumer in exchange for writing a review:

  • Entry into a sweepstakes
  • Coupons or Discounts
  • Loyalty Reward Points
  • Free products, either before as in a Sampling program or after, as a Thank You gift

In addition to badging incentivized reviews, you can display the count of incentivized reviews for each product or author, which may be required depending on local regulations. This count is referred to as the incentivized review count.

Prerequisites

Prior to submission and rendering incentivized badges, your implementation must be configured to support such options. Please contact support to inquire about enabling this option.

Displaying incentivized review badges

How Incentivized Review badges are displayed for Android SDK clients is left up to creative interpretation. Bazaarvoice has several suggestions when displaying badge information.

  • Incentivized reviews must always be identified.
  • Icons or text can either be used. In the case where icons are used, the meaning or definition should be easily available. This could mean including alt text, implementing a tooltip, or popover which will display on the mouseover event.

The badging of content does not need to appear the same across syndicated sites, but must be present. For example, graphical icons on the origin site and text labels on the destination site is acceptable.

The following examples demonstrate several ways to display badges:

Displaying the incentivized review count

The Android SDK returns the count of incentivized reviews for each product or author. Use this count to show consumers how many of the reviews for a product or written by an author have been incentivized through a sweepstakes, coupon, sampling program, etc. Bazaarvoice considers a review incentivized if it was marked as an incentivized review during submission, as detailed in prior sections of this topic, or if the review content indicates an incentive was present.

Use the incentivized review count to:

  • Show consumers a badge or informational message that highlights the count of incentivized reviews for a product.
  • Increase consumer trust in your business.
  • Comply with global consumer laws and regulations.

The following image demonstrates how you can display the incentivized review count beneath a ratings display.

Based on our user experience research and authenticity compliance guidelines, Bazaarvoice recommends using the following text to describe the incentivized review count:

incentivized review count of total review count reviewers received a sample product or took part in a promotion

Usage details

To retrieve incentivized review data, call the addIncentivizedStats(true) in the Android SDK. Use this approaches in conjunction with other parameters as described below in order to return the needed data.

Products

Request incentivized statistics for products in bulk

BulkProductRequest request = new BulkProductRequest.Builder(productId)
    .addIncludeStatistics(PDPContentType.Reviews)//
    .addIncentivizedStats(true)//
    .build();
 
final BVConversationsClient client = new BVConversationsClient.Builder(BVSDK.getInstance()).build();
 
client.prepareCall(request).loadAsync(new ConversationsDisplayCallback<BulkProductResponse>() {
    @Override public void onSuccess(BulkProductResponse response) {
        for(Product product : response.getResults()) {
            int incentivizedCount = product.getReviewStatistics().getIncentivizedReviewCount(); // check for incentivized count of reviewStatistics
            if (incentivizedCount > 0) {
                List<DistributionValue> distributionValue = product.getReviewStatistics().getContextDataDistribution().get("IncentivizedReview").getValues();
                // check for the context data value properties of the incentivized review using distributionValue object
            }
        }
    }
 
    @Override public void onFailure(ConversationsException exception) {
        // HANDLE ERROR
    }
});

Request incentivized statistics for Product Detail Pages

ProductDisplayPageRequest request = new ProductDisplayPageRequest.Builder(productId)
    .addIncludeStatistics(PDPContentType.Reviews)//
    .addIncentivizedStats(true)//
    .build();
 
final BVConversationsClient client = new BVConversationsClient.Builder(BVSDK.getInstance()).build();
 
client.prepareCall(request).loadAsync(new ConversationsDisplayCallback<ProductDisplayPageResponse>() {
     
    @Override public void onSuccess(ProductDisplayPageResponse response) {
        for(Product product : response.getResults()) {
            int incentivizedCount = product.getReviewStatistics().getIncentivizedReviewCount(); // check for incentivized count of reviewStatistics
            if (incentivizedCount > 0) {
                List<DistributionValue> distributionValue = product.getReviewStatistics().getContextDataDistribution().get("IncentivizedReview").getValues();
                // check for the context data value properties of the incentivized review using distributionValue object
            }
        }
    }
 
    @Override public void onFailure(ConversationsException exception) {
        // HANDLE ERROR
    }
});

Reviews

Request incentivized statistics for reviews

	
ReviewsRequest request = new ReviewsRequest.Builder("ProductId", limit, offset)
    .addIncludeContent(ReviewIncludeType.PRODUCTS)// additional parameters to include products in response
    .addIncludeContent(ReviewIncludeType.AUTHORS) // additional parameters to include authors in response
    .addCustomDisplayParameter("FilteredStats","Reviews")// added to request for filtered statistics
    .addIncentivizedStats(true) // request for incentivized reviews data
    .build();
 
    final BVConversationsClient client = new BVConversationsClient.Builder(BVSDK.getInstance()).build();
 
    client.prepareCall(request).loadAsync(new ConversationsDisplayCallback<ReviewResponse>() {
        @ Override
 
        public void onSuccess(ReviewResponse response) {
 
            for(Review review : response.getResults()) {
                Map<String, Badge> reviewBadges = review.getBadges();
                if(reviewBadges.get("incentivizedReview") != null) {
                    // the review contains "incentivizedReview" badge, check for the properties
                    Badge badge = reviewBadges.get("incentivizedReview");
                    //Check for badge properties `
 
                    for(Product product : review.getIncludedIn().getProducts()) {
                        // check for incentivized count of reviewStatistics
                        int incentivizedCount = product.getReviewStatistics().getIncentivizedReviewCount();
                        if(incentivizedCount > 0) {
                            List<DistributionValue> distributionValue = product.getReviewStatistics().getContextDataDistribution().get("IncentivizedReview").getValues();
                            // check for the context data value properties of the incentivized review using distributionValue object
                        }
                    }
                }
            }
        }
 
        @Override public void onFailure(ConversationsException exception) {
            // HANDLE ERROR
        }
    });

Bulk Ratings

Request incentivized statistics for bulk ratings

BulkRatingsRequest request = new BulkRatingsRequest.Builder(productIds, BulkRatingOptions.StatsType.All)
    .addIncentivizedStats(true) //request for incentivized reviews data
    .build();
 
final BVConversationsClient client = new BVConversationsClient.Builder(BVSDK.getInstance()).build();
 
client.prepareCall(request).loadAsync(new ConversationsDisplayCallback<BulkRatingsResponse>() {
    @Override
 
    public void onSuccess(BulkRatingsResponse response) {
        for (Statistics stats : response.getResults()) {
            ProductStatistics productStats = stats.getProductStatistics();
            ReviewStatistics reviewStats = productStats.getReviewStatistics();//Review Statistics
            ReviewStatistics nativeStats = productStats.getNativeReviewStatistics();//Native Statistics
            reviewStats.getIncentivizedReviewCount(); //get incentivized count
            nativeStats.getIncentivizedReviewCount(); //get incentivized count
        }
    }
 
    @Override
 
    public void onFailure(ConversationsException exception) {
        // HANDLE ERROR
    }
});

Context data values

The ContextDataValues object and subsequent key/value pairs may offer developers additional information about the incentivized review. The additional metadata associated with the incentivized review can help categorize the type of review. For example, the DimensionLabel key/value can be used to distinguish between other types of incentives and also be displayed as a label. In order to use ContextDataValues, please contact support.

Badges

The review.badges object contains the badge name ('incentivizedReview'), id, the badge type ("Custom"), and the type of content associated with the badge (reviews, question, answers)