Быков Д. Ю. / Виджет чата поддержки для мобильных приложений
Для подключения SDK в фале build.gradle вашего модуля в секции dependencies необходимо добавить зависимость implementation 'ru.tensor.sabycom:sabycom:21.6219.63':
dependencies {
//...
implementation 'ru.tensor.sabycom:sabycom:21.6219.63'
//...
}
- sabycom - Исходный код SDK
- sabycomdemo - Пример реализации приложения с использованием SDK
- В вашем классе приложения в методе onCreate сконфигурируйте Sabycom, передав в качестве параметра идентификатор приложения.
class MyApp : Application() {
override fun onCreate() {
super.onCreate()
Sabycom.initialize(applicationContext, "<My app id>")
}
}
- В зависимости от того, есть в вашем приложении авторизация или нет, зарегистрируйте пользователя или авторизуйте анонимно.
class MyActivity : AppCompatActivity() {
//...
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
//...
if (isLogined) {
Sabycom.registerUser(
UserData(
userId,
"Имя",
"Фамилия",
"email@google.com",
"79001234567"
)
)
} else {
Sabycom.registerAnonymousUser()
}
//...
}
}
- Вам так же необходимо позаботится о том что бы между сессиями userId для зарегестрированного пользователя был одинаковым. Например:
fun getUserId(): UUID{
val sharedPreferences = getSharedPreferences("PrefName", MODE_PRIVATE)
var userIdString = sharedPreferences.getString("UserIdKey",null)
if (userIdString == null){
userIdString = UUID.randomUUID().toString()
// edit is extensions from androidx
sharedPreferences.edit {
putString("UserIdKey",userIdString)
}
}
return requireNotNull(UUID.fromString(userIdString))
}
- Чтобы показать виджет, вызовите в вашем фрагменте
Sabycom.show(activity)
. Чтобы скрыть виджет, вызовитеSabycom.hide()
.
class DemoFragment : Fragment() {
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View {
val binding = DemoFragmentBinding.inflate(inflater)
binding.showSabycom.setOnClickListener {
Sabycom.show(requireActivity() as AppCompatActivity)
}
return binding.root
}
}
- Для получения количества непрочитанных сообщений подпишитесь на обновления счетчика с помощью метода
Sabycom.unreadConversationCount(callback)
с коллбеком который будет вызван при каждом изменении счетчика.
class DemoViewModel : ViewModel() {
private val messageCounterLiveData = MutableLiveData(0)
val messageCounter: LiveData<Int> = messageCounterLiveData
init {
Sabycom.unreadConversationCount { count -> messageCounterLiveData.value = count }
}
}
- Для работы уведомлений на устройствах с поддержкой
Google Mobile Services
интегрируйте в ваш проект Firebase Cloud Messaging.
Для поддержки устройств сHuawei Mobile Services
интегрируйте Huawei Push Kit. - Чтобы подписаться на уведомления передайте токен и тип поддерживаемых сервисов в Sabycom с помощью метода
Sabycom.sendToken(token, serviceType)
.- Google Mobile Services
FirebaseMessaging.getInstance() .token .addOnSuccessListener { token -> Sabycom.sendToken(token, ServiceType.GOOGLE) }.addOnFailureListener { exception -> exception.printStackTrace() }
- Huawei Mobile Services
Tasks.callInBackground { val appId = getAppId(context) HmsInstanceId.getInstance(context).getToken(appId, HmsMessaging.DEFAULT_TOKEN_SCOPE) }.addOnSuccessListener(TaskExecutors.immediate()) { token -> if (!token.isNullOrEmpty()) { Sabycom.sendToken(token, ServiceType.HUAWEI) } }.addOnFailureListener(TaskExecutors.immediate()) { exception -> exception.printStackTrace() }
- Google Mobile Services
- Для обеспечения показа уведомлений реализуйте сервис, расширяющий базовый MessagingService.
В методеonMessageReceived
проверьте принадлежность данных push-сообщения виджету с помощью методаSabycom.isSabycomPushNotification(payload)
. В случае если данные содержат информацию для отображения Sabycom уведомления метод вернет true и вам необходимо вызвать методSabycom.handlePushNotification(payload)
для показа этого уведомления.
В методеonNewToken
вам необходимо передать обновленный токен в Sabycom посредством вызоваSabycom.sendToken(token, serviceType)
.- Google Mobile Services
internal class YourPushMessagingService : FirebaseMessagingService() { override fun onMessageReceived(message: RemoteMessage) { val payload = message.data // Проверяет, пришел push от Sabycom или от другого сервиса if (Sabycom.isSabycomPushNotification(payload)) { // Показывает всплывающее уведомление с новым сообщением Sabycom.handlePushNotification(payload) } else { //... } } override fun onNewToken(token: String) { Sabycom.sendToken(token, ServiceType.GOOGLE) } }
- Huawei Mobile Services
internal class YourPushMessagingService : HmsMessageService() { override fun onMessageReceived(message: RemoteMessage?) { super.onMessageReceived(message) val payload = message?.dataOfMap // Проверяет, пришел push от Sabycom или от другого сервиса if (payload != null && Sabycom.isSabycomPushNotification(payload)) { // Показывает всплывающее уведомление с новым сообщением Sabycom.handlePushNotification(payload) } else { //... } } override fun onNewToken(token: String?) { super.onNewToken(token) if (!token.isNullOrEmpty()) { Sabycom.sendToken(token, ServiceType.HUAWEI) } } }
- Google Mobile Services
- Зарегистрируйте сервис в
AndroidManifest.xml
.- Google Mobile Services
<service android:name=".push.YourPushMessagingService" android:exported="false"> <intent-filter> <action android:name="com.google.firebase.MESSAGING_EVENT" /> </intent-filter> </service>
- Huawei Mobile Services
<service android:name=".push.YourPushMessagingService" android:exported="false"> <intent-filter> <action android:name="com.huawei.push.action.MESSAGING_EVENT" /> </intent-filter> </service>
- Google Mobile Services
- Установите иконку для отображения в push-уведомлении. Иконка должна быть монохромной и соответствовать стандартам .
Для создания иконки используйте Image Asset Studio.
<meta-data
android:name="ru.tensor.sabycom.push.notification_icon"
android:resource="@drawable/your_notification_icon"/>
- Вы так же можете установить какой цвет будет использоваться в push-уведомлении. По умолчанию берется атрибут
colorPrimary
из темы вашего приложения.
Версии Android 6.0 и ниже используют этот цвет в качестве фона для иконки уведомления. Начиная с версии Android 7.0 помимо цвета иконки дополнительно окрашивается название приложения.
<meta-data
android:name="ru.tensor.sabycom.push.notification_color"
android:resource="@color/your_notification_color"/>
- Чтобы удалить информацию о пользователе и отписаться от уведомлений, вызовите функцию
Sabycom.logout()