2017-08-31 3 views
0

Je développe l'application de chat en ce sens que je dois envoyer un autre emplacement. (One to One Chat) J'ai lu xep-0080 mais dans XMPP cadre XEP-80 classe pas disponible. J'ai également vérifié le module XMPPubSub mais je ne sais pas comment envoyer l'emplacement de l'utilisateur à un autre utilisateur.Comment envoyer un emplacement à un autre utilisateur dans XMPP? Swift 3.0

liens de référence:

  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

Serveur: ejabber

Il est aider complet si fournir bout de code et lien tutoriel.

Répondre

0

Après plusieurs tentatives, j'ai réussi à envoyer l'emplacement personnalisé de l'utilisateur à un autre utilisateur de chat.

extensions d'occasion: xep-0080

Ci-dessous j'ont une fonction de mention pour envoyer Lieu

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) 
} 

De cette fonction vous pouvez également envoyer lieu à Android (SMACK Lib)

Pour didReceiveMessage délégué méthode, vous pouvez vérifier l'attribut.

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

Pouvez-vous s'il vous plaît me aider avec cette question - https://stackoverflow.com/questions/47391445/save-carbon-messages-xmppframework-ios Je suis coincé S'il vous plaît ici de nombreux jours merci. –

+0

@sohanvanani, j'ai lu votre question, la première chose que je dois dire que prendre votre propre base de données pour les messages de magasin. Si vous utilisez le serveur ejabber, vérifiez ce support XEP ou activez tout le côté serveur pour récupérer les messages hors ligne sur un autre périphérique. –

+0

J'ai utilisé le feu ouvert où j'ai installé le plugin de surveillance et je suis capable d'archiver des messages sur le serveur Je veux que les messages qui ne sont pas déjà disponibles pour les clients de l'utilisateur. –