Mesibo第一个处于Fragment错误连接状态的应用程序



我正在为第一个应用程序学习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) {
}
}

很可能您正在使用错误的应用程序ID 创建令牌

https://mesibo.com/documentation/faq/other/#i-am-不设置连接-状态-在线

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

最新更新