I am sending a notification to android app using xmpp gcm.
When the server sends the notification request to gcm I receive ack from ccs that it has receive a notification request. This notification is send by gcm using xmpp protocol to my app. I want the app to send an ack to my server that it has receved the notification.
Can any one tel me how to send ack through gcm xmpp protocol to the server?
All you need to do this is to follow https://developer.android.com/google/gcm/client.html , and read "Send a message" section. The sent message will be read by our xmpp gcm server, consume the message there.
Related
I am developing a chat app using ejabberd server for both IOS and Android. I also wrote a module for ejabberd to get the offline messages sent to my own server api .
my own server api will send notifications to the IOS/Android platforms using FCM.
On the client side , if the application is in the foreground or the background , it will stay connected to ejabberd and if the client receives the message then ejabberd will send the message delivery status.
I am facing an issue while the app is terminated ( service is not running ) which means it is not connected to ejabberd (offline) . if i send a message to this app while it is not terminated , it will receive a notification but the message still undelivered . how can mark the messages as delivered when receiving the notification while the app is terminated.
to explain it more , the same functionality is working fine with whatsapp :
device A has whatsapp installed and whatsapp was turned off (terminated)
Device B has whatsapp running
Device B sends a message to device A
Device A receives a whatsapp notification
Without doing anything on Device A , the message status on Device B is marked as delivered .
How can I implement this scenario with ejabberd ?
In case someone went into this issue , here is the solution that I implemented with help of #Mickaël Rémond from his answer.
I configured ejabberd to send the offline messages to an http service ( your own server) please refer to this link for further on how to do it
your server should catch the above call and generate a notification message (FCM ) in my case and send it to recipient device
recipient device will catch the notification which includes the message
recipient device will call http service (your own server backend)that responsible for sending the deliver ack to the original sender . you need to pass from, to , stanzaId , vhost with this call
backend server will use ejabberd-api (set of exposed apis to manage ejabberd through rest apis calls) to send delivery message using this api
please note the following notes also :
sending the delivery message from your own server to ejabberd will not delete them from ejabberd database
if the user re-connected to the ejabberd server then the recipient will receive the message again from ejabberd .
It is probably too complex for a simple Stack Overflow question, as you need to integrate several moving part on client and server:
You need to execute code in background when receiving push notifications on iOS (you need that property set on your app in your app provisioning profile and have code to handle that). The client will initiate an HTTPS query to let the server know that the message was delivered.
You need to have an endpoint that will get the delivered HTTPS calls and generate either a message ack or a chat marker on behalf of the user and route it in ejabberd.
In real world, this is not enough if you want to take into account the fact that you can only have 1 push in the queue on APNS. If you have several messages sent while the device is not on the network, you will need to have the device check all received messages while offline on the server, otherwise you will lose messaging.
You need to rely on XMPP Message Archive Management (MAM) to handle that history.
As you see, this is not a simple few tens of line of codes but need real design and involved work.
At the server, CometD provides a MaxQueueListener hook to drop messages but if the Bayeux Client wants to stop receiving messages from a server without disconnecting , can it achieve that?
A BayeuxClient receives message from the server only for the channels it is subscribed to.
For a BayeuxClient to stop receiving messages from the server is enough to unsubscribe from all channels it subscribed to.
The BayeuxClient will still receive meta messages on meta channels that are part of the Bayeux protocol, but no application message will be delivered by the server.
I'm developing an App where I'm able to send/recieve messages to/from PHP server using socket, I'm referring Ray's tutorial for Socket programming.
But now I want to send to send messages to another user who is using the App, I have his IP Address and Port no, So I can send message to the user but How will that user recieve the message, because he not connected to my port. How will he notify that there is an incoming message for him?
I'm doing socket programming for very first time.
Earlier I was using smack as the client side library and sending the message to the openfire and it was working properly.
Now I want to use netty along with smack to establish the connection. I am able to create the channel and openfire shows me the connection created but I am not able to send the Registration packet to the openfire. I am writing the packet on the channel but its not getting delivered at the openfire.
Can you please help.
Use wireshark to see if the XMPP packets are been delivered.
If not you need to check your code.
Im building a chat app for iPhone and im using NSURLConnection with HTTP Post and Get to send messages from client to server. From what i understand this is a non-persist connection, because NSURLConnection open and close connection for each HTTP request, am i right??
In my server i just response to this messages.
My main problem is how to send a message from client A to client B?
client A sends the message to the server with HTTP POST, but how can i send the message from the server to client B if im not keeping a persists connection to client B?
You could make use of push notifications to inform the client that it has an unread message.