0

我已经集成了 mesibo 聊天并尝试集成 mesibo 推送通知但没有收到通知。我已经设置了所有与推送通知相关的东西,并且已经成功地与后端集成。不知道为什么我无法收到来自 mesibo 相关新聊天和新通话的通知。

这是我的代码:


    package com.project.bucynapp.ui.message
    
    import android.content.Context
    import android.content.Intent
    import android.os.Bundle
    import android.util.Log
    import android.view.View
    import androidx.appcompat.app.AppCompatActivity
    import androidx.core.content.ContextCompat
    import androidx.recyclerview.widget.LinearLayoutManager
    import com.mesibo.api.Mesibo.*
    import com.mesibo.calls.api.MesiboCall
    import com.project.bucynapp.R
    import com.project.bucynapp.models.*
    import com.project.bucynapp.ui.message.adapter.ChatListAdapter
    import com.project.bucynapp.ui.message.presenter.ChatListPresenter
    import com.project.bucynapp.ui.message.view.ChatListView
    import com.project.bucynapp.utils.*
    import com.squareup.picasso.Picasso
    import kotlinx.android.synthetic.main.activity_chat_list.*
    import kotlinx.android.synthetic.main.app_bar.toolbar
    import kotlinx.android.synthetic.main.app_bar_chat_list.*
    import kotlinx.android.synthetic.main.loading_view.*
    
    class ChatListActivity : AppCompatActivity(), View.OnClickListener, ChatListView,
        MessageListener, ConnectionListener, SyncListener {
    
        private lateinit var presenter: ChatListPresenter
        private lateinit var chatListAdapter: ChatListAdapter
        private var chatList: MutableList<ChatModel> = mutableListOf()
    
        private val layoutManager = LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false)
    
        private lateinit var readSession: ReadDbSession
        private var userMesibo: MesiboAccountData? = null
        var userProfile: UserProfile? = null
        private var imageProfile: String? = null
        private var nameProfile: String? = null
        private var userId: Int = 0
        private var email: String? = null
    
        companion object {
            private const val USER_ID = "user_id"
            private const val IMAGE_PROFILE = "img_profile"
            private const val NAME_PROFILE = "name_profile"
            private val TAG = ChatListActivity::class.java.canonicalName
    
            fun startActivity(
                context: Context,
                userId: Int?,
                imageProfile: String,
                nameProfile: String
            ) {
                Intent(context, ChatListActivity::class.java).apply {
                    putExtra(USER_ID, userId)
                    putExtra(IMAGE_PROFILE, imageProfile)
                    putExtra(NAME_PROFILE, nameProfile)
                    context.startActivity(this)
                }
            }
        }
    
        private val message: String
            get() = edtSendChat.text.toString()
    
        override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
            setContentView(R.layout.activity_chat_list)
            initToolbar()
            userMesibo = ApplicationPrefs.get(Constant.MESIBO_USER)
            presenter = ChatListPresenter(this)
    
            userId = intent.getIntExtra(USER_ID, 0)
            imageProfile = intent.getStringExtra(IMAGE_PROFILE)
            nameProfile = intent.getStringExtra(NAME_PROFILE)
    
            chatListAdapter = ChatListAdapter(chatList)
            rvChatList.adapter = chatListAdapter
            rvChatList.layoutManager = layoutManager
            rvChatList.addItemDecoration(DefaultItemDecoration(spacing = 10.dp, includeEdge = true))
    
            tvName.text = nameProfile
    
            Picasso.get().load(imageProfile)
                .error(R.drawable.com_facebook_profile_picture_blank_square)
                .placeholder(R.drawable.com_facebook_profile_picture_blank_square).into(imgProfile)
    
            presenter.getEmailUser(userId)
        }
    
        private fun initToolbar() {
            setSupportActionBar(toolbar)
            val backArrow = ContextCompat.getDrawable(this, R.drawable.ic_back_black)
            supportActionBar?.setHomeAsUpIndicator(backArrow)
            supportActionBar?.setDisplayHomeAsUpEnabled(true)
            supportActionBar?.setDisplayShowHomeEnabled(true)
            supportActionBar?.setDisplayShowTitleEnabled(false)
            tvSeeProfile.setOnClickListener(this)
            imgCalling.setOnClickListener(this)
            imgVideoCall.setOnClickListener(this)
            imgSendChat.setOnClickListener(this)
            tilChat.setStartIconOnClickListener {
                NotMatchActivity.startActivity(this)
            }
        }
    
        override fun onSupportNavigateUp(): Boolean {
            onBackPressed()
            return true
        }
    
        override fun getChatListSuccess(response: MutableList<DataAttributes>) {
        }
    
        override fun getChatListFailed(message: String) {
        }
    
        override fun successPost(response: SuccessModel?) {
        }
    
        override fun failedPost(message: String) {
            shortToast(message)
        }
    
        override fun onGetEmailUser(data: UserEmailResponse?) {
            email = data?.email
            startMesibo()
            email?.let { loadFromDb(it) }
        }
    
        override fun onLoading(isShow: Boolean) {
            if (isShow) {
                rvChatList.gone()
                loadingView.visible()
            } else {
                rvChatList.visible()
                loadingView.gone()
            }
        }
    
        override fun onNoData(msg: String?) {
            shortToast(msg.toString())
        }
    
        override fun onBadRequest(msg: String?) {
            shortToast(msg.toString())
        }
    
        override fun onUnauthorized(msg: String?) {
            shortToast(msg.toString())
            badToken()
        }
    
        override fun onClick(v: View?) {
            when (v) {
                imgSendChat -> if (message.isNotBlank()) onSendMessage()
    
                tvSeeProfile -> {
                    UserProfileActivity.startActivity(this, userId)
                }
                imgCalling -> MesiboCall.getInstance().callUi(this, email, false)
                imgVideoCall -> MesiboCall.getInstance().callUi(this, email, true)
            }
        }
    
        override fun Mesibo_onMessage(p0: MessageParams?, p1: ByteArray?): Boolean {
    
            val type: Int = if (p0?.isIncoming == true) 0 else 1
            val msg = String(p1!!)
            chatList.add(
                ChatModel(
                    id = p0!!.mid,
                    msg = msg,
                    date = p0.ts,
                    type = type,
                    status = p0.status
                )
            )
    
            chatListAdapter.notifyItemInserted(chatList.size)
            layoutManager.scrollToPositionWithOffset(chatList.size - 1, 0)
    
            return true
        }
    
        override fun Mesibo_onMessageStatus(p0: MessageParams?) {
            chatList.find { p0?.mid == it.id }?.status = p0?.status
            chatListAdapter.notifyDataSetChanged()
            Log.i("TAG", "Mesibo_onMessageStatus: ${p0?.status}}")
    
        }
    
        override fun Mesibo_onActivity(p0: MessageParams?, p1: Int) {
            Log.i("TAG", "Mesibo_onActivity: $p1")
            when (p1) {
                ACTIVITY_ONLINE -> {
                    imgDotOnline.visible()
                    imgDotOffline.gone()
                    Log.i(TAG, "MESIBO_ACTIVITY: activity on")
                }
                ACTIVITY_TYPING -> Log.i(TAG, "MESIBO_ACTIVITY: user typing")
                else -> {
                    imgDotOnline.gone()
                    imgDotOffline.visible()
                    Log.i(TAG, "Mesibo_onActivity: $p1")
                }
    
            }
        }
    
        override fun Mesibo_onLocation(p0: MessageParams?, p1: Location?) {}
    
        override fun Mesibo_onFile(p0: MessageParams?, p1: FileInfo?) {}
    
        override fun Mesibo_onConnectionStatus(p0: Int) {
            when (p0) {
                STATUS_ONLINE -> {
                    setPushToken(ApplicationPrefs.tokenFcm)
                    tvConnectionStatus.gone()
                    Log.d(TAG, "MESIBO_CONNECTION_STATUS: online")
                }
                STATUS_OFFLINE -> {
                    tvConnectionStatus.gone()
                    Log.d(TAG, "MESIBO_CONNECTION_STATUS: offline")
                }
                STATUS_CONNECTING -> {
                    tvConnectionStatus.visible()
                    tvConnectionStatus.text = getString(R.string.connecting)
                    Log.d(TAG, "MESIBO_CONNECTION_STATUS: offline")
                }
                STATUS_CONNECTFAILURE, STATUS_NONETWORK -> {
                    tvConnectionStatus.visible()
                    tvConnectionStatus.text = getString(R.string.mesibo_connect_fail_msg)
                }
                else -> {
                    Log.d(TAG, "MESIBO_CONNECTION_STATUS: $p0")
                    Log.d(TAG, "MESIBO_TOKEN: ${userMesibo?.token}")
                }
            }
        }
    
        override fun Mesibo_onSync(p0: Int) {
            if (p0 <= 0) return
            readSession.read(p0)
        }
    
    
        private fun onSendMessage() {
            val p = MessageParams()
            p.profile = userProfile
            p.peer = email
            p.mid = random()
            p.flag = FLAG_DELIVERYRECEIPT or FLAG_READRECEIPT
            sendMessage(p, p.mid, message)
    
            chatList.add(
                ChatModel(
                    id = p.mid,
                    msg = edtSendChat.text.toString(),
                    date = getTimestamp(),
                    type = 1,
                    status = 0
                )
            )
    
            chatListAdapter.notifyItemInserted(chatList.lastIndex)
            layoutManager.scrollToPositionWithOffset(chatList.size - 1, 0)
            edtSendChat.text?.clear()
        }
    
        private fun loadFromDb(address: String) {
            setAppInForeground(this, ChatListActivity.hashCode(), true)
            readSession = ReadDbSession(address, this)
            readSession.enableReadReceipt(true)
            readSession.enableCalls(false)
            readSession.enableIncomingCalls(false)
            readSession.enableMissedCalls(false)
            readSession.enableOutgoingCalls(false)
            readSession.enableFifo(true)
            readSession.read(500)
    
        }
    
        private fun startMesibo() {
            addListener(this)
            setSecureConnection(true)
            setAccessToken(userMesibo?.token)
            setDatabase("db_mesibo", 0)
            start()
    
            userProfile = UserProfile()
            userProfile?.address = email
            setUserProfile(userProfile, true)
        }
    }

关于如何解决和调试的任何线索?这是我的环境:

美西博 AP = 2.7.0

构建工具 = 29.0.0

编译 SDK 版本 = 30

appid = com.project.bucynapp

谢谢!

4

1 回答 1

0

您是否尝试过自定义脚本或 mesibo webhook 来调试问题?您是否参考了 mesibo 推送通知文档中的故障排除部分?

https://mesibo.com/documentation/api/push-notifications/

除非您发布日志和已采取的步骤,否则我们不知道发生了什么。

于 2021-04-07T08:37:51.910 回答