Firebase Cloud Messaging notification from Java instead of Firebase Console -
i new firebase , running errors such mismatch sender id , authentication error http status 401 when java application tries send notification/message using client's firebase token. note using firebase console, able send message client.
for client app, did following:
- cloned firebase
messagingquickstart app here -- https://github.com/firebase/quickstart-android/tree/master/messaging -- setup firebase dependencies , such. loaded cloned app inandroid studio. - using firebase console, created new project called
my notification client, added app usingcom.google.firebase.quickstart.fcmpackage name of android app. - downloaded
google-services.jsonfile android app added newly created project , copiedmessaging/app/folder , sync'd grade files withinandroid studio. - created emulator , ran app within
android studio. when app got loaded in emulator, clickedlog tokenbutton capture client's firebase token inandroid monitortab inandroid studio. - using firebase console, selected newly created project
my notification client, clickednotificationslink left pane, , sent notification device pasting firebase token captured in previous step.
this worked great! next step to use separate simple java application(which become notification server) send notification client instead of using firebase console.
to accomplish this, followed steps outlined here -- https://firebase.google.com/docs/server/setup#prerequisites. specifically, these steps performed:
- created new project called
my notification serverin firebase console. - using
settings > permissionsin firebase console, created new service account , downloadedserviceaccountcredentials.jsonfile. - created new maven project in eclipse , added following dependencies in pom.xml:
<dependency> <groupid>com.google.gcm</groupid> <artifactid>gcm-server</artifactid> <version>1.0.0</version> </dependency> <dependency> <groupid>com.googlecode.json-simple</groupid> <artifactid>json-simple</artifactid> <version>1.1.1</version> </dependency> <dependency> <groupid>com.google.firebase</groupid> <artifactid>firebase-server-sdk</artifactid> <version>3.0.0</version> </dependency> then, extended
com.google.android.gcm.sender.sendercreatefcmsender, overrode protected methodgetconnection(string url)use new fcm endpoint shown below:class fcmsender extends sender { public fcmsender(string key) { super(key); } @override protected httpurlconnection getconnection(string url) throws ioexception { string fcmurl = "https://fcm.googleapis.com/fcm/send"; return (httpurlconnection) new url(fcmurl).openconnection(); } }the
main()method of java application looks this:public static void main(string[] args) { // obtain serverkey project settings -> cloud messaging tab // "my notification client" project in firebase console. string serverkey = <get_server_key_from_firebase_console>; thread t = new thread() { public void run(){ try { sender sender = new fcmsender(serverkey); message message = new message.builder() .collapsekey("message") .timetolive(3) .delaywhileidle(true) .adddata("message", "notification java application"); .build(); // use same token(or registration id) earlier // used send message client directly // firebase console's notification tab. result result = sender.send(message, "apa91bffifjsccsij111rbmkpnmkzy-ej4rcpdbzfzn_mygfhwflx-m1uxs5fqdbcn8x1efrs2md8l9k_e9n21qb-pihuqqwmf4p7y3u-86ncgh7knkznjjz_p_qjctr0torwxmh33vp", 1); system.out.println("result: " + result.tostring()); } catch (exception e) { e.printstacktrace(); } }; t.start; try { t.join(); } catch (interruptedexception iex) { iex.printstacktrace(); } }
when run java application, mismatchsenderid error. tried troubleshooting using curl shown below got same error:
$ skey=<obtained_from_project_settings_cloud_messaging_tab_in_firebase_console> $ curl -x post --header "authorization: key=$skey" \ --header "content-type: application/json" \ https://fcm.googleapis.com/fcm/send \ -d "{\"to\":\"apa91bffifjsccsij111rbmkpnmkzy-ej4rcpdbzfzn_mygfhwflx-m1uxs5fqdbcn8x1efrs2md8l9k_e9n21qb-pihuqqwmf4p7y3u-86ncgh7knkznjjz_p_qjctr0torwxmh33vp\",\"data\":{\"message\":\"yellow\"}}" {"multicast_id":7391851081942579857,"success":0,"failure":1,"canonical_ids":0,"results":[{"error":"mismatchsenderid"}]} instead of using server key listed on project settings > cloud messaging tab my notification server project in firebase console, tried using project number caused invalidrequestexception: http status code: 401.
firebase documentation of error codes says mismatchsenderid:
mismatched sender 200 +
error:mismatchsenderid
registration token tied group of senders. when client app registers fcm, must specify senders allowed send messages. should use 1 of sender ids when sending messages client app. if switch different sender, existing registration tokens won't work.
i not figure out where/how in firebase console 1 can configure android app(which aded my notification client project) able receive messages.
any on appreciated!
i running same issue. problem in line:
string serverkey = <get_server_key_from_firebase_console>; this value should come android app project; in case "my notification client" , not "my notification server".
Comments
Post a Comment