2017-08-31 3 views
0

私は他のユーザーの場所を送信する必要があるという点でチャットアプリを開発しています。 (1対1のチャット) 私はxep-0080を読みましたが、XMPPフレームワークXEP-80クラスでは利用できません。 私はXMPPPubSubモジュールもチェックしましたが、他のユーザーにユーザーの場所を送信する方法はわかりません。XMPPで他のユーザーに場所を送信する方法は? Swift 3.0

参考リンク:

  1. https://github.com/robbiehanson/XMPPFramework/issues/506
  2. How to pass location using XMPP in ios sdk?
  3. https://github.com/buddycloud/buddycloud-iOS-client

サーバー:ejabber

コードのスニペットを提供する場合それは、完全な助けだとチュートリアルのリンク。

答えて

0

多くの人が試してみたら、私は正常にユーザーのカスタムロケーションを他のチャットユーザーに送信しました。

使用される拡張子:xep-0080

私は、この関数から送信する場所のため

public class func sendLocationMessage(msg:String,lat : String ,long : String ,to receiver: String,completionHandler completion:@escaping XMPPMessageMngCompletionHandler){ 
    let body = DDXMLElement.element(withName: "body") as! DDXMLElement 
    let messageID = XMPPConnect.sharedInstance.xmppStream.generateUUID() 
    body.stringValue = "Location" 
    let completeMessage = DDXMLElement.element(withName: "message") as! DDXMLElement 
    let reuestElemetn = DDXMLElement.element(withName: "request", stringValue: "urn:xmpp:receipts") 
    completeMessage.addChild(reuestElemetn as! DDXMLNode) 
    completeMessage.addAttribute(withName: "id", stringValue: messageID!) 
    completeMessage.addAttribute(withName: "type", stringValue: "chat") 
    completeMessage.addAttribute(withName: "to", stringValue: receiver) 
    completeMessage.addChild(body) 

    let geoElemetn = DDXMLElement.element(withName: "geoloc") as! DDXMLElement 
    geoElemetn.addAttribute(withName: "xmlns", stringValue: "http://jabber.org/protocol/geoloc") 

    let latElement = DDXMLElement.element(withName: "lat") as! DDXMLElement 
    latElement.stringValue = lat 
    geoElemetn.addChild(latElement); 

    let lngElement = DDXMLElement.element(withName: "lon") as! DDXMLElement 
    lngElement.stringValue = long 
    geoElemetn.addChild(lngElement); 

    let uriElement = DDXMLElement.element(withName: "uri") as! DDXMLElement 
    uriElement.stringValue = msg; //google map image url. 

    geoElemetn.addChild(uriElement) 

    completeMessage.addChild(geoElemetn) 

    sharedInstance.didSendMessageCompletionBlock = completion 
    XMPPConnect.sharedInstance.xmppStream?.send(completeMessage) 
} 

を言及する機能を持っているの下には、またdidReceiveMessageデリゲートのためのAndroid(SMACKのLib)

に場所を送ることができますメソッドで属性を確認できます。

if message.attribute(forName: "geoloc") != nil { 
     self.receivedLocationMsgFromUser(message: message, from: from) 
    }else{ 
     self.receivedTextMsgFromUser(message: message, msgStr: msg, from: from) 
    } 
+0

あなたはこの質問で私を助けてください - ありがとうhttps://stackoverflow.com/questions/47391445/save-carbon-messages-xmppframework-ios 私は多くの日から、ここで立ち往生していてください。 –

+0

@sohanvanani、私はあなたの質問を読んだことがあります。私は店のメッセージのために自分のデータベースを取ることを言う必要があります。 ejabberサーバーを使用している場合は、このXEPサポートをチェックするか、サーバー側で他のデバイスにオフラインメッセージをフェッチすることができます。 –

+0

私は監視プラグインをインストールした場所でオープン・ファイアを使用しましたが、サーバー上にメッセージをアーカイブすることができました。ユーザーのクライアントにはまだ利用できないメッセージが必要です。 –

関連する問題