java - Gcm Notification only comes in my own device -
i new in gcm , want send notification using gcm spacific users of app notification comes in own device
here code
mainactivity.java
public class mainactivity extends actionbaractivity { private googlecloudmessaging gcm; string regid; checkbox isdriver; httppost httppost; stringbuffer buffer; httpresponse response; httpclient httpclient; list<namevaluepair> namevaluepairs; string user_name = ""; private final static int play_services_resolution_request = 9000; string tag = "mainactivity"; string sender_id = "224163385438"; string api_key = "aizasycl3rek_onegldhcp8giso_5p6xwe3guva"; utils utils; private context context = mainactivity.this; private progressdialog pb; private edittext username; @override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_main); utils = new utils(this); isdriver = (checkbox) findviewbyid(r.id.isdriver); } private void registerinbackground() { new asynctask<void, void, string>() { @override protected string doinbackground(void... params) { string msg = ""; try { if (gcm == null) { gcm = googlecloudmessaging.getinstance(context); } regid = gcm.register(sender_id); msg = "device registered, registration id=" + regid; } catch (ioexception ex) { msg = ex.getmessage(); } return msg; } @override protected void onpostexecute(string msg) { log.i(tag, "onpostexecute : " + msg); if (!msg.equalsignorecase("service_not_available")) { message msgobj = handler.obtainmessage(); bundle b = new bundle(); b.putstring("server_response", msg); msgobj.setdata(b); handler.sendmessage(msgobj); } else { utils.showtoast("error : " + msg + "\nplease check internet connection"); hidepb(); } } // define handler receives messages thread , // update progress private final handler handler = new handler() { public void handlemessage(message msg) { string aresponse = msg.getdata().getstring( "server_response"); if ((null != aresponse)) { log.i(tag, " sendregistrationidtobackend();"); sendregistrationidtobackend(); } else { } } }; }.execute(null, null, null); } /** * sends registration id server on http, can use * gcm/http or ccs send messages app. not needed demo * since device sends upstream messages server echoes * message using 'from' address in message. */ public void sendregistrationidtobackend() { log.i(tag, "sendregistrationidtobackend"); thread thread = new thread() { @override public void run() { try { httpclient = new defaulthttpclient(); // yahan reg id ki server webserivcice dalegi httppost = new httppost("http://www.test5.luminativesolutions.com/cabbooking/ws/gcmdemo/save_reg_id.php"); namevaluepairs = new arraylist<namevaluepair>(1); namevaluepairs.add(new basicnamevaluepair("username", user_name)); namevaluepairs.add(new basicnamevaluepair("reg_id", regid)); httppost.setentity(new urlencodedformentity(namevaluepairs)); responsehandler<string> responsehandler = new basicresponsehandler(); final string response = httpclient.execute(httppost, responsehandler); log.i(tag, "response : " + response); if (response != null) { if (response .equalsignorecase("username registered")) { utils.showtoast("username registered"); hidepb(); } else { if (response .equalsignorecase("new device registered successfully")) { utils.savepreferences(utils.username, user_name); // persist regid - no need register // again. utils.storeregistrationid(regid); utils.showtoast("device registration successful"); } } } } catch (exception e) { hidepb(); log.d(tag, "exception : " + e.getmessage()); } } }; thread.start(); } public void onclick(view view) { if (view.getid() == r.id.btnsave) { username = (edittext) findviewbyid(r.id.username); user_name = username.gettext().tostring().trim(); if (user_name.length() > 0) { log.d(tag, "startregistration"); showpb("registering device"); startregistration(); /*if(isdriver.ischecked()){ log.i(tag,"driver reg id"); log.d(tag, utils.getfrompreferences(user_name)); }*/ intent = new intent(mainactivity.this,bookingactivity.class); i.putextra("username",user_name); i.putextra("regid",regid); startactivity(i); } else { log.d(tag, "username empty"); } } } void startregistration() { if (checkplayservices()) { // if check succeeds, proceed normal processing. // otherwise, prompt user valid play services apk. log.i(tag, "google play services ok"); gcm = googlecloudmessaging.getinstance(this); regid = utils.getregistrationid(); /*if(isdriver.ischecked()){ utils.savepreferences(user_name, regid); log.d(tag,utils.getfrompreferences(user_name)); }*/ system.out.println(regid); if (regid.isempty()) { registerinbackground(); } else { log.i(tag, "reg id not empty"); } } else { log.i(tag, "no valid google play services apk found."); } } private boolean checkplayservices() { int resultcode = googleplayservicesutil .isgoogleplayservicesavailable(this); if (resultcode != connectionresult.success) { if (googleplayservicesutil.isuserrecoverableerror(resultcode)) { log.i(tag, "no google play services...get store."); googleplayservicesutil.geterrordialog(resultcode, this, play_services_resolution_request).show(); } else { log.i(tag, "this device not supported."); finish(); } return false; } return true; } void showpb(final string message) { runonuithread(new runnable() { @override public void run() { pb = new progressdialog(mainactivity.this); pb.setmessage(message); pb.show(); } }); } void hidepb() { runonuithread(new runnable() { @override public void run() { if (pb != null && pb.isshowing()) pb.dismiss(); } }); } @override public boolean oncreateoptionsmenu(menu menu) { // inflate menu; adds items action bar if present. getmenuinflater().inflate(r.menu.menu_main, menu); return true; } @override public boolean onoptionsitemselected(menuitem item) { // handle action bar item clicks here. action bar // automatically handle clicks on home/up button, long // specify parent activity in androidmanifest.xml. int id = item.getitemid(); //noinspection simplifiableifstatement if (id == r.id.action_settings) { return true; } return super.onoptionsitemselected(item); } }
bookingactivity.java
public class bookingactivity extends actionbaractivity { httppost httppost; stringbuffer buffer; httpresponse response; httpclient httpclient; list<namevaluepair> namevaluepairs; utils utils; intent i; static string tag = "gcm demo"; string user_name; string regid; string sender_id = "224163385438"; string api_key = "aizasycl3rek_onegldhcp8giso_5p6xwe3guva"; @override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_booking); = getintent(); registerreceiver(broadcastreceiver, new intentfilter( "chat_message_received")); } broadcastreceiver broadcastreceiver = new broadcastreceiver() { @override public void onreceive(context context, intent intent) { bundle b = intent.getextras(); string message = b.getstring("message"); log.i(tag, " received in activity " + message + ", name = " + i.getstringextra("username")); } }; public void onclick(final view view) { if (view == findviewbyid(r.id.booking)) { sendmessage(); //clearmessagetextbox(); } } public void sendmessage() { final string messagetosend = "driver booked by: "+i.getstringextra("username"); if (messagetosend.length() > 0) { log.i(tag, "sendmessage"); thread thread = new thread() { @override public void run() { try { httpclient = new defaulthttpclient(); httppost = new httppost("http://www.test5.luminativesolutions.com/cabbooking/ws/gcmdemo/gcm_engine.php"); namevaluepairs = new arraylist<namevaluepair>(1); namevaluepairs.add(new basicnamevaluepair("message", messagetosend)); namevaluepairs.add(new basicnamevaluepair( "registrationids", i.getstringextra("regid"))); namevaluepairs.add(new basicnamevaluepair("apikey", api_key)); httppost.setentity(new urlencodedformentity( namevaluepairs)); responsehandler<string> responsehandler = new basicresponsehandler(); final string response = httpclient.execute(httppost, responsehandler); log.i(tag, "response : " + response); if (response.trim().isempty()) { log.d(tag, "message not sent"); } } catch (exception e) { log.d(tag, "exception : " + e.getmessage()); } } }; thread.start(); } } @override public boolean oncreateoptionsmenu(menu menu) { // inflate menu; adds items action bar if present. getmenuinflater().inflate(r.menu.menu_booking, menu); return true; } @override public boolean onoptionsitemselected(menuitem item) { // handle action bar item clicks here. action bar // automatically handle clicks on home/up button, long // specify parent activity in androidmanifest.xml. int id = item.getitemid(); //noinspection simplifiableifstatement if (id == r.id.action_settings) { return true; } return super.onoptionsitemselected(item); } }
utils.java
public class utils { static context context; public static final string tag = "utils"; public static final string username = "username"; public static final string property_reg_id = "registration_id"; private static final string property_app_version = "appversion"; public utils(context context) { utils.context = context; } public sharedpreferences getgcmpreferences() { return context.getsharedpreferences(((actionbaractivity) context) .getclass().getsimplename(), context.mode_private); } public void savepreferences(string key, string value) { final sharedpreferences prefs = getgcmpreferences(); log.i(tag, key + " : " + value); sharedpreferences.editor editor = prefs.edit(); editor.putstring(key, value); editor.commit(); } public string getfrompreferences(string key) { final sharedpreferences prefs = getgcmpreferences(); string value = prefs.getstring(key, ""); if (value.isempty()) { log.i(tag, key + " not found."); return ""; } return value; } string getregistrationid() { final sharedpreferences prefs = getgcmpreferences(); string registrationid = prefs.getstring(property_reg_id, ""); if (registrationid.isempty()) { log.i(tag, "registration not found."); return ""; } // check if app updated; if so, must clear registration id // since existing regid not guaranteed work new // app version. int registeredversion = prefs.getint(property_app_version, integer.min_value); int currentversion = getappversion(); if (registeredversion != currentversion) { log.i(tag, "app version changed."); return ""; } return registrationid; } static int getappversion() { try { packageinfo packageinfo = context.getpackagemanager() .getpackageinfo(context.getpackagename(), 0); return packageinfo.versioncode; } catch (namenotfoundexception e) { // should never happen throw new runtimeexception("could not package name: " + e); } } public void storeregistrationid(string regid) { final sharedpreferences prefs = getgcmpreferences(); int appversion = utils.getappversion(); log.i(tag, "saving regid on app version " + appversion); log.i(tag, "reg id : " + regid); sharedpreferences.editor editor = prefs.edit(); editor.putstring(property_reg_id, regid); editor.putint(property_app_version, appversion); editor.commit(); } public string getcurrentipaddress() { return "http://192.168.0.101/"; } public void showtoast(final string txt) { ((activity) context).runonuithread(new runnable() { public void run() { toast.maketext(context, txt, toast.length_long).show(); } }); } }
in app user login simple user or login driver if user login , register gcm , press booked button notification send specific driver
it because calling own device id notified,please check out backend , registered users must have own device id's . make sure different device id generated while new registration happens.
Comments
Post a Comment