- Allow SDK clients to Retrieve Summarised Features API.
- Allow SDK clients to Retrieve Quotes for a Summarised Features API.
- Allow SDK clients to get Retrieve Features API.
- Allow SDK clients to Retrieve Quotes API.
- Allow SDK clients to get Retrieve Quotes API.
- Allow SDK clients on submitreview.json to collect video natively.
- Allow SDK clients on progressive endpoint to collect video natively.
- Added Support for OriginalProductName to base review.
- Upgraded Gradle and Dependencies of AndroidX,GoogleAds, Kotlin etc.
- Upgraded Gradle and Dependencies of AndroidX,GoogleAds,Kotlin etc.
- Fixed PIE feed not generated.
- Allowing client to map Q&A Statistics in statistics.json.
- Allowing client to Sort the Reviews by ContentLocale (Custom Sort Order).
- Allowing client to Sort the Reviews by Relevancy.
- Fixed capturing of PII data in the Transaction Event.
- Added ADID Google Play services normal permission.
- Allowing clients to use Hosted Authentication with Progressive Submission.
- Fixed Missing params in Primary Filters.
#8.9.2
*Allowing client to filter the Reviews by ContentLocale in the Primary Filter. *This is our last NEXUS_USER for 2021 and wish everyone best of Holiday Season. Stay safe and enjoy the celebrations. See you in 2022.
- Made BVViewedCGCEvent event accessible publicly.
- Added missing non PII params(deploymentZone,discount,country,proxy) for Transaction events in pixel.
Ability to pass Date of User Experience field in ReviewSubmissionRequest & retrieve Category information in ReviewsRequest
- Allowing clients to capture the date when the product was tested during review submission via Date of User Experience field.
- Requesting category information in ReviewsRequest.
- Added keep rules to proguard-rules.txt file for BVConversations module.
- Mapped error & field error response properties for PhotoUploadResponse
- Mapped TypicalHoursToPost & AuthorSubmissionToken properties for submission response.
- Mapped Author Includes for display API response.
- Added support for Incentivized Reviews and Content Origin.
- Added support for Review Highlights API
- Integration of Review Highlights in Demo App.
- Updated the Iovation module to include support for v4.1.1
- Changes to JSON key to map the values property for tag dimensions.
- Updated the Iovation module to include support for v4.0.0
- Added support for the ProgressiveSubmission API.
- Added
InitiateSubmitRequest
andProgressiveSubmitRequest
- The Conversations
PhotoUploadRequest
has been made public - Fixed Product description
- Added additional fields to Review
Examples of these requests can be found in LoadCallTestProgressiveSubmission
and the DemoApp
Please see commit for details.
- Updated compileSdkVersion and targetSdkVersion to 29
- Deprecate dryAnalytics in BVSDK
- Demo App Updates
- Fixed an issue that was preventing the curations feed from loading the next set of items.
- Fixed an issue that was causing the curations feed to have duplicates.
- Fixed NPE in GetAverageRating
- Fixed issue in RatingsDistribution where Stars outside of a 1-5 rating would cause a crash.
- Added getRatingDistributionMap to ReviewStatistics to get the map of Rating Distribution values
- Added primary filter to ReviewRequest. Reviews can be filtered by AuthorId, SubmissionId, ProductId, and CategoryAncestorId
- Added PDPContent to include statistics to ReviewRequest Builder.
- Improved capability for capturing errors and ongoing SDK improvements. SDK errors now being recorded in BVPixel.
- Added Categories and Authors to Review Include types
- Added fixes to analytics event data
Please see commit for details.
Fixed AnswerSubmissionResponse. Please see commit for details.
- Added more annotations to conversation functions
- Added more logging coverage
- Deprecated more Curation submission methods
- Added new recommendation features and analytics
- Removed support for Curation submit
- All analytics features have been migrated to BVPixel previous analytics tools have been removed.
- Migrated libraries to use AndroidX support libraries
Please see commit for details
- bvcurations: Submit is deprecated
Please see commit for details
- Updating Recommendations API compatibility
Please see commit for details
- Conversations ui features have been deprecated and moved to a new module 'ConversationsUi' Please Add this module to continue using the ui features of Conversations
- Enabled support for TLS v1.2 for devices on API versions 16-20. Support for TLS 1.2 or greater is required.
- Sort parameters can be added as part of the ProductDisplayRequest
Please see commit for details
- Review Submission photos will now be encoded as jpgs
- The Location module is deprecated
- Completed rollout of BVPixel migration
- Removed deprecated analytics schemas
Please see commits for details.
- The minSdkVersion is now 16.
- Updated support for various dependencies.
- Removed GridViews:
BVGridView, AnswersGridView, QuestionsGridView, RecommendationsGridView
- Removed ListViews:
BVListView, AnswersListView, QuestionsListView, RecommendationsListView
- Bug fix for CurationsFeedItem
- Adds support for Iovation's Deviceprint sdk 3.0
- Removes support for Iovation's Deviceprint sdk under version 3.0
Please see commit for details.
Fixed BVTransaction additional parameters issue. Please see commit for details.
Fixed GSON parsing issue for configuration. Please see commit for details.
Adding support for Analytics Routing based on user location/residence. Please see commit for details.
Add proper logic to test functionality for 6.14.1 changes. Please see commit for details.
Ameliorate logic inversion of async Conversation Submission path. Please see commit for details.
- Removed PIN module
- Removed PIN Notifications module
- Removed Advertising module
- Removed PIN API key from
BVConfig.Builder
andBVSDK.Builder
.
This are all technically breaking changes, but no one is using them, nor do they do function, so it should not affect anyone.
Added a new AuthenticationProvider
interface that should be implemented, and provided to each submission
request. e.g.
val submitReq = ReviewSubmissionReq.Builder(Action.Submit, "testProd")
.authenticationProvider(authProvider)
.build()
client.prepareCall(submitReq).loadAsync({
(resp) -> {
// all good, change Action to Submit to actually send
},
(convSubmitException) -> {
val bvErrors = convSubmitException.getErrors()
val bvFieldErrors = convSubmitException.getFieldErrors()
for (fieldError in bvFieldErrors) {
val submissionErrorCode = fieldError.getSubmissionErrorCode()
val relevantFormField = fieldError.getFormField() // gets the form field info
}
}
})
- If you are configured for BV Hosted Authentication then you should use
BVHostedAuthenticationProvider
. - If you are configured for Site Authentication then you should use
SiteAuthenticationProvider
.
For more info on how to use/create these providers, and how to check which one you are configured for,
refer to the Conversations > Content Submission
page in the docs.
Previously fetching form data and parsing form errors was difficult. Not all paths of Action
routed to the same callback, and most error paths did not have the required data to parse programmatically. All of the previous APIs for doing these things remains in the 6.x SDK for now, but has been marked as deprecated in favor of these new APIs.
val submitReq = ReviewSubmissionReq.Builder(Action.Form, "testProd") // NEW ACTION TYPE
.build()
client.prepareCall(submitReq).loadAsync({
(resp) -> {
val hasErrors = resp.getHasErrors() // not required to check anymore, always false in success
val formFields = resp.getFormFields() // null-safe list of available form options
for (formField in formFields) {
val isRequired = formField.isRequired() // indicates you must send this field
}
},
(convSubmitException) -> {
val bvErrors = convSubmitException.getErrors() // null-safe list of generic errors
val bvFormErrors = convSubmitException.getFieldErrors() // null-safe list of form errors
}
})
val submitReq = ReviewSubmissionReq.Builder(Action.Preview, "testProd")
.build()
client.prepareCall(submitReq).loadAsync({
(resp) -> {
// all good, change Action to Submit to actually send
},
(convSubmitException) -> {
val bvErrors = convSubmitException.getErrors()
val bvFieldErrors = convSubmitException.getFieldErrors()
for (fieldError in bvFieldErrors) {
val submissionErrorCode = fieldError.getSubmissionErrorCode()
val relevantFormField = fieldError.getFormField() // gets the form field info
}
}
})
Same as Test Submission, except use Action.Submit
and it actually sends.
- Added
Action.Form
for submission to route to success without required form fields.Action.Preview
andAction.Submit
will always route to failure if all required form fields are not provided - Added
ConversationsDisplayCallback
- Added
ConversationsSubmissionCallback
- Added
ConversationsException
which has#getErrors()
- Added
ConversationsSubmissionException
which has#getFieldErrors()
- Added
LoadCallDisplay#loadDisplaySync()
- Deprecated
LoadCallDisplay#loadSync()
in favor ofLoadCallDisplay#loadDisplaySync()
- Added
LoadCallDisplay#loadAsync(conversationsDisplayCallback)
- Deprecated
LoadCallDisplay#loadAsync(conversationsCallback)
in favor ofLoadCallDisplay#loadAsync(conversationsDisplayCallback)
- Added
LoadCallSubmission#loadSubmissionSync()
- Deprecated
LoadCallSubmission#loadSync()
in favor ofLoadCallSubmission#loadSubmissionSync()
- Added
LoadCallSubmission#loadAsync(conversationsSubmissionCallback)
- Deprecated
LoadCallSubmission#loadAsync(conversationsCallback)
in favor ofLoadCallSubmission#loadAsync(conversationsSubmissionCallback)
- Update
BazaarRuntimeException
to not cause StackOverflowException - Update JSON parse failure message
- Update
BVErrors
exist message - Added
BVConversationsClientTest
to test all routes - Updated Robolectric version for testing
- Added testing shadow for network security
- Added
ErrorCode
enum to parse the code strings from theErrors
JSON field - Added
Error#getErrorCode()
method for getting the enum - Added unit tests for invalid error code parsing, valid error code parsing, and generic error list parsing
- Added
SubmissionErrorCode
enum to parse the code strings from theFieldErrors
JSON field for submission - Added
FieldError#getErrorCode()
method for getting the enum - Added unit tests for invalid field error code parsing, valid field error code parsing, and generic field error list parsing
- Add
Author#getSecondaryRatingList()
- Add
BaseReview#getSecondaryRatingList()
- Add
IncludeContentBase#getBadgeList()
- Add
IncludeContentBase#getContextDataValueList()
- Fix
BaseReviewBuilder#addContextDataValueString(String dataValueName, boolean value)
to be namedBaseReviewBuilder#addContextDataValueBoolean(String dataValueName, boolean value)
- Remove empty
ReviewSubmissionRequest#newBuilder()
method - Add
ConversationsSubmissionRequest.Builder#addCustomSubmissionParameter(String key, String value)
- Add internal FormPair class to store user custom form parameters
- Add
ConversationsDisplayRequest.Builder#ConversationsDisplayRequest.Builder#addCustomDisplayParameter(String key, String value)
- Deprecated
ConversationsDisplayRequest.Builder#addAdditionalField(String key, String value)
in favor ofaddCustomDisplayParameter
- Added
FormInputType
enum to introduce a strongly typed version ofString type = FormField#getType()
. The possible values were taken from the conversations docs on input types. This will allow for easier parsing of which form fields have many options. e.g.
final FormInputType formInputType = formField.getFormInputType();
switch(formInputType) {
case FormInputType.SELECT: {
List<FormFieldOption> options = formField.getFormFieldOptions();
// present options to user
break;
}
}
- Added tests for all of the endpoints to verify they are what we expect them to be
- Updated
BulkRatingsRequest
to send with endpointstatistics.json
like it should and was before, instead ofreviews.json
- Added okhttp3 logging-interceptor
- Updated TextView to have maxLines of 5 so it won't take up the entire screen on the DemoBulkRatingsActivity screen
- Updated okhttp3 to version 3.8.0
- Added
BVConversationsClient.Builder#fingerprintProvider(fpProvider)
as an optional builder parameter
- Added
IovationFingerprint
as a class to pass to thefingerprintProvider(fpProvider)
method
- Fixed expected behavior of
ConversationsDisplayRequest.Builder#addAdditionalField(key, val)
to support one-to-many relationships of key-value pairs.
- Added multi-config support to the
BVConversationsClient
. To use it, use the newBVConversationsClient.Builder
to construct an instance, and use theBVConversationsClient.Builder#bvConfig(bvConfig)
method to provide a different config than the default provided by theBVSDK
singleton. More info available on the docs for Conversations. - Deprecated the default
BVConversationsClient
constructor. - Add multiple value support to review display filtering
- Added an additional API to optionally send an analytics event with a different
clientId
than the default provided to theBVPixel
singleton instance. More info available on the docs for BVPixel.
- Added back
ReviewStatistics
for the Products in the Includes section ofReviewsRequest
s
- Added
Question#getSyndicatedSource()
,Answer#getSyndicatedSource()
, andComment#getSyndicatedSource()
- Added
ReviewSubmissionRequest.Builder#addVideoUrl(videoUrl, optionalVideoCaption)
- Added
Question#isSyndicated()
andReview#isSyndicated
- Added
CommentSubmissionRequest
andCommentSubmissionResponse
- Added ability to include
Comment
s inAuthorsRequest
s - Added
AuthorIncludeType
to be used for includes inAuthorsRequest
s instead ofPDPContentType
- Added
CommentsRequest
andCommentsResponse
- Added
ReviewIncludeType.COMMENTS
forReviewsRequest
s
- Added
FormData
to parse form fields inConversationsCallback#onSuccess(response)
- Now routing
FormError
toConversationsCallback#onSuccess(response)
- Added
SyndicationSource
to theBaseReview
object for whenIsSyndicated
is true - Added
LoadCall#cancel()
to be able to cancel a network request - Updated
ConversationsRecyclerView
to retain a strong reference to the passed inLoadCallDisplay
object, making sure to cancel the network request, and null out theLoadCallDisplay
reference inView#onDetachedFromWindow()
. This will ensure that anonymousConversationsCallbacks
are not GC'ed before the request ends
- Fixed an issue where the results were still being used by the background thread after delivering them to the user on the UI thread, which could cause a
ConcurrentModificationException
. - Added
getSyndicated()
to theBaseReview
object so that theIsSyndicated
flag will now be parsed for reviews
- Added defaulting to Conversations Product Catalog on homepage of BV Demo app if Recommendations keys are not available
- Updated theme in both apps
BulkProductRequest
andBulkProductResponse
classes added. They are the same asProductDisplayPageRequest
andProductDisplayPageResponse
, but do not require a product id to construct.
- Added
BVSDK.builder(application, bazaarEnvironment)
static factory to build the sdk with which uses Bazaarvoice generated config files to configure the BVSDK instance for you - Deprecated
BVSDK.builder(application, clientId)
- Fixed Issue #26 - Now correctly parsing Bazaarvoice API response date fields as UTC timezone rather than local timezone
- Added analytics module with
BVPixel
interface. Now allow a simple interface to build and send analytic events without having to get into the nitty gritty of each required field - Added BVPixel under the hood for Curations analytics
- Deprecated
include=answers
which our sdk allows, but does nothing forProductDisplayPageRequest
s - Added
ConversationsDisplayRequest#addAdditionalField(String key, String value)
to matchBaseReviewBuilder#addAdditionalField(String key, String value)
- Added
ReviewIncludeType
which only containsproducts
at the moment - Added
ReviewDisplayRequestBuilder#addIncludeContent(ReviewIncludeType reviewIncludeType)
- Added Curations UI module which depends on the Curations Module
- Added
CurationsInfiniteRecyclerView
widget which manages paging network requests, as well as analytic events - Removed all old unused Curations UI Widgets
- Updated Code Sample App and Demo App to use the new
CurationsInfiniteRecyclerView
- Added
AuthorsRequest
andAuthorsResponse
to retrieve a Conversations Author Profile - Deprecated the
QuestionAndAnswerRequest.Builder#addSort(...)
in favor of the more explicitQuestionAndAnswerRequest.Builder#addQuestionSort(...)
- Added ability to sort included
Answer
s withQuestionAndAnswerRequest.Builder#addAnswerSort(...)
- Added new Code Sample App and Demo App ability to view an author by id
- Removed deprecated Conversations classes
- Fixed URL Encoding of Submission request parameters
- Added new API wrapper for
BVPixel
and removed the relevant calls fromBVSDK
- Added
PinClient
to get a list of products that have been purchased, and need to be reviewed
- Added a
PinNotificationManager
to queue a Post Interaction Notification based on a product id. These notifications are remotely configurable on our backend
- Removed notifications from the Location module itself, so that this is a stand alone dependency
- Added a new module for the base code to fetch remote notification configuration, and manage queueing
- Added new preferred way to subscribe to events, by listening to intents with an action of
com.bazaarvoice.bvandroidsdk.action.GEOFENCE_VISIT
- Added demo and code sample apps to have a cart to test
BVPixel
- Fix
FeedbackSubmissionRequest
constructor to not requireAction
parameter
- Added support for submitting feedback. You may now send helpfulness or flag inappropriate content for reviews, questions, or answers
- Fix
BrandImageLogoURL
correctly moved to Answer model - Fix
DateUtil
parsing error that occurs on Android API 16-23, and add better catching around it
- Fix
BrandImageLogoURL
missing from Question response - Fix sort parameter for
QuestionAndAnswerRequest
- Fix typo in
RatingDistribution
class - Fix
DateUtil
parser
- Make Recommendations constructor public. Recommendations was and still is available through the android View based methods, but this allows View independent access
- Added support to geo-tag custom content submission with the Curations Submission API.
This NEXUS_USER provides a refresh to the Conversations API as well new features for geofence events.
- Added Conversations for Stores support
- Added Rich Push notification support for requesting store reviews
- Added Notification support integrated with BVLocation module (store geofence support)
- Fixed some max limit bugs in Conversations Display requests for Reviews and Bulk Ratings
- Added
CurationsFeedRequest.Builder#location(latitude, longitude)
parameter to allow searching for Curations feed items by location
This NEXUS_USER provides a new module for adding location awareness to your app. This module facilitates knowing when your shoppers are entering and exiting your physical retail locations. You will be provided a very valuable opportunity to present a shopper with your location aware content. Perhaps you have a simple greeting or coupon? Aside from the value you add within your mobile experience, Bazaarvoice can use this location context to enhance our existing products. Rating and Reviews filtered down to the city level, recommended products for nearby people like you, local social media content (Curations), and more are all possible by using the Location module.
For more information, please refer to the location documentation https://bazaarvoice.github.io/bv-android-sdk/location.html
- Fixed visibility of methods that should be public
- Fixed NPE in ConversationsAnalyticsManager for response with no products
- Fixed AnswerOptions.Sort visibility from package-private to public
- Fixed Review response parsing, and updated unit tests to cover all expected response parsing
This NEXUS_USER provides a vast improvement over the current display and submission API for Conversations. The following improvements will:
- decrease implementation time
- provide deserialized responses returned in P.O.J.O (plain old java objects), as opposed to returning a raw json response string
- make error handling much simpler, (e.g. wrapping legacy conversations API implementation details so you don't have to worry about it
- provide View container objects, which makes ROI reporting much simpler
We have deprecated the BazaarRequest
class as well as any related classes to implement
Conversation the old way. For any clients migrating from the BazaarRequest
API, please refer to
the upgrade guide: https://bazaarvoice.github.io/bv-android-sdk/upgrading_conversations.html
- Fixed the implementation of the
DisplayParams#addLimitOnIncludedType(type, limitVal)
method to correctly add thetype
to thelimitType
list
- Updated root dependencies.gradle to distinguish BVSDK artifact depndencies versus Demo App dependencies
- Fix BVSDK to enforce singleton pattern
- Remove Scheduled Profile updates
- Fix version number sending for Analytics
- Sending Embedded-Pageview with prod/category id
- No more pending for advertising id in Recommendations requests
- Updated Robolectric and relevant tests
- Added
BVProduct#getPrice()
- Expose the
Profile
class - Expose the
ShopperProfile
class which contains aProfile
object
- Expose the
CurationsFeedResponse
class - Added
CurationsProduct#getId()
- Added
AndroidManifest.xml
to each module with theandroid.permission.INTERNET
permission, so gradle manifest merger should handle implicitly requesting it for users instead of needing to explicitly request it - Updated docs with instructions for the new Demo App for best practices, as well as the Code Example App. Also updated typos, etc.
- New changes to the BVAds class that require some minor code changes to migrate from 3.x to 4.x
- Ads interface removed, instead simply use the BVAds class directly
Map<String, String> getCustomTargeting()
is the only method available now throughBVAds.getCustomTargeting()
\- The methods creating Google DFP ad objects can now just be called by directly invoking the Google DFP API,
e.g.
getTargetedInterstitialAd(Context context, String adUnitId)
becomesPublisherInterstitialAd interstitialAd = new PublisherInterstitialAd(context); interstitialAd.setAdUnitId(adUnitId);
- New Support for Bazaarvoice Curations: Ability to display custom social media feeds and post photos from your mobile app. Checkout the example project
- New BVPixel - Analytics for tracking purchase and non-transaction events for ROI reporting and omnichannel profile
- Added usage pattern for BVRecommendations for fetching and displaying product recommendations
- Removed SDK dependency on Google DFP SDK. Existing clients can now more easily add 1st party data to DFP add requests.
- Fix for closing out all OkHttp ResponseBody objects
- Added
RecommendationView
to wrap a view displaying a singleBVProduct
and provide better ROI reporting and recommendations without the need to manually send off analytic events to Bazaarvoice - Added
RecommendationsContainerView
,RecommendationsListView
,RecommendationsGridView
, andRecommendationsRecyclerView
to display manyRecommendationView
s, and provide additional ROI reporting and better recommendations
- Added iovation support to BazaarRequest#postSubmission(RequestType type, BazaarParams params, OnBazaarResponse listener)
- New Module - In BETA, provides targeted shopper recommendations
- New Module - Targeted Google DFP Ads with Bazaarvoice profiles. Replaces the deprecated bv-android-ads-sdk
- Deprecated BazaarRequest constructor requiring parameters, in favor of
new no parameter constructor
- Support for Hosted Auth has been added. In SubmissionParams.java see,
- SubmissionParams#setHostedAuthCallbackUrl(String hostedAuthCallbackUrl)
- SubmissionParams#setHostedAuthEmail(String hostedAuthEmail)
- Support for Hosted Auth has been added. In SubmissionParams.java see,
- Added sample app to demonstrate the 3 different modules
- Can now install artifacts from Maven Central