- Carrot quest для Android
- Установка
- Обновление до версии 2.0.0
- Инициализация
- Авторизация пользователей
- Свойства пользователей и события
- Чат с оператором
- Уведомления
Carrot quest для Android поддерживает API 19 и выше.
Подробная документация по SDK доступна на developers-sdk.carrotquest.io.
На данный момент Carrot quest для Android можно установить с помощью gradle.
Для этого добавьте репозиторий в build.gradle файле проекта:
allprojects {
...
repositories {
...
maven { url "https://raw.github.com/carrotquest/android-sdk/carrotquest" }
maven { url "https://jitpack.io" }
}
}Укажите зависимости в build.gradle файле вашего приложения:
android {
...
packagingOptions {
exclude 'META-INF/*.kotlin_module'
}
}
dependencies {
...
implementation 'io.carrotquest:android-sdk:2.1.1-commonRelease'
}Библиотека использует Java 17. Если ваш проект использует версию Java ниже 17, добавьте следующие настройки:
android {
...
compileOptions {
sourceCompatibility '17'
targetCompatibility '17'
}
}Обратите внимание, что при переходе на версию 2.0.0 были внесены некоторые важные изменения в способ взаимодействия с библиотекой.
Для унификации кода с iOS SDK, в методе инициализации библиотеки исчез один параметр - appId. Теперь, наилучший способ инициализировать библиотеку выглядит так:
Carrot.setup(this, yourApiKey, object : Carrot.Callback<Boolean> {
override fun onResponse(result: Boolean) {
}
override fun onFailure(t: Throwable) {
}
})Если у вас есть авторизация пользователей, необходимо вызывать ее при старте приложения. Наилучшим местом для этого является onResponse колбэка у метода setup:
Carrot.setup(this, yourApiKey, object : Carrot.Callback<Boolean> {
override fun onResponse(result: Boolean) {
if(result) {
Carrot.auth(userId, userAuthKey, object : Carrot.Callback<String> {
override fun onResponse(result: String?) {
}
override fun onFailure(t: Throwable) {
}
})
}
}
override fun onFailure(t: Throwable) {
}
})Таким образом это предотвратит лишнее возникновение анонимных пользователей.
Для работы с Carrot quest для Android вам понадобится API Key и User Auth Key. Вы можете найти эти ключи на вкладке Настройки > Разработчикам:

