Push notifications provides a way to notify your mobile application on new message or event that is related to your application. Push notification are received and displayed regardless to the application running status.
When a device receive push notification the application icon and a message appears on the device status bar. If the user press the notification message he is directed to your application.
The tutorial will demonstrate:
1. How to receive the notification and display it
2. How to implement popup message upon receiving push notification. (I am leaving out the decision what is prefer by the users status bar notification or popups)
The first step is to have a Parse.com account and open and application in the Parse.com dashboard.
Create Android empty project and add Parse SDK jar to your lib directory.
On your Android application:
1. Initialize parse SDK with your application,client keys.
2. Register to Parse notification services:
Using Parse.com as notifications server
In this post i will show how to use push notifications from Parse.com.The tutorial will demonstrate:
1. How to receive the notification and display it
2. How to implement popup message upon receiving push notification. (I am leaving out the decision what is prefer by the users status bar notification or popups)
The first step is to have a Parse.com account and open and application in the Parse.com dashboard.
Create Android empty project and add Parse SDK jar to your lib directory.
On your Android application:
1. Initialize parse SDK with your application,client keys.
2. Register to Parse notification services:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//Parse SDK Init
Parse.initialize(this, Applicatio Id, Client ID);
PushService.setDefaultPushCallback(this, MainActivity.class);
ParseInstallation.getCurrentInstallation().saveInBackground();
}
In the manifest file add the following permissions:
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<uses-permission android:name="android.permission.VIBRATE" />
Register receiver just before the closing </application> tag :
<receiver android:name="com.parse.ParseBroadcastReceiver" >
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
<action android:name="android.intent.action.RECEIVE_BOOT_COMPLETED" />
<action android:name="android.intent.action.USER_PRESENT" />
</intent-filter>
</receiver>
At this point your application is ready for receiving push notification in order to test it go to Parse dashboard and select Push notification tab and send notification .
Check the device /emulator status bar to see the notification message.
Implementing Push Notification Receiver
Lets implement our own receiver that will open popup dialog. Parse API provide way to send the push notification as JSON object that encapsulate more data inside the notification. The supported JSON object includes the intent that should be triggered when the notification received.
First change the manifest and add the following receiver :
<receiver android:name="com.iakremera.pushdemo.MyCustomReceiver" >
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
<action android:name="android.intent.action.USER_PRESENT" />
<action android:name="com.iakremera.pushdemo.UPDATE_STATUS" />
</intent-filter>
</receiver>
The bold action represent the information that will be sent from the server in order to fire the intent.
The receiver code look like :
public class MyCustomReceiver extends BroadcastReceiver {
private static final String TAG = "MyCustomReceiver";
@Override
public void onReceive(Context context, Intent intent) {
try {
if (intent == null)
{
Log.d(TAG, "Receiver intent null");
}
else
{
String action = intent.getAction();
Log.d(TAG, "got action " + action );
if (action.equals("com.iakremera.pushdemo.UPDATE_STATUS"))
{
String channel = intent.getExtras().getString("com.parse.Channel");
JSONObject json = new JSONObject(intent.getExtras().getString("com.parse.Data"));
Log.d(TAG, "got action " + action + " on channel " + channel + " with:");
Iterator itr = json.keys();
while (itr.hasNext()) {
String key = (String) itr.next();
if (key.equals("customdata"))
{
Intent pupInt = new Intent(context, ShowPopUp.class);
pupInt.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK );
context.getApplicationContext().startActivity(pupInt);
}
Log.d(TAG, "..." + key + " => " + json.getString(key));
}
}
}
} catch (JSONException e) {
Log.d(TAG, "JSONException: " + e.getMessage());
}
}
}
The receiver verify the action that is required matches the registered one and start the ShowPopUp activity. The ShowPopUp activity simply display the message as dialog widow. In order to achieve it flow the steps.
1. There are couple of ways to define popup window in android I choose to create the popup as activity that is launched as dialog. Define layout file popupdialog.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/menuEditItemLayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<LinearLayout
android:layout_width="250dp"
android:layout_height="wrap_content"
android:gravity="center" >
<TextView
android:id="@+id/durationTitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_gravity="center"
android:text="Task"
android:textColor="@android:color/holo_blue_dark"
android:textSize="25sp" />
</LinearLayout>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="48dp"
android:layout_alignParentBottom="true">
<View
android:layout_width="match_parent"
android:layout_height="1dip"
android:layout_marginLeft="4dip"
android:layout_marginRight="4dip"
android:background="?android:attr/dividerVertical"
android:layout_alignParentTop="true"/>
<View
android:id="@+id/ViewColorPickerHelper"
android:layout_width="1dip"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_alignParentBottom="true"
android:layout_marginBottom="4dip"
android:layout_marginTop="4dip"
android:background="?android:attr/dividerVertical"
android:layout_centerHorizontal="true"/>
<Button
android:id="@+id/popOkB"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:layout_toLeftOf="@id/ViewColorPickerHelper"
android:background="?android:attr/selectableItemBackground"
android:text="@android:string/cancel"
android:layout_alignParentBottom="true"/>
<Button
android:id="@+id/popCancelB"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_alignParentRight="true"
android:layout_alignParentTop="true"
android:background="?android:attr/selectableItemBackground"
android:text="@android:string/ok"
android:layout_alignParentBottom="true"
android:layout_toRightOf="@id/ViewColorPickerHelper"/>
</RelativeLayout>
</LinearLayout>
2. The activity implementation:
public class ShowPopUp extends Activity implements OnClickListener {
Button ok;
Button cancel;
boolean click = true;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setTitle("Cupon");
setContentView(R.layout.popupdialog);
ok = (Button)findViewById(R.id.popOkB);
ok.setOnClickListener(this);
cancel = (Button)findViewById(R.id.popCancelB);
cancel.setOnClickListener(this);
}
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
finish();
}
}
3. Register the activity in the manifest file
<activity
android:name="com.iakremera.pushnotificationdemo.ShowPopUp"
android:label="@string/app_name"
android:theme="@android:style/Theme.Holo.Light.Dialog" >
</activity>
In order to send the notification you can send the following JSON object (this is only an example).
In order to launch an intent the JSON object should not include the "alert" field. The notification text should be inserted into user defined field inside the JSON object (like "customdata").
In the attached source code the notification is sent from the device.
.
{
"action":"com.iakremera.pushnotificationdemo.UPDATE_STATUS",
"customdata":"My string"
}
The screenshot :
The source code for this demo project can be downloaded here.
More options using Parse.com push notification can be found here.
Hi Itai Ahiraz, through this am getting notification but unable to read the message which am sending from dashboard.can you please suggest me how to read and display parse notification on activity when i clicked on that message in notification bar
ReplyDeleteThanks in advance.........
Hi
DeleteYou need to send your activity Intenet (see above in the onReceiver implementation). You should also run your app at least one time after downloading it to your device.
Thanks for providing the information
ReplyDeleteFor more information please visit here push notification server.
Thanks for sharing info and i also tell some thing about Parse. Parse provide 3 unique functionality namely parse push, Parse analytic and Parse core that make it stand different from others. Parse push helps in scheduling whereas parse core helping in saving the data or content.
ReplyDeleteHi Itai Ahiraz, I tried your source code for push notification and its working great. Thanks for sharing.
ReplyDeleteAndroid Training Chennai
This comment has been removed by the author.
ReplyDeleteHi ,I tried your example it works great but the only problem is that I just got "Task" in dialog instead of my notification message that I sent it. Please help me to display my notification message instead of "Task". I really appreciated your answer and thanks for information :)
ReplyDeleteAndroid Training in Chennai
ReplyDeleteYour blog is really useful for me. Thanks for sharing this useful blog..Suppose if anyone interested to learn Android Course in Chennai please visit fita academy which offers best Android Training in Chennai at reasonable cost.
Android Training Institutes in Chennai
Thanks for sharing this valuable information to our vision. You have posted a trust worthy blog keep sharing.Nice article i was really impressed by seeing this article, it was very interesting and it is very useful for me.. Android Training in chennai | Android Training chennai | Android course in chennai | Android course chennai
ReplyDeleteI gathered a lot of information through this article.Every example is easy to understandable and explaining the logic easily.Thanks! Phonegap training in chennai | Phonegap training chennai | Phonegap course in chennai | Phonegap course chennai
ReplyDeleteThanks for sharing this info but I just want to ask tht is it possible not to message frm the parse dashboard but the code embedded in the project tht should be triggered on the click event of a button.
ReplyDeleteThis comment has been removed by the author.
ReplyDeleteExcellent post!!! Training on android technology helps professionals to establish a career in android mobile application development. Android Training Institute in Chennai Best Android Training institute in Chennai
ReplyDeleteThanks for sharing this valuable information to our vision. You have posted a trust worthy blog keep sharing.
ReplyDeleteRegards,
Informatica courses in Chennai|Informatica institutes in Chennai|Salesforce training institute in Chennai
Nice info.Thanks for sharing such great valuable information.Really your blog is very informative.Mobile App Developers in Bangalore| Graphic Designers in Bangalore
ReplyDeletejava training in chennai good one
ReplyDeletevery nice
ReplyDeletelenovo laptop service center chennai
very nice
ReplyDeleteBank exam questions and answers
thank for you sharing Dàn lạnh âm trần Cassette Multi Daikin
ReplyDeleteThanks for sharing this informative blog. Suppose if anyone interested to learn android in chennai, best android training institute!
ReplyDeleteThis comment has been removed by the author.
ReplyDeleteThis information is impressive..I am inspired with your post writing style & how continuously you describe this topic. After reading your post,thanks for taking the time to discuss this, I feel happy about it and I love learning more about this topic
ReplyDeletebest ccPlus training institute
This comment has been removed by the author.
ReplyDeleteThis comment has been removed by the author.
ReplyDeletethank for you sharing. the best training in chennai.the best j2ee training in chennai»
ReplyDeleteThanks for sharing this informative blog.the best ssas training in chennai»
ReplyDeletevery nice.the best c-net training in chennai»
ReplyDeletevery nice.the best c-net training in chennai»
ReplyDeletegood one java training in chennnai
ReplyDeleteThis comment has been removed by the author.
ReplyDeletethank for you sharing best informatica training institute
ReplyDeleteThanks for sharing this valuable information to our vision. You have posted a trust worthy blog keep sharing.
ReplyDeleteoracle dba training in chennai
thank for you sharing
ReplyDeleteMQ training in chennai
ReplyDeleteHi, probably our entry may be off topic but anyways, I have been surfing around your blog and it looks very professional. It’s obvious you know your topic and you appear fervent about it. I’m developing a fresh blog plus I’m struggling to make it look good, as well as offer the best quality content. I have learned much at your web site and also I anticipate alot more articles and will be coming back soon. Thanks you.
Android App Development Training in Chennai
ReplyDeleteThank you very much for providing this notes it has been very much useful for writing the code.
best android training in bangalore
Great post! I am see the great contents and step by step read really nice information.I am gather this concepts and more information. It's helpful for me my friend. Also great blog here with all of the valuable information you have.
ReplyDeleteWebsphere Training in Chennai
It's extraordinarily impressive I'll be seen that many of the bloggers relevant android community that the time I read that's your suggestions helped me and define the new thing. pretty understandable helpful content.
ReplyDeleteDot Net Training in Chennai
.Net Training Institute in Chennai
Hadoop Training in Chennai with Placement
Best Selenium Training in Chennai
Thank you for providing such nice and useful information.
ReplyDeleteandroid training in chennai
Ios app training in chennai
java training in chennai
Thanks for sharing valuable information
ReplyDeleteandroid training in chennai
Ios app training in chennai
java training in chennai
This comment has been removed by the author.
ReplyDeleteThis is really very interesting. This blog contain too much information about parse android app development.
ReplyDeletecse projects in chennai and provides the best project for IEEE students. The stage utilizes the protest arranged eee projects in chennai and ece projects in chennai.
ReplyDeleteI liked your blog.Thanks for your interest in sharing the information.keep updating.
ReplyDeleteSelenium Training in Chennai
selenium testing training in chennai
Best ios Training institute in Chennai
iOS Course Chennai
JAVA Training Institutes in Chennai
Java Courses in Chennai
Awwsome informative blog ,Very good information thanks for sharing such wonderful blog with us ,after long time came across such knowlegeble blog. keep sharing such informative blog with us.
ReplyDeleteAirport Management Courses in Chennai | Airport Management Training in Chennai | Airline Courses in Chennai | Airport Management Courses in Chennai | Diploma in Airport Management Course in Chennai | Airlines Training Chennai | Airline Academy in Chennai
I am a regular reader of your blog, Amazing content with proper examples. Thank you for this blog.
ReplyDeleteDigital Marketing Course in Bangalore
Digital Marketing Training in Bangalore
Digital Marketing Training in Velachery
Digital Marketing Classes near me
Digital Marketing Training in Kandanchavadi
Digital Marketing Training in Sholinganallur
Thanks for sharing this information. This is really useful. Keep doing more.
ReplyDeleteBest Spoken English Class in T Nagar Chennai
Spoken English Class in Kodambakkam
Spoken English in Valasaravakkam
Best Spoken English Classes in Chrompet
Spoken English Class in Guduvanchery
Spoken English Class in Tambaram East
Spoken English Training near me
It is very excellent blog and useful article thank you for sharing with us, keep posting.
ReplyDeleteSpoken English Classes in Chennai
Spoken English Class in Chennai
Best Spoken English Classes in Chennai
Spoken English in Chennai
Best Spoken English Class in Chennai
English Coaching Classes in Chennai
Best Spoken English Institute in Chennai
Really very nice blog information for this one and more technical skills are improve,i like that kind of post.
ReplyDeleteData Science training in kalyan nagar | Data Science training in OMR | Data science training in chennai
Data Science training in chennai | Best Data science Training in Chennai | Data science training in velachery | Data Science Training in Chennai
Data science training in tambaram | Data Science training in Chennai | Data science training in jaya nagar | Data science Training in Bangalore
Really very nice blog information for this one and more technical skills are improve,i like that kind of post.
ReplyDeleteJava training in Bangalore | Java training in Marathahalli | Java training in Bangalore | Java training in Btm layout
Java training in Bangalore | Java training in Marathahalli | Java training in Bangalore | Java training in Btm layout
Useful information.I am actual blessed to read this article.thanks for giving us this advantageous information.I acknowledge this post.and I would like bookmark this post.Thanks
ReplyDeleteData Science Training in Chennai | Best Data science Training in Chennai | Data Science training in anna nagar | Data science training in Chennai
Data Science training in chennai | Best Data Science training in chennai | Data science training in Bangalore | Data Science training institute in Bangalore
Data Science training in marathahalli | Data Science training in Bangalore | Data Science training in btm layout | Data Science Training in Bangalore
Really very nice blog information for this one and more technical skills are improve,i like that kind of post.
ReplyDeleteadvanced excel training in bangalore | Devops Training in Chennai
Hi,
ReplyDeleteThanks for sharing a very interesting article about Push Notification. This is very useful information for online blog review readers. Keep it up such a nice posting like this.
Regards,
WondersMind,
Web Design Company Bangalore
ReplyDeleteWhoa! I’m enjoying the template/theme of this website. It’s simple, yet effective. A lot of times it’s very hard to get that “perfect balance” between superb usability and visual appeal. I must say you’ve done a very good job with this.
AWS Training in BTM Layout |Best AWS Training in BTM Layout
AWS Training in Marathahalli | Best AWS Training in Marathahalli
Amazing Write-up. Great content. It shows your expertise on the subject. Thanks for Sharing.
ReplyDeletePhotoshop Course Training in Chennai
Photoshop Classes in Velachery
Photoshop Classes in Adyar
Photoshop Classes in Tambaram
Photoshop Course
Photoshop classes
Photoshop Training
Thanks for your informative article, Your post helped me to understand the future and career prospects & Keep on updating your blog with such awesome article.
ReplyDeleteangularjs Training in bangalore
angularjs Training in bangalore
angularjs Training in chennai
automation anywhere online Training
angularjs interview questions and answers
Hi,
ReplyDeleteThanks for sharing a very interesting article about Push Notification. This is very useful information for online blog review readers. Keep it up such a nice posting like this.
Regards,
WondersMind,
Web Design Company Bangalore
Nice blog
ReplyDeletejava training in Marathahalli
spring training in Marathahalli
java training institute in Marathahalli
spring and hibernate training in Marathahalli
Nice post..
ReplyDeleteDOT NET training in btm
dot net training institute in btm
dot net course in btm
best dot net training institute in btm
Thanks for information , This is very useful for me.
ReplyDeleteKeep sharing Lean Six Sigma Green Belt Training Bangalore
whatsapp group links 2019
ReplyDeletecheck
ReplyDeleteAmazing Post. The idea you shared is wonderful. Pls keep on posting.
ReplyDeleteIonic Training in Chennai
Ionic Course in Chennai
Ionic Corporate Training
Ionic Training Institute in Chennai
Best Ionic Training in Chennai
Ionic courses
Ionic Training in Anna Nagar
Ionic Training in T Nagar
1. many peoples want to join random whatsapp groups . as per your demand we are ready to serve you whatsapp group links . On this website you can join unlimited groups . click and get unlimited whatsapp group links 18+
ReplyDelete
ReplyDeleteI like viewing web sites which comprehend the price of delivering the excellent useful resource Python training in pune free of charge. I truly adored reading your posting. Thank you!
Very good information you had shared.Thanks!
ReplyDeleteAI Development companies in Coimbatore
Blockchain Development Companies & App Developers in India
best leading Cloud Computing & Cloud Hosting Service Providers
Sach janiye
ReplyDeleteMrinalini Sarabhai
Sandeep Maheshwari
dr sarvepalli radhakrishnan
Arun Gawli
Rani Padmini
Sushruta
Harshavardhana
Nanaji Deshmukh
Tansen
excellent...!!!
ReplyDeleteSelenium training in chennai
Industrial visit in chennai
Internship
Internships in bangalore for cse students 2019
Free internship in chennai for cse students
Network security projects for cse
Ccna course in chennai
Inplant training in chennai for cse
Inplant training for eee students
Kaashiv infotech chennai
Thanks for the points shared in your blog. One more thing I would like to talk about is that fat reduction is not information about going on a celebrity diet and trying to shed as much weight as you can in a couple of weeks.The most effective way to lose weight is by getting it bit by bit and right after some basic recommendations which can help you to make the most from your attempt to shed weight. You may understand and be following some of these tips, although reinforcing information never damages. Mahapolice , Majhi naukri, Govnokri, Mpsc world, NMK, Jobchjob, Freshersvoice, Pavitra Portal, Mahavitaran, Mahakosh, Msrtc exam, Mahapariksha, Mahapolice, Mahakosh, Ongc Recruitment, Free Job Alert.
ReplyDeleteThe article is amazing.
ReplyDeleteBig Data Hadoop Training In Chennai | Big Data Hadoop Training In anna nagar | Big Data Hadoop Training In omr | Big Data Hadoop Training In porur | Big Data Hadoop Training In tambaram | Big Data Hadoop Training In velachery
Your info is really amazing with impressive content..Excellent blog with informative concept.
ReplyDeleteAndroid Training Institute in Chennai | Android Training Institute in anna nagar | Android Training Institute in omr | Android Training Institute in porur | Android Training Institute in tambaram | Android Training Institute in velachery
It's so amazing!
ReplyDeleteThanks for sharing this post!
đại lý bán máy lạnh giá sỉ
máy lạnh âm trần daikin
máy lạnh tủ đứng daikin
máy lạnh giấu trần nối ống gió daikin
máy lạnh tủ đứng daikin
máy lạnh multi daikin
Thanks for your informative article,Your post helped me to understand the future and career prospects & Keep on updating your blog with such awesome article.
ReplyDeleteweb designing training in
AWS training in Chennai
AWS Online Training in Chennai
AWS training in Bangalore
AWS training in Hyderabad
AWS training in Coimbatore
AWS training
Really impressive post. I read it whole and going to share it with my social circules. I enjoyed your article
ReplyDeletehadoop training in chennai
hadoop training in velachery
salesforce training in chennai
salesforce training in velachery
c and c plus plus course in chennai
c and c plus plus course in velachery
machine learning training in chennai
machine learning training in velachery
Thank you very much for providing this notes it has been very much useful for writing the code.
ReplyDeletesap training in chennai
sap training in annanagar
azure training in chennai
azure training in annanagar
cyber security course in chennai
cyber security course in annanagar
ethical hacking course in chennai
ethical hacking course in annanagar
This comment has been removed by the author.
ReplyDeleteI tried your example it works great but the only problem is that I just got "Task" in dialog instead of my notification message that I sent it. Please help me to display my notification message instead of "Task". I really appreciated your answer and thanks for information :)
ReplyDeletejava training in chennai
java training in omr
aws training in chennai
aws training in omr
python training in chennai
python training in omr
selenium training in chennai
selenium training in omr
Nice blogsalesforce training in chennai
ReplyDeletesoftware testing training in chennai
robotic process automation rpa training in chennai
blockchain training in chennai
devops training in chennai
It's been our pleasure to inform you that our institution is offering a great deal by giving CS executive classes and a free CSEET class only for those who are interested in gaining knowledge. So what are you waiting for contact us or visit our website at https://uniqueacademyforcommerce.com/
ReplyDeleteAximtrade Mt4 Download Is The Foreign Exchange Trading Platform Of Choice For Over 100,000 Investors Around The World. It's The Place To Trade Forex And Cfds On Global Markets, With Access To A Huge Range Of Assets And Features All In One Place.
ReplyDeleteWant To Trade Forex With AVATRADE REVIEW ? Read This Blog First To Find Out About The Best Forex Trading Conditions. We Review The Most Popular Forex Brokers And Tell You What You Need To Know.
ReplyDeleteThis post is so interactive and informative.keep update more information...
ReplyDeleteJava Training in Tambaram
java course in tambaram
ReplyDeleteWonderful blog.Thanks for sharing such a worthy information...
Python Training in Hyderabad
Python Classes in Gurgaon
This post is so interactive and informative.keep update more information…
ReplyDeleteData Science Training in Anna Nagar
Data Science course in Chennai
Nice post. thanks for sharing this post.keep uploading like this.project centers in chennai|project centers in vadapalani
ReplyDeleteI want the world to know about where to invest their hard earned money and get fruitful returns. If one is looking forward of investing he can go into investment of crypto coins.
ReplyDeleteYou can invest in Fudxcoin company that deals in the selling and purchasing of Crypto Currency. It is a reliable company. One need not doubt in investing in it as i have also bought crypto currency from it and feeling very satisfied with their services.
crypto currency block chain technology
Very informative blog . But i also want the world to know There is one company in my mind, its name is AFM Logistics pvt Ltd .It gives best quality logistics service ,ie is AFM Logistics Pvt Ltd is an international freight forwarding and customs clearing company established in Delhi. The company was constituted in 2012 and is indulged in providing complete logistics solution. The company has its own setup and wide network of agents throughout the world. International Logistics Companies In India . They are the best air cargo and ocean freight forwarding company in Delhi, India. AFM Logistics Pvt Ltd has been working as Import and Export Agent in India since 2012. They have been providing personal baggage shipping services in India for a very long time.
ReplyDelete9050025388
Nice Post!!! gratitude for imparting this post to us.
ReplyDeleteAndroid Development Course in Chennai
Android Online Course
Android Training Institutes in Bangalore
Thanks for sharing the informative data. Keep sharing…
ReplyDeleteJewellery Software
Jewellery Software
great Post...Thanks for sharing.
ReplyDeleteSpoken English classes in Pune