forked from eatvio/eatvio_app
feat(video_calls): fixed ios and HMS pushes for calls
This commit is contained in:
@@ -2,11 +2,14 @@ package com.eatvioapp.app
|
||||
|
||||
import android.app.PendingIntent
|
||||
import android.content.Intent
|
||||
import android.os.Bundle
|
||||
import android.util.Log
|
||||
import androidx.core.app.NotificationCompat
|
||||
import androidx.core.app.NotificationManagerCompat
|
||||
import com.hiennv.flutter_callkit_incoming.CallkitConstants
|
||||
import com.huawei.hms.push.HmsMessageService
|
||||
import com.huawei.hms.push.RemoteMessage
|
||||
import java.util.HashMap
|
||||
|
||||
class HmsPushService : HmsMessageService() {
|
||||
override fun onNewToken(token: String?) {
|
||||
@@ -20,6 +23,11 @@ class HmsPushService : HmsMessageService() {
|
||||
|
||||
if (message == null) return
|
||||
|
||||
if (isIncomingVideoCall(message.dataOfMap)) {
|
||||
showIncomingVideoCallNotification(message.dataOfMap)
|
||||
return
|
||||
}
|
||||
|
||||
// Берём action_url из data-поля, если оно есть.
|
||||
val actionUrl = message.dataOfMap["action_url"]
|
||||
|
||||
@@ -57,6 +65,83 @@ class HmsPushService : HmsMessageService() {
|
||||
|
||||
NotificationManagerCompat.from(context).notify(message.messageId.hashCode(), notification)
|
||||
}
|
||||
|
||||
private fun isIncomingVideoCall(data: Map<String, String>): Boolean {
|
||||
val rawType = data["type"]
|
||||
?: data["notification_type"]
|
||||
?: data["event"]
|
||||
?: data["action"]
|
||||
?: data["push_type"]
|
||||
?: data["call_type"]
|
||||
val type = rawType?.lowercase()?.replace("-", "_")
|
||||
return type?.contains("video_call") == true &&
|
||||
!type.contains("end") &&
|
||||
!type.contains("ended")
|
||||
}
|
||||
|
||||
private fun showIncomingVideoCallNotification(data: Map<String, String>) {
|
||||
val conversationUuid = data["conversationUuid"]
|
||||
?: data["conversation_uuid"]
|
||||
?: data["conversation_id"]
|
||||
?: data["chat_uuid"]
|
||||
?: data["uuid"]
|
||||
?: return
|
||||
val callerName = data["counterpartName"]
|
||||
?: data["counterpart_name"]
|
||||
?: data["caller_name"]
|
||||
?: data["callerName"]
|
||||
?: data["nameCaller"]
|
||||
?: data["caller"]
|
||||
?: "Итвио"
|
||||
val avatarUrl = data["counterpartAvatarUrl"]
|
||||
?: data["counterpart_avatar_url"]
|
||||
?: data["avatar"]
|
||||
?: data["avatarUrl"]
|
||||
?: data["avatar_url"]
|
||||
?: data["caller_avatar"]
|
||||
?: ""
|
||||
val localParticipantName = data["localParticipantName"]
|
||||
?: data["local_participant_name"]
|
||||
|
||||
val extra = HashMap<String, Any?>()
|
||||
extra["conversationUuid"] = conversationUuid
|
||||
extra["counterpartName"] = callerName
|
||||
if (avatarUrl.isNotBlank()) {
|
||||
extra["counterpartAvatarUrl"] = avatarUrl
|
||||
}
|
||||
if (!localParticipantName.isNullOrBlank()) {
|
||||
extra["localParticipantName"] = localParticipantName
|
||||
}
|
||||
|
||||
val callData = Bundle().apply {
|
||||
putString(CallkitConstants.EXTRA_CALLKIT_ID, conversationUuid)
|
||||
putString(CallkitConstants.EXTRA_CALLKIT_NAME_CALLER, callerName)
|
||||
putString(CallkitConstants.EXTRA_CALLKIT_APP_NAME, "Итвио")
|
||||
putString(CallkitConstants.EXTRA_CALLKIT_HANDLE, conversationUuid)
|
||||
putString(CallkitConstants.EXTRA_CALLKIT_AVATAR, avatarUrl)
|
||||
putInt(CallkitConstants.EXTRA_CALLKIT_TYPE, 0)
|
||||
putLong(CallkitConstants.EXTRA_CALLKIT_DURATION, 45000L)
|
||||
putString(CallkitConstants.EXTRA_CALLKIT_TEXT_ACCEPT, "Answer")
|
||||
putString(CallkitConstants.EXTRA_CALLKIT_TEXT_DECLINE, "Decline")
|
||||
putSerializable(CallkitConstants.EXTRA_CALLKIT_EXTRA, extra)
|
||||
putSerializable(CallkitConstants.EXTRA_CALLKIT_HEADERS, HashMap<String, Any?>())
|
||||
putBoolean(CallkitConstants.EXTRA_CALLKIT_IS_CUSTOM_NOTIFICATION, true)
|
||||
putBoolean(CallkitConstants.EXTRA_CALLKIT_IS_CUSTOM_SMALL_EX_NOTIFICATION, false)
|
||||
putBoolean(CallkitConstants.EXTRA_CALLKIT_IS_SHOW_LOGO, false)
|
||||
putBoolean(CallkitConstants.EXTRA_CALLKIT_IS_SHOW_CALL_ID, false)
|
||||
putString(CallkitConstants.EXTRA_CALLKIT_RINGTONE_PATH, "system_ringtone_default")
|
||||
putString(CallkitConstants.EXTRA_CALLKIT_BACKGROUND_COLOR, "#2787F5")
|
||||
putString(CallkitConstants.EXTRA_CALLKIT_ACTION_COLOR, "#2787F5")
|
||||
putString(CallkitConstants.EXTRA_CALLKIT_TEXT_COLOR, "#ffffff")
|
||||
putBoolean(CallkitConstants.EXTRA_CALLKIT_IS_SHOW_FULL_LOCKED_SCREEN, false)
|
||||
putBoolean(CallkitConstants.EXTRA_CALLKIT_IS_FULL_SCREEN, false)
|
||||
}
|
||||
|
||||
val intent = com.hiennv.flutter_callkit_incoming.CallkitIncomingBroadcastReceiver
|
||||
.getIntent(this, CallkitConstants.ACTION_CALL_INCOMING, callData)
|
||||
.addFlags(Intent.FLAG_RECEIVER_FOREGROUND)
|
||||
sendBroadcast(intent)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user