gpt4 book ai didi

android - 使用 Smack 库连接 FCM 时出现不正确的编码异常

转载 作者:行者123 更新时间:2023-11-29 01:18:43 26 4
gpt4 key购买 nike

我正在尝试使用 smack 库连接到 FCM:

这是我尝试过的。它有效,但当连接尝试登录时出现异常。

new Thread(new Runnable(){
XMPPTCPConnectionConfiguration.Builder configBuilder = XMPPTCPConnectionConfiguration.builder();
private Handler umm;
@Override
public void run() {
configBuilder.setSecurityMode(XMPPTCPConnectionConfiguration.SecurityMode.disabled );
configBuilder.setServiceName("fcm-xmpp.googleapis.com");
configBuilder.setHost("fcm-xmpp.googleapis.com");//MAYBE PROBLEM HERE??
configBuilder.setPort(5236);
configBuilder.setCompressionEnabled(false);
configBuilder.setSendPresence(true);
configBuilder.setSocketFactory(SSLSocketFactory.getDefault());
InterfaceClass.FCMconnection = new XMPPTCPConnection(configBuilder.build());
umm = yes;

try {
InterfaceClass.FCMconnection.connect();
Log.v("pony", "white horse");
//InterfaceClass.FCMloggin.start();
android.os.Message y4 = android.os.Message.obtain();
y4.what = LOGINTOFCM;
umm.sendMessage(y4);
//the rest of the thread is just exception handling in catch clauses

一旦我的处理程序收到消息,我就尝试使用连接登录像这样:

try {                        FCMconnection.login("senderId@gcm.googleapis.com","SERVER_KEY");
Log.d("black","r2d2");
} catch (XMPPException e) {//exception thrown here
e.printStackTrace();
Log.d("black","maity "+e);

我得到以下异常: “smack.sasl.SASLErrorException:使用 X-OAUTH2 的 SASLError:不正确的编码”

现在从文档中清楚地说明要实现 SASL 普通机制,但我不知道怎么办?文档是这样说的:

“连接有两个重要的要求:

您必须启动传输层安全 (TLS) 连接。请注意,CCS 当前不支持 STARTTLS 扩展。CCS 需要使用 SASL PLAIN 身份验证机制 @gcm.googleapis.com(FCM 发件人 ID)和服务器 key 作为密码,其中发件人 ID 和服务器 key 是配置客户端应用程序时收集的值。有关获取这些凭据的信息,请参阅您的平台的客户端文档。”

有没有人知道是什么导致了这个异常?我应该如何使用 smack 库连接到 FCM?

感谢您的任何建议。

最佳答案

根据通过 XMPP 协议(protocol)连接到 FCM 的文档需要:

1) 传输层的 TLS 连接,使用 TLS 协议(protocol)扩展来实现创建 SSLContext

2) 普通 SASL 协议(protocol),确保“smack-sasl-javax-4.1.8.jar”已集成到您的build设置中。这花了我很多时间才弄明白

3) 主机、服务名和端口号正确(引用下面的代码 fragment )

下面的代码 fragment 非常适合我:

SSLContext sslContext = null;
try {
sslContext = SSLContext.getInstance("TLS");
sslContext.init(null, null, null);
} catch (Exception e) {
//Failed to get default ssl context with TLS enabled... something can't proceed further
}
XMPPTCPConnectionConfiguration.Builder config = XMPPTCPConnectionConfiguration.builder();
config.setConnectTimeout(CONNECTION_TIMEOUT);
config.setSendPresence(true);
config.setCustomSSLContext(sslContext);
config.setSecurityMode(ConnectionConfiguration.SecurityMode.disabled);
config.setServiceName("gcm.googleapis.com");
config.setHost("fcm-xmpp.googleapis.com");
config.setPort(5236);//not production server
config.setDebuggerEnabled(true);
config.setCompressionEnabled(true);
config.setSocketFactory(sslContext.getSocketFactory());
(mConnection = new XMPPTCPConnection(config.build())).addConnectionListener(ConnectionSession.this);
mConnection.setPacketReplyTimeout(REPLY_TIMEOUT);
mConnection.connect();
mConnection.login(userID, password); //use your app server credential here

Smack 版本 4.8.1 从 openfire 设置实现和测试。

希望这对某人有所帮助!

关于android - 使用 Smack 库连接 FCM 时出现不正确的编码异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38140283/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com