微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Android,FirebaseMessagingService:接收方未收到发件人的请求,反之亦然

如何解决Android,FirebaseMessagingService:接收方未收到发件人的请求,反之亦然

我正在尝试为我的应用创建通话功能。它使用Cloud Messaging来管理请求。

我创建了两个活动1.IncomingCall 2.OutgoingCall。 当发送方呼叫接收方时,incomingCall活动弹出(到接收方)。呼出时发给发件人。

我设法向接收者发送了一个请求,活动如期弹出。 但是,当接收方拒绝/接受呼叫时,发送方的设备不会通过通过broadcastReceiver接收请求来退出呼叫。但是,当发送方断开连接时,接收方的设备会收到请求,然后退出活动。

CloudMessagingService的onMessageReceived

public class CloudMessagingService extends FirebaseMessagingService {
.
.
.
.

@Override
    public void onMessageReceived(RemoteMessage remoteMessage) {
        super.onMessageReceived(remoteMessage);

        String type = remoteMessage.getData().get(Constants.MSG_TYPE);
        ...

            if(type.equals(Constants.MSG_INVITATION_RESPONSE)){
                Intent intent = new Intent(Constants.MSG_INVITATION_RESPONSE);
                intent.putExtra(Constants.MSG_INVITATION_RESPONSE,remoteMessage.getData().get(Constants.MSG_INVITATION_RESPONSE));
                LocalbroadcastManager.getInstance(getApplicationContext()).sendbroadcast(intent);
            }
        }
}

IncomingCall


private void sendResponse(String type,String receiverToken){

        try {
            JSONArray tokens = new JSONArray();
            tokens.put(receiverToken);

            JSONObject body = new JSONObject();
            JSONObject data = new JSONObject();

            data.put(Constants.MSG_TYPE,Constants.MSG_INVITATION_RESPONSE);
            data.put(Constants.MSG_INVITATION_RESPONSE,type);


            body.put(Constants.MSG_DATA,data);
            body.put(Constants.MSG_REG_IDS,tokens);

            sendRemoteMessage(body.toString(),type);
        }
        catch (Exception e){
            Toast.makeText(getApplicationContext(),"Error:"+e.getMessage(),Toast.LENGTH_SHORT).show();
            Log.d("FCM",e.getMessage()+"__FCM");
            finish();
        }


    }

sendRemoteMessage()用于拒绝并接受呼叫按钮的onClickListener

OutgoingCall的broadcastReceiver 我想这是问题开始的地方 它不会生成日志。

private broadcastReceiver callResponseReceiver = new broadcastReceiver() {
        @Override
        public void onReceive(Context context,Intent intent) {
            String type = intent.getStringExtra(Constants.MSG_INVITATION_RESPONSE);
            Log.d("FCM",type+"__FCM");
            if (type != null){
                Log.d("FCM",type+"__FCM");
                if(type.equals(Constants.MSG_INVITATION_ACCEPTED)){
                    Toast.makeText(getApplicationContext(),"Call Accepted!",Toast.LENGTH_SHORT).show();
                }
                else if(type.equals(Constants.MSG_INVITATION_REJECTED)){
                Toast.makeText(getApplicationContext(),"Call Rejected!",Toast.LENGTH_SHORT).show();
                finish();
                }
            }
        }
    };

请注意,我已经在活动的onStart()中注册broadcastReceiver

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。