Configure User Feedback

Learn about general User Feedback configuration fields.

The User Feedback Widget offers many customization options, and if the available options are insufficient, you can use your own UI.

Some hooks are available so you can react to the user opening and closing the form, when the user successfully submits the form or when there is an error:

HookTypeDescription
onFormOpen() -> VoidCalled when the feedback form is opened.
onFormClose() -> VoidCalled when the feedback form is closed.
onSubmitSuccess(Feedback) -> VoidCalled when feedback is successfully submitted via the prepared form.
onSubmitError(Feedback) -> VoidCalled when there is an error submitting feedback via the prepared form.

onSubmitSuccess and onSubmitError forward the feedback object that was submitted, which contains the following properties:

  • message: The message the user entered in the feedback form.
  • name: The name the user entered in the feedback form.
  • contactEmail: The email the user entered in the feedback form.

Example:

Copied
SentryAndroid.init(context, options -> {
    options.getFeedbackOptions().setOnFormOpen(() -> System.out.println("Form opened"));
    options.getFeedbackOptions().setOnFormClose(() -> System.out.println("Form closed"));
    options.getFeedbackOptions().setOnSubmitSuccess((feedback) -> System.out.println("Feedback submitted successfully: " + feedback.toString()));
    options.getFeedbackOptions().setOnSubmitError((feedback) -> System.out.println("Failed to submit feedback: " + feedback.toString()));
});

You can customize which form elements are shown, whether they are required, and even prefill some info, in SentryOptions.SentryFeedbackOptions:

OptionTypeDefaultDescription
showBrandingBooltrueDisplays the Sentry logo inside the form
isNameRequiredBoolfalseRequires the name field on the feedback form to be filled in.
showNameBooltrueDisplays the name field on the feedback form. Ignored if isNameRequired is true.
isEmailRequiredBoolfalseRequires the email field on the feedback form to be filled in.
showEmailBooltrueDisplays the email field on the feedback form. Ignored if isEmailRequired is true.
useSentryUserBooltrueSets the email and name fields to the corresponding Sentry SDK user fields that were called with SentrySDK.setUser.

Example:

AndroidManifest.xml
Copied
<application>
    <meta-data
    android:name="io.sentry.feedback.is-name-required"
    android:value="true"
  />
    <meta-data
    android:name="io.sentry.feedback.show-name"
    android:value="false"
  />
    <meta-data
    android:name="io.sentry.feedback.is-email-required"
    android:value="false"
  />
    <meta-data
    android:name="io.sentry.feedback.show-email"
    android:value="false"
  />
    <meta-data
    android:name="io.sentry.feedback.use-sentry-user"
    android:value="false"
  />
    <meta-data
    android:name="io.sentry.feedback.show-branding"
    android:value="false"
  />
</application>

You can customize tha labels and placeholders used in the form. Note: manifest options are not supported here, due to internationalization:

OptionTypeDefaultDescription
formTitleString"Report a Bug"The title of the feedback form.
messageLabelString"Description"The label of the feedback description input field.
messagePlaceholderString"What's the bug? What did you expect?"The placeholder in the feedback description input field.
isRequiredLabelString" (Required)"The text to attach to the title label for a required field.
successMessageTextString"Thank you for your report!"The message displayed after a successful feedback submission.
nameLabelString"Name"The label next to the name input field.
namePlaceholderString"Your Name"The placeholder in the name input field.
emailLabelString"Email"The label next to the email input field.
emailPlaceholderString"your.email@example.org"The placeholder in the email input field.
submitButtonLabelString"Send Bug Report"The label of the submit button.
cancelButtonLabelString"Cancel"The label of the cancel button.

Example:

Copied
SentryAndroid.init(context, options -> {
    options.getFeedbackOptions().setFormTitle("We want to hear from you!");
    options.getFeedbackOptions().setMessageLabel("Feedback");
    options.getFeedbackOptions().setMessagePlaceholder("Type your feedback");
    options.getFeedbackOptions().setIsRequiredLabel(" *");
    options.getFeedbackOptions().setSuccessMessageText("Thanks for the feedback!");
    options.getFeedbackOptions().setNameLabel("Full Name");
    options.getFeedbackOptions().setNamePlaceholder("Type your full name");
    options.getFeedbackOptions().setEmailLabel("Email Address");
    options.getFeedbackOptions().setEmailPlaceholder("Type your email");
    options.getFeedbackOptions().setSubmitButtonLabel("Submit");
    options.getFeedbackOptions().setCancelButtonLabel("Back");
});

The User Feedback form integrates with the app theme by default, and can be customized with a custom xml style. Here are the attributes used by the form:

Android style attributeDescription
android:windowTitleStyleStyle of the feedback dialog title
android:textColorColor of title, cancel button text, and non-editable texts.
android:editTextColorColor of editable texts.
android:textColorHintColor of the hint of editable texts.
android:textColorPrimaryInverseColor of the send button text.
android:colorPrimaryBackground color of the send button.
android:colorBackgroundBackground color of the cancel button.
android:colorForegroundColor tint of the image logo.

The theme used by the form is the one set in the application theme as the android:dialogTheme. Since the SentryUserFeedbackDialog extends AlertDialog, a custom theme can be also set when instantiating it:

Copied
SentryUserFeedbackDialog dialog = new SentryUserFeedbackDialog(context, R.style.MyAppDialogTheme);

Here is an example of how the feedback form can be customized:

styles.xml
Copied
<!-- Application theme. -->
<style name="MyAppTheme" parent="Theme.MaterialComponents.DayNight.DarkActionBar">
  <!-- ... Current theme customizations ... -->

  <!-- Set a dialog theme if not already done. -->
  <item name="android:dialogTheme">@style/MyAppDialogTheme</item>
</style>

<!-- Edit application dialog theme. -->
<style name="MyAppDialogTheme" parent="Theme.MaterialComponents.DayNight.Dialog">
  <!-- Set the style of the feedback dialog title. -->
  <item name="android:windowTitleStyle">@style/FeedbackFormTitleStyle</item>

  <!-- Set the color of title, cancel button text, and non editable texts. -->
  <item name="android:textColor">@color/colorPrimary</item>
  <!-- Set the color of editable texts. -->
  <item name="android:editTextColor">@color/colorPrimaryDark</item>
  <!-- Set the color of the hint of editable texts. -->
  <item name="android:textColorHint">@color/colorPrimaryDark</item>
  <!-- Set the color of the send button text. -->
  <item name="android:textColorPrimaryInverse">@android:color/white</item>

  <!-- Set the background color of the send button. -->
  <item name="android:colorPrimary">@color/colorPrimary</item>
  <!-- Set the background color of the cancel button. -->
  <item name="android:colorBackground">@android:color/black</item>
  <!-- Set the color tint of the image logo. -->
  <item name="android:colorForeground">@color/colorPrimary</item>
</style>

<style name="FeedbackFormTitleStyle">
  <!-- Customize your theme here. -->
  <item name="android:textAppearance">@style/TextAppearance.AppCompat.Title</item>
</style>

You can also use your own UI components to gather feedback and pass the feedback data object to the Sentry.captureFeedback(Feedback) function.

Copied
import io.sentry.Sentry;
import io.sentry.protocol.Feedback;

Feedback feedback = new Feedback("I encountered a bug while using the app.");
feedback.setName("John Doe");
feedback.setContactEmail("john.doe@example.com");
Sentry.captureFeedback(feedback);
Was this helpful?
Help improve this content
Our documentation is open source and available on GitHub. Your contributions are welcome, whether fixing a typo (drat!) or suggesting an update ("yeah, this would be better").