Android Kotlin Smack XMPP Omemo -Verschlüsselung [geschlossen]Android

Forum für diejenigen, die für Android programmieren
Anonymous
 Android Kotlin Smack XMPP Omemo -Verschlüsselung [geschlossen]

Post by Anonymous »

Ich möchte die Chat -App wie WhatsApp Android Kotlin erstellen und XMPP und Omemo -Verschlüsselung für Ende zu Ende verwenden. Ich benutze die Smack Library. Aber es gibt so wenig Informationen darüber. Bibliothek Ich denke, es ist nicht stabil und schrieb in Java. Gibt es eine einfache Open -Source -App, die dies verwendet? Ich fand Zom und Atalk. Aber sie werden in Java geschrieben und Zom ist eine alte App, die nicht unterstützt wird. Atalk ist auch kompliziert und nicht wie WhatsApp. Gibt es ein einfaches Video oder eine einfache Dokumentation, oder jemand kann mir helfen, der es übt? < /P>
Ich habe gemacht, aber es gibt einige Probleme. Ich weiß manchmal nicht, was das Problem ist und wie man diese Bibliothek richtig verwendet. Danke < /p>
Ich habe zusätzlich einige spezifische Fragen. Insassen sind Online -Benutzer. Wenn der Benutzer nicht online ist, erhalten Sie keine Nachricht von MAM, da der Absender keine Anforderung dafür erstellt.public synchronized OmemoMessage.Sent encrypt(MultiUserChat muc, String message)
throws UndecidedOmemoIdentityException, CryptoFailedException,
XMPPException.XMPPErrorException, SmackException.NotConnectedException, InterruptedException,
SmackException.NoResponseException, NoOmemoSupportException,
SmackException.NotLoggedInException, IOException {
if (!multiUserChatSupportsOmemo(muc)) {
throw new NoOmemoSupportException();
}

Set recipients = new HashSet();

for (EntityFullJid e : muc.getOccupants()) {
recipients.add(muc.getOccupant(e).getJid().asBareJid());
}
return encrypt(recipients, message);
}
< /code>
Ich verwende eine andere Verschlüsselungsmethode, bei der es sich um eingestellte Empfänger handelt, für die andere Verschlüsselungsmethoden sie ebenfalls aufrufen. In diesem Fall brauche ich alle Zugehörigkeitsjids, um Parameter zu senden. Ich bekomme einzeln mit benutzerdefinierter Methode → < /p>
fun getAllAffiliationJids(muc: MultiUserChat): Set {
val allAffiliates = mutableSetOf()
val allAffiliateJids = mutableSetOf()

try {
val owners = muc.owners
allAffiliates.addAll(owners)

val admins = muc.admins
allAffiliates.addAll(admins)

val members = muc.members
allAffiliates.addAll(members)

allAffiliates.forEach {
allAffiliateJids.add(it.jid.asBareJid())
}

} catch (e: Exception) {
e.printStackTrace()
}

return allAffiliateJids
}
< /code>
  • Ich habe die Nachrichtenmethode gesendet. Manchmal blieb es in der Entschlüsselung oder Verschlüsselungsmethode auf und erreichte nicht die nächste Zeile. Es ist auch in anderen Methoden passiert (RequestDevicelistupdatefor), es stürzt nicht ab und bringt eine Ausnahme aus. Stoppen Sie diese Linie nur. Chatgpt sagt, dass es intern versucht, Gerätebündel abzurufen oder Sitzungen zu erstellen, wenn sie fehlen, oder dass dieser Netzwerkbetrieb blockieren kann, wenn die Tasten des Empfängers nicht erreichbar sind, oder Timeout erfolgt (z. B. Offline -User Offline, schlechter Serverzustand). Was ist das Hauptproblem? Ich teile nur meine Send -Methode, sie stoppt in der Verschlüsselungsmethode -< /p>
    fun sendGroupMessage(
    connection: XMPPTCPConnection,
    jsonModel: String,
    fromPhoneNumber: String,
    messageID: String?,
    body: String?,
    roomId: String,
    extensionElement: ExtensionElement? = null,
    isFirst: Boolean = true
    ) {
    CoroutineScope(Dispatchers.IO).launch {
    try {
    val mucJid = JidCreate.entityBareFrom(roomId.getRoomJIDfromRoomId())
    val manager = MultiUserChatManager.getInstanceFor(connection)
    val muc = manager.getMultiUserChat(mucJid)
    val omemoManager = XMPPOmemoManager.instance.omemoManager ?: return@launch

    if (!omemoManager.multiUserChatSupportsOmemo(muc)) {
    return@launch
    }

    val allAffiliateJids = getAllAffiliationJids2(muc)

    val encryptedMessage = omemoManager.encrypt(allAffiliateJids, jsonModel)

    val builder = StanzaBuilder
    .buildMessage(messageID)
    .to(mucJid)
    .setBody(body)
    .from(jidFromPhoneNumber(fromPhoneNumber))
    .ofType(Message.Type.groupchat)
    .addExtension(encryptedMessage.element)
    if (extensionElement != null) {
    builder.addExtension(extensionElement)
    }

    StoreHint.set(builder)

    DeliveryReceiptRequest.addTo(builder)

    muc.sendMessage(builder)

    } catch (error: Throwable) {
    if ((error is IllegalArgumentException || error is NullPointerException) && isFirst) {
    XMPPOmemoManager.instance.setupOmemo(connection, context)
    sendGroupMessage(
    connection,
    jsonModel,
    fromPhoneNumber,
    messageID,
    body,
    roomId,
    extensionElement,
    false
    )
    } else if (error is XMPPErrorException && isFirst) {
    val subscribePresence = PresenceBuilder.buildPresence()
    .ofType(Presence.Type.subscribe)
    .to(JidCreate.entityBareFrom(roomId.getRoomJIDfromRoomId()))
    .build()

    connection.sendStanza(subscribePresence)
    sendGroupMessage(
    connection,
    jsonModel,
    fromPhoneNumber,
    messageID,
    body,
    roomId,
    extensionElement,
    false
    )
    } else if (error is TimeoutCancellationException) {
    xmppConnectionRepository.reconnectXmpp()
    sendGroupMessage(
    connection,
    jsonModel,
    fromPhoneNumber,
    messageID,
    body,
    roomId,
    extensionElement,
    false
    )
    }
    }
    }
    }

    fun getAllAffiliationJids2(muc: MultiUserChat): Set {
    val allAffiliates = mutableSetOf()
    val allAffiliateJids = mutableSetOf()

    try {
    val owners = muc.owners
    allAffiliates.addAll(owners)

    val admins = muc.admins
    allAffiliates.addAll(admins)

    val members = muc.members
    allAffiliates.addAll(members)

    allAffiliates.forEach {
    allAffiliateJids.add(it.jid.asBareJid())
    }

    } catch (e: Exception) {
    e.printStackTrace()
    }

    return allAffiliateJids
    }
    < /code>

    setomemostOrbackend -Kompilierfehler für Parameter < /p>
    SignalomemoService.ACKNOWLEDGELICEENSeige()
    SsignalomemoService.setup()
    >br />>
    >
    >
    >
    >>
    >>
    >>
    < /li>
    < /ol>
    Typ Mismatch. Aber InternalomemomessAgestanzalistener entschlüsselt automatisch die Nachricht und benachrichtigt die Hörer, ich legte nicht addomemomessagelistener, sondern entschlüsselt. Wenn ich das Meldungshandbuch in Stanzalistener entschlüsselt, gibt es Fehler zurück, da es bereits zuvor entschlüsselt wurde. Ich rief Stopstanzaandpeplistener an, um den Listener zu entfernen, der automatisch entschlüsselt ist, aber nicht entfernen kann.

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post