良い一日!!!
XMPP を使用したチャットで OMEMO を使用して暗号化を試みましたが、実際の暗号化を行っているときにデバイス リストの問題が発生しました。
以下の手順に従い、
- OMEMOサービス登録
- デバイス ID が生成されました
- 生成された指紋
- OMEMO ID を信頼する
- OMEMO マネージャーを使用して暗号化する
XMPP 接続オブジェクトを使用してメッセージを送信します。
以下のコードを確認してください。ストアファイルについてはよくわからないので、ローカルファイルを作成してここに指定しました。同じことに関するドキュメントは見つかりませんでした。どなたかご存知の方がいらっしゃいましたら、こちらも教えてください。
try { var messageToSend = tMessagetext!!.text.toString(); var mFriendJID = "abc@localhost/yyy"; val jidFriend = JidCreate.from(mFriendJID); val jidBare = JidCreate.bareFrom(mFriendJID); val msg = Message(jidFriend, Message.Type.chat); msg.setBody(messageToSend); SignalOmemoService.acknowledgeLicense(); if (!SignalOmemoService.isServiceRegistered()) SignalOmemoService.setup(); val service = SignalOmemoService.getInstance() val file = File(Environment.getExternalStorageDirectory().absolutePath,"myAppFile.txt"); OmemoConfiguration.setFileBasedOmemoStoreDefaultPath(file); val memomanager = OmemoManager.getInstanceFor(ChatService.xmppConnection) val device = memomanager.ownDevice Log.e(TAG, device.deviceId.toString()+", "+device.jid); val fingerPrint = memomanager.getFingerprint(device) Log.e(TAG, fingerPrint.toString()); memomanager.trustOmemoIdentity(device, fingerPrint); val encryptedMessage = memomanager!!.encrypt(jidBare, messageToSend) ChatService.xmppConnection!!.sendStanza(encryptedMessage) tMessagetext!!.text.clear(); }catch (e :java.lang.Exception){ e.printStackTrace() }
そして、私が得ているエラーは、
OmemoService: Could not fetch device list of abc@localhost: org.jivesoftware.smack.XMPPException$XMPPErrorException: XMPP error reply received from abc@localhost: XMPPError: service-unavailable - cancel
org.jivesoftware.smack.XMPPException$XMPPErrorException: XMPP error reply received from abc@localhost: XMPPError: service-unavailable - cancel
at org.jivesoftware.smack.StanzaCollector.nextResultOrThrow(StanzaCollector.java:268)
at org.jivesoftware.smack.StanzaCollector.nextResultOrThrow(StanzaCollector.java:219)
at org.jivesoftware.smackx.pubsub.LeafNode.getItems(LeafNode.java:196)
at org.jivesoftware.smackx.pubsub.LeafNode.getItems(LeafNode.java:189)
at org.jivesoftware.smackx.pubsub.LeafNode.getItems(LeafNode.java:136)
at org.jivesoftware.smackx.pubsub.PubSubManager.getLeafNodeProsodyWorkaround(PubSubManager.java:350)
at org.jivesoftware.smackx.pubsub.PubSubManager.getLeafNode(PubSubManager.java:333)
at org.jivesoftware.smackx.omemo.OmemoService.fetchDeviceListNode(OmemoService.java:435)
at org.jivesoftware.smackx.omemo.OmemoService.fetchDeviceList(OmemoService.java:452)
at org.jivesoftware.smackx.omemo.OmemoService.refreshDeviceList(OmemoService.java:504)
at org.jivesoftware.smackx.omemo.OmemoService.buildOrCreateOmemoSessionsFromBundles(OmemoService.java:605)
at org.jivesoftware.smackx.omemo.OmemoService.processSendingMessage(OmemoService.java:810)
at org.jivesoftware.smackx.omemo.OmemoService.processSendingMessage(OmemoService.java:787)
at org.jivesoftware.smackx.omemo.OmemoManager.encrypt(OmemoManager.java:209)
at com.abcd.androidChatapp.MainActivity.onSendMessage(MainActivity.kt:347)
at java.lang.reflect.Method.invoke(Native Method)
at androidx.appcompat.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:385)
at android.view.View.performClick(View.java:6312)
at android.view.View$PerformClick.run(View.java:24943)
at android.os.Handler.handleCallback(Handler.java:790)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:192)
at android.app.ActivityThread.main(ActivityThread.java:6754)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:549)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:828)
このコードの問題をお知らせください。先に進むことができます。同じことについて適切なドキュメントがあるかどうか教えてください。このプロセスで正確に何が起こっているのかを理解するために深く入り込むことができます。
よろしくお願いします。