Для инициализации Carrot quest вам нужно выполнить следующий код в методе onCreate() вашего приложения:
Carrot.setup(this, apiKey, callback)Для вывода дополнительной информации во время отладки используйте метод:
Carrot.setDebug(true)Если в вашем приложении присутствует авторизация пользователей, вы можете передать id пользователя в Carrot quest. Существует два способа авторизации: напрямую передать userAuthKey, передать hash генерируемый у вас на бэке. В callback при успешном входе вернется значение свойства carrot_id.
- Вход через user auth key:
Carrot.auth(userId, userAuthKey, callback)- Вход через hash:
Carrot.hashedAuth(userId, hash, callback)Чтобы сменить пользователя, нужно сначала вызвать метод деинициализации, а после завново вызвать методы ининциализации и (опционально) авторизации:
Carrot.deInit(object : Carrot.Callback<Boolean> {
override fun onResponse(result: Boolean) {
Carrot.setup(this, yourApiKey, callbackSetup)
}
override fun onFailure(t: Throwable) {
}
})Вы можете установить необходимые свойства пользователя с помощью
Carrot.setUserProperty(userProperty)
Carrot.setUserProperty(userPropertyList)Для описания свойств пользователя используйте класс UserProperty
public UserProperty(String key, String value)
public UserProperty(Operation operation, String key, String value)Более подробно про Operations можно прочитать в разделе «Cвойства пользователя».
Внимание!
Поле key не может начинаться с символа $.
Для установки системных свойств реализовано 2 класса CarrotUserProperty и EcommerceUserProperty.
Для отслеживания событий используйте
Carrot.trackEvent(eventName)Вы можете указать дополнительные параметры для события в виде JSON-строки и передать их в метод
Carrot.trackEvent(eventName, eventParams)В SDK есть возможность трекинга навигации внутри приложения для того, чтобы при необходимости запускать различные триггерные сообщения на определенных экранах. Для этого используйте метод
Carrot.trackScreen(screenName)Для передачи UTM-меток из ссылки используйте
Carrot.trackUtm(url)Метод извлекает UTM-параметры из строки запроса переданного URL, фиксирует их как события и устанавливает соответствующие свойства пользователя. Типичный сценарий использования — вызов метода при открытии приложения по диплинку:
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
intent?.data?.toString()?.let { Carrot.trackUtm(it) }
}Вы можете получить список идентификаторов непрочитанных на данный момент диалогов
Carrot.getUnreadConversations()Также можно подписаться на изменения в списке идентификаторов непрочитанных диалогов
Carrot.setUnreadConversationsCallback(callback)Вы можете дать пользователю мобильного приложения возможность перейти в чат с оператором из любого места. Это можно реализовать двумя разными путями - через плавающую кнопку, либо напрямую вызвав метод открытия чата в любое нужное время.
По своей сути - это элемент интерфейса, наследующийся от ConstraintLayout. Вы можете встроить его в свою разметку:
<io.carrotquest_sdk.android.ui.fab.FloatingButton
android:id="@+id/cq_sdk_float_button"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:cq_location_fab="BOTTOM_RIGHT"
app:cq_visibility_background="false"
app:cq_icon_fab="@drawable/ic_send"
app:cq_margin_fab="8dp"
app:cq_show_social_labels="false"
app:cq_auto_hide_fab="true"
/>У этого элемента есть свои атрибуты:
app:cq_location_fabотвечает за расположение плавающей кнопки относительно её родительского контейнера. Возможны 4 варианта -TOP_LEFT,TOP_RIGHT,BOTTOM_LEFT,BOTTOM_RIGHT. По умолчаниюBOTTOM_RIGHT.app:cq_visibility_backgroundотвечает за видимость эффекта затемнения при нажатии на плавающую кнопку. По умолчаниюtrue.app:cq_icon_fabзадаёт иконку плавающей кнопки. По умолчанию@id/ic_cq_message.app:cq_margin_fabзадаёт отступы плавающей кнопки относительно своего родительского контейнера. По умолчанию16dp.app:cq_show_social_labelsотвечает за видимость надписей рядом с иконками социальных сетей. По умолчаниюtrueapp:cq_auto_hide_fabотвечает за автоматическое скрытие кнопки чата когда интернет не доступен. По умолчаниюfalse
Доступные методы для настройки и управления поведением плавающей кнопки.
/**
* Показать плавающую кнопку
*/
public void showFab()/**
* Скрыть плавающую кнопку
*/
public void hideFab()/**
* Показать кнопки интеграции
*/
public void expandMenu()/**
* Скрыть кнопки интеграции
*/
public void collapseMenu()/**
* Установить иконку чата
* @param iconFAB Иконка
*/
public void setIconFAB(Drawable iconFAB)/**
* Установить отступы кнопки от краев экрана
* @param margin Значение отступа
*/
public void setMarginFAB(int margin)/**
* Установить расположение кнопки
* @param location Расположение кнопки
*/
public void setLocationFAB(LocationFAB location)Открыть чат можно также, вызвав из произвольного места (после инициализации) следующий код:
Carrot.openChat(context)SDK поддерживает два провайдера push-уведомлений - Firebase Cloud Messaging и HUAWEI Push Kit.
В первую очередь необходимо получить ключ и отправить его в Carrot. Вы можете найти поле для ввода ключа на вкладке Настройки > Разработчикам > Push-уведомления для SDK. Процесс настройки сервиса Firebase Cloud Messaging описан здесь
Если вы уже используете сервис Firebase Cloud Messaging для своих push-уведомлений, то для корректной работы push-уведомлений в SDK необходимо отредактировать вашу службу FirebaseMessagingService. Это необходимо для "прокидывания" токена и наших сообщений внутрь SDK. Пример:
class MyFirebaseMessagingService : FirebaseMessagingService () {
override fun onMessageReceived (message: RemoteMessage) {
val pushData: Map<String, String> = message. data
if (Carrot.isCarrotPush(pushData)) {
Carrot.sendPushNotification(pushData, this)
} else {
//Your code
}
}
override fun onNewToken (token: String) {
Carrot.sendPushToken(token)
super .onNewToken(token)
}
}Чтобы уведомления доходили до пользователям с устройствами без Google-сервисов, можно использовать службу доставки push-уведомлений от Huawei. Для начала вам нужно интегрировать HPK в свое приложение. Как это слделать можно прочитать здесь. После этого на вкладке Настройки > Разработчикам > Push-уведомления для SDK нужно указать Client ID, Client Secret и Webhook Secret. Далее, внесите изменения в службу, унаследованную от HmsMessageService. Пример:
class MyHuaweiPushKitService : HmsMessageService () {
override fun onMessageReceived (remoteMessage: RemoteMessage?) {
val pushData: Map<String, String> = remoteMessage?.dataOfMap ?: HashMap()
if (Carrot.isCarrotPush(pushData)) {
Carrot.sendPushNotification(pushData, this )
} else {
//Your code
}
}
override fun onNewToken (token: String?) {
Carrot.sendPushToken(token);
super .onNewToken(token)
}
override fun onNewToken (token: String?, p1: Bundle?) {
Carrot.sendPushToken(token);
super .onNewToken(token, p1)
}
}Иконку и цвет уведомлений о новых сообщениях можно изменить. Для установки иконки на уведомления вызовете следующий метод после инициализации SDK:
Carrot.setNotificationIcon(R.drawable.ic_notificatrion_icon);
Либо добавьте иконку с названием ic_cq_notification.xml в директорию res/drawable Для установки цвета уведомлений в файл ресурсов пропишите цвет с названием colorCqNotify и нужным вам значением:
<color name="colorCqNotify">#EF7F28</color>
Если вы хотите из любого места вашего приложения получать информацию о новых сообщениях в SDK, то вы можете реализовать BroadcastReceiver. Пример реализации:
public class MyNewMessageBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
if(intent.hasExtra(NotificationsConstants.CQ_SDK_NEW_MESSAGE_ARG)) {
IncomingMessage incomingMessage = (IncomingMessage) intent.getSerializableExtra(NotificationsConstants.CQ_SDK_NEW_MESSAGE_ARG);
if (incomingMessage != null) {
Toast.makeText(context, incomingMessage.getText(), Toast.LENGTH_SHORT).show();
}
}
}
}IncomingMessage - класс, который описывает входящее сообщение.
Далее нужно зарегистрировать его:
MyNewMessageBroadcastReceiver messageReceiver = new MyNewMessageBroadcastReceiver();
IntentFilter filter = new IntentFilter();
filter.addAction(NotificationsConstants.CQ_SDK_NEW_MESSAGE_ACTION);
registerReceiver(messageReceiver, filter);Важно! Если приложение закрыто и пользователь откроет чат по нажатию на пуш, то ваша стартовая активность не запустится. Приложение закроется вместе с закрытием чата. Чтобы исправить это, вы можете передать полное имя активности, которая должна запуститься при закрытии чата:
Carrot.setParentActivityClassName("io.test.MainActivity");Существуют методы отписать конкретного пользователя от пушей и от всех рассылок в принципе.
Метод для отписки от пушей:
Carrot.pushNotificationsUnsubscribe()Метод для отписки от всех рассылок:
Carrot.pushCampaignsUnsubscribe()