0

我正在关注第一个应用程序的 Mesibo 教程尝试将其集成到我的应用程序中。与教程https://github.com/mesibo/samples/tree/master/android/java/FirstApp的源代码的不同之处仅在于我在 Fragment 而不是 Activity 中实现了它,并为视图使用了数据绑定。

每次如果我单击 LOGIN_AS_USER1 或 LOGIN_AS_USER2 按钮,它会显示连接状态 5。创建的用户永远不会在线。

具有相应用户地址和应用程序 ID(应用程序包)的用户是在 Mesibo 控制台中手动创建的。令牌、地址和应用程序 ID 都经过双重检查。

我的片段代码:

 public class CommunicationFragment extends Fragment  implements Mesibo.ConnectionListener, Mesibo.MessageListener {
    private FragmentCommunicationBinding binding;

    class DemoUser {
        public String token;
        public String name;
        public String address;

        DemoUser(String token, String name, String address) {
            this.token = token;
            this.name = name;
            this.address = address;
        }
    }

    //Refer to the Get-Started guide to create two users and their access tokens
    DemoUser mUser1 = new DemoUser("631b138a5bfd2827b20d312721ee6549198539a5041517df2e33311958", "User-1", "1233");
    DemoUser mUser2 = new DemoUser("ae80d38f59a814b3f4694055bbd90005c2fdae2ae7a530fe44311959", "User-2", "4566");

    DemoUser mRemoteUser;
    Mesibo.UserProfile mProfile;
    Mesibo.ReadDbSession mReadSession;

    Button  mSendButton, mUiButton, mAudioCallButton, mVideoCallButton;
    Button mLoginButton1, mLoginButton2;
    TextView mMessageStatus, mConnStatus;
    EditText mMessage;

    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {

        binding = DataBindingUtil.inflate(inflater, R.layout.fragment_communication, container, false);
        View view = binding.getRoot();
        
        mLoginButton1 = binding.login1;
        mLoginButton2 = binding.login2;
        mSendButton = binding.send;
        mUiButton = binding.launchUI;
        mAudioCallButton = binding.audioCall;
        mVideoCallButton = binding.videoCall;
        mMessageStatus = binding.msgStatus;
        mConnStatus = binding.connStatus;
        mMessage = binding.message;
        mSendButton.setEnabled(false);
        mUiButton.setEnabled(false);
        mAudioCallButton.setEnabled(false);
        mVideoCallButton.setEnabled(false);

        mLoginButton1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                mesiboInit(mUser1, mUser2);            }
        });

        mLoginButton2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                mesiboInit(mUser2, mUser1);            }
        });
        
        mSendButton.setOnClickListener(new View.OnClickListener() {
            public void onClick(View view) {
            Mesibo.MessageParams p = new Mesibo.MessageParams();
            p.peer = mRemoteUser.address;
            p.flag = Mesibo.FLAG_READRECEIPT | Mesibo.FLAG_DELIVERYRECEIPT;

            Mesibo.sendMessage(p, Mesibo.random(), mMessage.getText().toString().trim());
             mMessage.setText("");}
        });
        
        mUiButton.setOnClickListener(new View.OnClickListener() {
            public void onClick(View view) {
                MesiboUI.launchMessageView(getActivity(), mRemoteUser.address, 0);
            }
        });
        
        mAudioCallButton.setOnClickListener(new View.OnClickListener() {
            public void onClick(View view) {
                MesiboCall.getInstance().callUi(getActivity(), mProfile.address, false);
            }
        });

        mVideoCallButton.setOnClickListener(new View.OnClickListener() {
            public void onClick(View view) {
                MesiboCall.getInstance().callUi(getActivity(), mProfile.address, true);
            }
        });
        
        return view;
    }

    private void mesiboInit(DemoUser user, DemoUser remoteUser) {
        Mesibo api = Mesibo.getInstance();
        api.init(getActivity().getApplicationContext());

        Mesibo.addListener(this);
        Mesibo.setSecureConnection(true);
        Mesibo.setAccessToken(user.token);
        Mesibo.setDatabase("mydb", 0);
        Mesibo.start();

        mRemoteUser = remoteUser;
        mProfile = new Mesibo.UserProfile();
        mProfile.address = remoteUser.address;
        mProfile.name = remoteUser.name;
        Mesibo.setUserProfile(mProfile, false);

        // disable login buttons
        mLoginButton1.setEnabled(false);
        mLoginButton2.setEnabled(false);

        // enable buttons
        mSendButton.setEnabled(true);
        mUiButton.setEnabled(true);
        mAudioCallButton.setEnabled(true);
        mVideoCallButton.setEnabled(true);
        
        MesiboCall.getInstance().init(getActivity().getApplicationContext());

        // Read receipts are enabled only when App is set to be in foreground
        Mesibo.setAppInForeground(getActivity(), 0, true);
        mReadSession = new Mesibo.ReadDbSession(mRemoteUser.address, this);
        mReadSession.enableReadReceipt(true);
        mReadSession.read(100);
    }



    @Override
    public void Mesibo_onConnectionStatus(int status) {
        mConnStatus.setText("Connection Status: " + status);
    }

    @Override
    public boolean Mesibo_onMessage(Mesibo.MessageParams messageParams, byte[] data) {
        try {
            String message = new String(data, "UTF-8");

            Toast toast = Toast.makeText(getActivity().getApplicationContext(),
                    message,
                    Toast.LENGTH_SHORT);
            toast.setGravity(Gravity.CENTER_VERTICAL, 0, 0);
            toast.show();
        } catch (Exception e) {
        }
        return true;
    }

    @Override
    public void Mesibo_onMessageStatus(Mesibo.MessageParams messageParams) {
        mMessageStatus.setText("Message Status: " + messageParams.getStatus());
    }

    @Override
    public void Mesibo_onActivity(Mesibo.MessageParams messageParams, int i) {
    }

    @Override
    public void Mesibo_onLocation(Mesibo.MessageParams messageParams, Mesibo.Location location) {
    }

    @Override
    public void Mesibo_onFile(Mesibo.MessageParams messageParams, Mesibo.FileInfo fileInfo) {
    }

}
4

1 回答 1

0

您很可能使用错误的 App ID 创建令牌

https://mesibo.com/documentation/faq/other/#i-am-not-getting-connection-status-1-online

如果您没有获得连接状态 1 并获得 4 或 5,那么您在创建令牌时没有传递正确的 appid。传递给创建令牌的 appid 必须与 AndroidManifest.xml 中声明的 Android 包名称或 Xcode 项目中声明的 iOS 包 id 匹配(例如 com.mesibo.xxx )。如果您使用 Javascript API 或其他平台,请确保将相同的应用程序 ID 传递给 setAppName API 调用。

于 2021-03-17T02:06:06.143 回答