I'm trying to find some ways to send a post notification to specific android device using its UUID , so I will do the following :
1 : login screen on android and then get UUID number from the device
2 : send this UUID to online database linked to userID
3 : I want to know how to send post notification to a specific UUID which I get from my database ?
Sending notification to android device using java is very easy.
If you want to push the notification directly from REST client, then you can refer this
If you want to send notifications from your java program, then follow these simple steps,
Add gcm-server.jar library file in your application
Create a Sender, that will send the notification
com.google.android.gcm.server.Sender sender = new Sender("pass your gcm api key here");
Then create a message object that will contain the data that you want to send
com.google.android.gcm.server.Message message = new Message.Builder().addData("key","value").build();
addData("key","value") in above code will add the key value in json to be send.
Then you can choose any of send method provided in Sender class
com.google.android.gcm.server.Result result = sender.send(message, device_token, no of retries);
There are total four version of send method available. You can find more detail about Sender class here
Related
I want to be able to send a notification to a user IF something changes.
For example, my application is crime-related. So users can submit reports of crimes that have happened in their neighborhoods.
When a new crime is reported, I want to be able to send ALL users in that specific neighbourhood a notification, even if they are not actively using the app.
How can this be done? I'm quite new at this but to my understanding services like Firebase Messaging require you to type out a message manually and select users to send the message to manually. I'm wondering if there's a way this can be done without someone having to manually do work?
Similar to how snapchat/instagram and stuff will send you notifications that someone has sent you a message even when you are not using your phone.
In my case, I just want the same standard notification "New crime in your area" to be displayed...
How can I do this? (Currently for notifications I'm just using Notification Channels), thank you so much!
You can easily do this using Parse Server through FCM integration.
First, you need to setup your Android app to be able to receive push notifications
Just follow this Quickstart: https://docs.parseplatform.org/parse-server/guide/#push-notifications-quick-start
Second, you need to create a cloud code function
I suggest you to create a cloud code function that will receive the neighborhood as parameter, will query for the user installations in that neighborhood and send the push notification to all of them.
It would be something like this:
Parse.Cloud.define('notifyCrime', async req => {
const query = new Parse.Query(Parse.Installation);
query.equalTo('neighborhood', req.params.neighborhood); // I'm supposing you have a field called neighborhood in your installation class - if not, you can save this field there when the user sign up
await Parse.Push.send({
where: query,
data: {
alert: 'There is a crime in your neighborhood'
},
useMasterKey: true
});
});
Reference: https://docs.parseplatform.org/js/guide/#sending-pushes-to-queries
Third, you need to call the cloud function from your Android app
Once some user has reported a crime, you can call the cloud code function that you created in step 2 to notify all other users in the same neighborhood.
It would be something like this:
HashMap<String, Object> params = new HashMap<String, Object>();
params.put("neighborhood", "The neighborhood goes here");
ParseCloud.callFunctionInBackground("notifyCrime", params, new FunctionCallback<Object>() {
void done(Object response, ParseException e) {
if (e == null) {
// The users were successfully notified
}
}
});
Reference: https://docs.parseplatform.org/cloudcode/guide/#cloud-functions
"my understanding services like Firebase Messaging require you to type out a message manually and select users to send the message to manually".
This is not completely true. There is a method name Firebase Topic Messaging, that lets you send notifications to specific user segments only. You have to register from the app for that topic and then, you can send customized message to your user groups based on topics they subscribed to.
I already have an app and I want to start sending notification to the users. I already set up everything in the app(using react native) and I checked manually that I can send notification to the devices and it works.
Now I want to run a job in the server who will push the message (with the device token) to the cloud messaging in firebase.
I can't find a lot of details about how to do it. I would like if someone can give me any guide I can use with. my server is in Kotlin(java can be good too) and I m working with gradle.
Thank you so much for the help
From a Java server you can use the Firebase Admin SDK to send messages. From that documentation comes this minimal example:
// This registration token comes from the client FCM SDKs.
String registrationToken = "YOUR_REGISTRATION_TOKEN";
// See documentation on defining a message payload.
Message message = Message.builder()
.putData("score", "850")
.putData("time", "2:45")
.setToken(registrationToken)
.build();
// Send a message to the device corresponding to the provided
// registration token.
String response = FirebaseMessaging.getInstance().send(message);
// Response is a message ID string.
System.out.println("Successfully sent message: " + response);
Note that this sends a data message, so that will always be delivered to your code, where you can decide to display a notification or not. To send a notification message, which is what the Firebase console does, you'd use:
Message message = Message.builder()
.setNotification(new Notification("This is the title", "This is the body"))
.setToken(registrationToken)
.build();
Both of these send the message to a specific registration token, so only to a single device/app instance. This means you will need to maintain a list of these tokens, in a way that allows you to send the messages to fit your needs. E.g. a common way is to store the tokens per user. For an example of that, see the functions-samples repo. While this example is in Node.js, the same logic could be applied to a Java server.
Finally: you can also send message to topics. For an example of that (again: using a Node.js server), have a look at this blog post Sending notifications between Android devices with Firebase Database and Cloud Messaging.
I am really rookie and need an advice.
I have read documentation, and as far as i understood if you need send direct message, follow next steps:
Make authentification, eventually you get Firebase TokenId and
userId
Send them to your server side and store it in DB
When you are going to send a message you need create json and put
inside topic text and resipent userId so on...
Send this json via HTTP to your server side
When server retrive this json, it should use Firebase API to
create new message bloc child with random name in firebase
Eventually server have to find recipent user in DB by userId that we get from message.
After server will find current recipent user by userId , next we should take firebase tokenId In order to sent notification .
And send recipent user notification with such data - name of new
message bloc child
Recipent will connect to this current bloc and retrive data
It is as i understood this consept, fix me please if smth wrong?
Your suggested approach sounds good. The most important thing to realize is that you require an app server to send a downstream message to a device. Using the database as the communication mechanism between the app and the app server is a popular approach.
You could also use Cloud Messaging's upstream capabilities. But I've never tried that approach, because the database works fine for me and I had little interest in learning yet another protocol (XMPP).
You can read how I implemented it in this Firebase blog post Sending notifications between Android devices with Firebase Database and Cloud Messaging.
I tried GCM-Demo app on both Mobile/AVD and working fine, now as part of my PoC I will get notifications from SAP and using GCM I want to send notifications to Android devices.
I posted message to directly to https://android.googleapis.com/gcm/send using REST client successfully, please advice me what changes I have to change here to receive on this notification client device...
And I am confused what URL I need to give in CommonUtilities.JAVA , as I sent data directly using REST CLIENT.
static final String SERVER_URL = "http://host:8080/gcm-demo/";//is it necessary yo provide server URL ?
/**
* Google API project id registered to use GCM.
*/
static final String SENDER_ID = "1012728190866";
In simple words, I will send data using REST instead of SERVER(successfully I sent to GCM),and want to receive notification on device.
Thanks
Rajesh
I'm programming an Android App about share different content. Now I develop the social network, and when one user add new friend, send a Parse Push notification that the user add you.
I use Parse SDK, and I don't now how to do this.
I try this:
ParseInstallation installation = ParseInstallation.getCurrentInstallation();
installation.put("userId",id);
try {
installation.save();
This create a userId column in Installation class of Parse Data. (I see Parse Data and the userId column is the correct id from user)
Next I do:
//Create our Installation query
ParseQuery<ParseInstallation> pushQuery = ParseInstallation.getQuery();
pushQuery.whereEqualTo("userId",ParseUser.getCurrentUser().getObjectId());
// Send push notification to query
ParsePush push = new ParsePush();
push.setQuery(pushQuery); // Set our Installation query
push.setMessage("Willie Hayes injured by own pop fly.");
push.sendInBackground();
I create a query that compare the userId colum (that contains the userId from user that add you) with the current ParseUser, but the Push don't send, and nobody receive.
Please help me.
Thanks.
What I did is I registered the device to a channel corresponding with the user. In Swift I did it like this, but in Android it would be very similar. This means that user "userId" would be subscribed to channel "user_userId".
let currentInstallation = PFInstallation.currentInstallation()
currentInstallation.channels = ["user_" + PFUser.currentUser().objectId]
currentInstallation.saveInBackground()
Then when you want to send the push, send it to channel "user_userId".