Skip to content

saby/android-sabycom

Repository files navigation

android-sabycom

Быков Д. Ю. / Виджет чата поддержки для мобильных приложений

Подключение

Для подключения 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

Использование SDK

Установка виджета

  1. В вашем классе приложения в методе onCreate сконфигурируйте Sabycom, передав в качестве параметра идентификатор приложения.
class MyApp : Application() {
    override fun onCreate() {
        super.onCreate()
        Sabycom.initialize(applicationContext, "<My app id>")
    }
}
  1. В зависимости от того, есть в вашем приложении авторизация или нет, зарегистрируйте пользователя или авторизуйте анонимно.
class MyActivity : AppCompatActivity() {
   //...
   override fun onCreate(savedInstanceState: Bundle?) {
       super.onCreate(savedInstanceState)
       //...
       if (isLogined) {
           Sabycom.registerUser(
               UserData(
                   userId,
                   "Имя",
                   "Фамилия",
                   "email@google.com",
                   "79001234567"
               )
           )
       } else {
           Sabycom.registerAnonymousUser()
       }
       //...
   }
}
  1. Вам так же необходимо позаботится о том что бы между сессиями 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))
    }
  1. Чтобы показать виджет, вызовите в вашем фрагменте 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
   }
}
  1. Для получения количества непрочитанных сообщений подпишитесь на обновления счетчика с помощью метода Sabycom.unreadConversationCount(callback) с коллбеком который будет вызван при каждом изменении счетчика.
class DemoViewModel : ViewModel() {
    private val messageCounterLiveData = MutableLiveData(0)
    val messageCounter: LiveData<Int> = messageCounterLiveData

    init {
        Sabycom.unreadConversationCount { count -> messageCounterLiveData.value = count }
    }

}

Подписка на уведомления

  1. Для работы уведомлений на устройствах с поддержкой Google Mobile Services интегрируйте в ваш проект Firebase Cloud Messaging.
    Для поддержки устройств с Huawei Mobile Services интегрируйте Huawei Push Kit.
  2. Чтобы подписаться на уведомления передайте токен и тип поддерживаемых сервисов в 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() 
      } 
  3. Для обеспечения показа уведомлений реализуйте сервис, расширяющий базовый 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)
              }
          }
      }       
  4. Зарегистрируйте сервис в 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>
  5. Установите иконку для отображения в push-уведомлении. Иконка должна быть монохромной и соответствовать стандартам .
    Для создания иконки используйте Image Asset Studio.
<meta-data
    android:name="ru.tensor.sabycom.push.notification_icon"
    android:resource="@drawable/your_notification_icon"/>
  1. Вы так же можете установить какой цвет будет использоваться в push-уведомлении. По умолчанию берется атрибут colorPrimary из темы вашего приложения.
    Версии Android 6.0 и ниже используют этот цвет в качестве фона для иконки уведомления. Начиная с версии Android 7.0 помимо цвета иконки дополнительно окрашивается название приложения.
<meta-data
    android:name="ru.tensor.sabycom.push.notification_color"
    android:resource="@color/your_notification_color"/>
  1. Чтобы удалить информацию о пользователе и отписаться от уведомлений, вызовите функцию
Sabycom.logout()

About

Быков Д. Ю. / Виджет чата поддержки для мобильных приложений

Resources

Stars

Watchers

Forks

Packages

No packages published

Languages