# Native Code > برنامه نویسی موبایل > Android Studio >  کار با notification parse در اندروید

## javadi3d

سلام من برای ارسال نوتیفیکیشن از parse استفاده میکنم و مشکلی هم ندارم ولی میخوام وقتی روی نوتیفیکیشن کلیک میشه بره توی صفحه ی دیگه و متن نوتیفیکشن را توی یک textview نمایش بده کد رفتن به یک اکتیویتیه دیگه را هم بلدم ولی نمیدونم چه جوری متن را نمایش بدم  منتظر کمک شما هستم! یا علی ع

----------


## Nevercom

تو صفحه ی ارسال Push حالت JSON رو انتخاب کنید.
در این حالت نوشتن دو فیلد alert و title الزامی هست:

parse-push.png

شما می تونید به هر تعداد فیلدهای اضافه به این JSON اضافه کنید و در اپلیکیشن بهشون دسترسی داشته باشید (بر می گرده به خلاقیت خودتون تا بتونید استفاده های مفیدتری از Push Notification بکنید)

دراکتیویتی ای که بعنوان دریافت کننده ی Push معرفی کردید، با کدهای زیر به فیلدهایی که در json تعریف کردید دسترسی پیدا می کنید:
final Intent intent = getIntent();
if (intent.hasExtra("com.parse.Data")) {
    ParseAnalytics.trackAppOpened(intent);
    try {




        final JSONObject jsonData = new JSONObject(intent.getExtras().getString(
                "com.parse.Data"));
        final String title = jsonData.getString("title");
        final String message = jsonData.getString("alert");
        tvTitle.setText(title);
        tvMessage.setText(message);


    } catch (final JSONException e) {
        e.printStackTrace();
    }
}

----------


## javadi3d

خیلی ممنون  ولی وقتی json را انتخاب میکنم و پیام را ارسال میکنم اصلا پیام نمیره روی گوشی اصلا برای حالت json چه کار باید کرد؟

----------


## Nevercom

اگه دو فیلد alert و title رو تو JSON نوشته باشید (مثل تصویر)، پیام توسط دستگاه دریافت میشه و نمایش هم داده میشه.
برای اینکه در اکتیویتی موردنظر به اون مقادیر دسترسی داشته باشید و ازشون استفاده کنید، نمونه کد بالا رو استفاده کنید.

این رو بارها و بارها تست کردم، هیچ مشکلی ایجاد نمیکنه مگر اینکه خود پارس رو درست استفاده نکرده باشید یا چیزی که گفتم رو درست انجام نداده باشید (در هیچکدوم از این دومورد چندان جای خطایی هم وجود نداره)

----------


## mehdilove09

عکس کوچکی که کنار نوتیفیکیشن نشون داده میشه ثابت هست یا میشه تغییرش داد؟

----------


## hamedjj

حالا چطور میشه یه نوتیفیکیشن فرستادکه با لمس کردن آن به صفحه برنامه ای در بازار بره

----------


## Nevercom

> عکس کوچکی که کنار نوتیفیکیشن نشون داده میشه ثابت هست یا میشه تغییرش داد؟


در نسخه ی جدید Parse میشه تغییرش داد



> حالا چطور میشه یه نوتیفیکیشن فرستادکه با لمس کردن آن به صفحه برنامه ای در بازار بره


در نسخه ی جدید کافیه کلید uri رو در JSON ارسالی اضافه کنید و مقدارش رو آدرس اون صفحه (یا درواقع یک URI) بزارید

----------


## hamedjj

Nevercom جان راستش من قبلا دنبال این موضوع رفته بودم اما نتونستم پیاده سازیش کنم.
به بعضی از بچه ها هم گفتم اونا هم نتونستن کاری انجام بدن

با سرچ کردنبه یه سری لینک رسیدم ولی نشد دیگه :
https://www.parse.com/questions/tryi...ification-text
https://www.parse.com/questions/send...id-market-link
https://parse.com/docs/push_guide#receiving/Android

میشه با یه تیکه کد و چند خط توضیح بگی دقیقا باید چیکار بکنیم؟
خیلی برام گنگه

----------


## Nevercom

توی یک ویدئو فرآیند انجام کار با نسخه ی 1.7 Parse رو توضیح دادم.

لینک دانلود ویدئو: http://bit.ly/ParsePushTut (حجم: ۹۵ مگابایت)
اگر تو دانلود ویدئو مشکل داشتید می تونید تو آپارات ببینیدش: http://www.aparat.com/v/y1SKe

لینک دانلود سورس: http://bayanbox.ir/id/3556426083468599252 (حجم: ۱.۵ مگابایت)

----------


## shs1377

چجوری میشه که برای هر نوتیفیکیشنی که برای کاربران ارسال میکنیم یک آیکن خاص بزاریم یعنی هر نوتیفیکیشن آیکنش با نوتیفیکیشن های دیگه فرق بکنه چطور میشه این کار رو کرد؟

----------


## Nevercom

باید در متد getSmallIconID در کلاسی که از ParsePushBroadcatReceiver مشتق شده، آیکن موزد نظر رو انتخاب کنید.

----------


## shs1377

> باید در متد getSmallIconID در کلاسی که از ParsePushBroadcatReceiver مشتق شده، آیکن موزد نظر رو انتخاب کنید.


با این روش میشه عکس مورد نظر رو از اینترنت بگیریم؟

----------


## zikimiki

> تو صفحه ی ارسال Push حالت JSON رو انتخاب کنید.
> در این حالت نوشتن دو فیلد alert و title الزامی هست:
> 
> parse-push.png
> 
> شما می تونید به هر تعداد فیلدهای اضافه به این JSON اضافه کنید و در اپلیکیشن بهشون دسترسی داشته باشید (بر می گرده به خلاقیت خودتون تا بتونید استفاده های مفیدتری از Push Notification بکنید)
> 
> دراکتیویتی ای که بعنوان دریافت کننده ی Push معرفی کردید، با کدهای زیر به فیلدهایی که در json تعریف کردید دسترسی پیدا می کنید:
> final Intent intent = getIntent();
> ...


با سلام

این کد ارور میده !

----------


## Nevercom

> با این روش میشه عکس مورد نظر رو از اینترنت بگیریم؟


در زمان دریافت Push Notification اونقدر فرصت نیست که تصویر رو دانلود کنید، ضمن اینکه خروجی این متد int هست که باید ResourceId باشه.
درعوض می تونید در متد OnPushReceived ار نمایش Notification جلوگیری کنید، intent دریافتی رو به یه Service انتقال بدید، اونجا هر چیزی لازم هست رو دانلود کنید و یک Notification بسازید و نمایش بدید



> با سلام
> 
> این کد ارور میده !


اصل کد مشکلی نداره و از برنامه ی خودم کپی شده، توجه کنید tvText و tvTitle به دوتا TextView اشاره می کنه که باید موجود باشن، این کد فقط دریافت داده از Intent و پارس کردن JSON رو نشون میده.

----------


## zikimiki

> توجه کنید tvText و tvTitle به دوتا TextView اشاره می کنه که باید موجود باشن، .


با سلام و ممنون از جواب حضرتعالی.

دقیقا به همین دو تا مورد ایراد میگیره !
میشه لطف بفرمائید این قسمت رو بیشتر توضیح بفرمائید؟

----------


## Nevercom

تو این کد من عنوان و متن پیام ارسالی رو از Push Notification ی که دریافت شده، جدا می کنم.
من اومدم و این داده ها رو توی دوتا TextView نمایش دادم، یعنی در اکتیویتی خودم دوتا TextView داشتم، . با دستور setText مقدارشون رو ست کردم.

بالاتر از این کدی که گذاشتم در اکتیویتیم، کدی شبیه به این وجود داره:
TextView tvTitle = (TextView) findViewById(R.id.tvTitle);

----------


## zikimiki

> تو این کد من عنوان و متن پیام ارسالی رو از Push Notification ی که دریافت شده، جدا می کنم.
> من اومدم و این داده ها رو توی دوتا TextView نمایش دادم، یعنی در اکتیویتی خودم دوتا TextView داشتم، . با دستور setText مقدارشون رو ست کردم.
> 
> بالاتر از این کدی که گذاشتم در اکتیویتیم، کدی شبیه به این وجود داره:
> TextView tvTitle = (TextView) findViewById(R.id.tvTitle);


ممنون از حضرتعالی
به درستی انجام شد.

فقط یه مشکل !
چرا وقتی روی نوتیفیکش کلیک می کنیم برنامه متوقف میشه؟
حتی در برخی موارد دیدم که وقتی برنامه هم باز نیست و در حال کار کردن با برنامه های دیگه هستیم برنامه ای که از parse  استفاده می کنه خود به خود با پیغام متوقف شد روبه رو می شه.در حالی که اصلا با اون برنامه کاری نداریم !! و اون برنامه کاملا بسته ست !!
برای شما این مشکل پیش نیومده !

----------


## Nevercom

خیر، من با همچین مشکلی مواجه نشدم. درواقع در آموزشی که تهیه می کردم آخرین نسخه رو دانلود کردم (که قبلش باهاش کار نکرده بودم) و بعد دیدم اگه کلید uri در JSON موجود نباشه با کلیک رو Notification برنامه کرش می کنه که روش حل مشکل رو پیدا کردم و در سورس کد قرار دادم.
همیشه هم یادتون باشه که در Activity کلاس Parse رو راه اندازی نکنید (Parse.initialize)، اینکار حتماً باید در کلاس Application صورت بگیره (و Context هم از جنس ApplicationContext باشه) تا برنامه خود بخود کرش نکنه و مشکل دیگه ای پیش نیاد

----------


## shs1377

دوست عزیز ممکنه مشکلتون بخاطر uri باشه اگر اول لینک http:// نزارید کرش میکنه

----------


## mehdilove09

من همه مراحل رو رفتم و از این استفاده کردم هیچ مشکلی هم نداره.
http://iact.ir/%D8%A7%D8%B3%D8%AA%D9...-notification/

اینم کدurl : یعنی روی نوتیفیکیشن که کلیک کنی یه آدرس باز بشه مثل لینک برنامه در بازار

@Override  public void onReceive(Context context, Intent intent) {
    try {
      String action = intent.getAction();
      String channel = intent.getExtras().getString("com.parse.Channel");
      JSONObject json = new JSONObject(intent.getExtras().getString("com.parse  .Data"));

      String url = json.getString("url");
      Intent i = new Intent(Intent.ACTION_VIEW);
      i.setData(Uri.parse(url));
      startActivity(i);

    } catch (JSONException e) {
      Log.d(TAG, "JSONException: " + e.getMessage());
    }
  }
در قسمت نوتیفیکیشن پارسه(json) بنویسید :
"آدرس مورد نظر":"url"
آدرس رو با http:// بویسید وگر نه کرش میکنه.

----------


## mehdilove09

مشکلم اینجاست که وقتی از برنامه بیام بیرون همه اطلاعاتی رو که فرستادم حذف مشه
میخوام تو اون صفحه بمونه مثل catch کردن
اگه کسی بلده  کمک کنه

----------


## mehdilove09

مانند یک صفحه خبر باشه متن ها هر بار که با notification ارسال میشه با بستن برنامه بمونه.
و با هر بار ارسال نوتیفیکیشن جایگزین بشه

----------


## Nevercom

هربار که یک Push Notification دریافت کردید، اطلاعات دریافتی رو در دیتابیس ذخیره کنید. اینطوری همه ی Push های دریافتی ذخیره میشه و می تونید هر لحظه نمایشش بدید.

----------


## mehdilove09

یکم بیشتر راهنمایی کنید دقیقا" باید چه کاری انجام دهم؟
اگه میشه پروژه مشابه معرفی کنید

----------


## hamedjj

سلام
طبق برای اینکه لینک در نوتیفیکیشن خودمون قرار دهیم باید کلاسی به نام PushBroadcastReciver بسازیم و بعد نوتیفیکیشن را به صورت json ارسال میکنیم و همه چی کاملا درسته.

اما اگر به صورت json نوتیفیکیشن ارسال نکنیم و فقط یک متن ساده بفرستیم ، وقتی که کاربر بر روی نوتیفیکیشن کلیک کرد کرش به وجود میاد

چطور میتونیم این مشکل را مدیریت کنیم؟
آیا همانند intent به بازار اینتنتی برای برنامه های ما وجود دارد که در uri قرار دهیم؟

----------


## Nevercom

همیشه داده های ارسالی بصورت JSON هست
اگر متن ساده وارد کنید، Parse اون متن رو در کلید alert قرار میده و ارسال می کنه.
هیچ تفاوتی نداره که متن ساده بفرستید یا JSON خودتون رو.

اما اگر مشکل این هست که اگر از کلید uri استفاده نکنیم، برنامه کرش می کنه، در سورسی که قرار دادم، کدهایی رو برای رفع این مشکل به کلاس اضافه کردم. البته ممکنه این باگ در نسخه ی جدید تر SDK (اگر اومده باشه) برطرف شده باشه

----------


## narvanco

سلام دوستان
من طبق آموزش مراحل رو دنبال کردم.البته بر اساس ورژن جدید پارس.
وقتی  از طریق جیسون در خود سایت طبق این دستور میفرستم ، ارسال میشه اما وقتی  روش کلیک میشه برنامه بسته میشه.قرار یک سایت رو باز کنه
ممنون میشم راهنمایی بفرمایید
این کدی که در سایت بخش نوتیفیکیشن می نویسم

{   "alert": "برنامه جدید",   
"title": "برنامه جدید",   
"Uri": "http://goole.com" }

----------


## ho33ein19

ببخشید دوستان با این دسترسی ها آیا بازار برنامه رو تایید میکنه؟؟؟؟؟و مشکلی ازشون نمیگیره؟

----------


## #root#

> ببخشید دوستان با این دسترسی ها آیا بازار برنامه رو تایید میکنه؟؟؟؟؟و مشکلی ازشون نمیگیره؟


من پرسیدم، استفاده از Flurry و Parse و Google Analytics و امثال اینها مشکلی نداره، مگر اینکه موارد خاصی وجود داشته باشه.

----------


## aminbir

> من همه مراحل رو رفتم و از این استفاده کردم هیچ مشکلی هم نداره.
> http://iact.ir/%D8%A7%D8%B3%D8%AA%D9...-notification/
> 
> اینم کدurl : یعنی روی نوتیفیکیشن که کلیک کنی یه آدرس باز بشه مثل لینک برنامه در بازار
> 
> @Override  public void onReceive(Context context, Intent intent) {
>     try {
>       String action = intent.getAction();
>       String channel = intent.getExtras().getString("com.parse.Channel");
> ...



سلام به همگی دوستان عزیز
من با استفاده از این لینک تونستم برنامه رو بسازم و از سایت پارسه هم نوتیفیکیشن جیسون فرستادم و با متن وتیتر توی نوتیفیکیشن نمایش میده، نکنه اینجاست که لینک که میفرستم و روی نوتیفیکیشن کلیک میکنم اصلا انگار نه انگار که لینکی وجود داره وصفحه برنامه درمارکت نشون داده نمیشه،
ممنون میشم دوستان راهنمایی بفرمایید که چیکار کنم که با کلیک برروی نوتیفیکیشن بصورت لینک باشه

----------


## mehdilove09

در قسمت نوتیفیکیشن پارسه(json) بنویسید :
"آدرس مورد نظر":"url"
آدرس رو با http:// بویسید وگر نه کرش میکنه.

به نکته بالا توجه کن.

من لینک برنامه خودم رو با http:// آدری بازار گذاشتم درست بود


"url":"http://cafebazaar.ir/app/?id=com.satelliteimage"

روی نوتیفیکیشن که کلیک میکنی مارکت ها و بروزر رو برای باز کردن لینک نشون میده

----------


## mehdilove09

نوشتی "uri" یا "url"  ؟

----------


## esideli

سلام دوستان.
*Nevercom* عزیز با این فیلم آموزشی که گذاشتین کارم راه افتاد و همه چیز درسته. دستت درد نکنه.

فقط یه چند تا سوال برام ایجاد شده:

من می خوام فقط یه نوتیفیکیشن ارسال بشه و با کلیک روش هیچ اکتیویتی باز نشه. این شدنیه؟ 
محدودیتی برای ارسال نوتیفیکیشن وجود نداره؟ (چه از نظر تعداد ارسال در روز و چه از نظر تعداد دریافت کننده)
تا چه مدت برنامه ما توی سایت پارس می مونه و می تونیم رایگان نوتیفیکیشن بفرستیم؟
مرسی.

----------


## Nevercom

اگر از تنظیمات پیشفرض استفاده کنید، با کلیک رو نوتیفیکیشن، اکتیویتی یا URI موردنظر باز میشه.
اما می تونید این فرآیند رو شخصی کنید. همونطور که در ویدئو توضیح دادم، متدهایی وجود داره که کمک می کنه هر مرحله از کار رو شخصی سازی کنید.
مثلاً در متد getNotification، می تونید یک شئ Notification رو ایجاد کنید و return کنید.

البته من همه ی اینها رو شخصاً تست نکردم، با توجه به Signature متدها و راهنمای پارس دارم میگم.

به هرعنوان تمام این مراحل رو می تونید خودتون کنترل کنید، فقط باید ParsePushBroadcastReceiver رو sub class کنید و از متدهای موجود برای شخصی سازی استفاده کنید.

محدودیت در تعداد ارسال یا تعداد در بازه زمانی وجود نداره، اما در ماه فقط به ۱ میلیون کاربر متفاوت (Unique) می تونید Push ارسال کنید (به هرکدوم از این کاربرها هرچقد خواستید می تونید ارسال کنید، محدودیت روی شمار کاربرها هست نه Push های ارسالی)

برنامه ی شما تا زمانی که Parse وجود داشته باشه و خود شما برنامه رو حذف نکنید وجود خواهد داشت، و تا زمانی استفاده مجانی خواهد بود که از میزان محدودیت اکانت رایگان مصرفتون بیشتر نشه. بعد از اون باید به پلن پولی سوئیچ کنید.

----------


## esideli

> تو صفحه ی ارسال Push حالت JSON رو انتخاب کنید.
> در این حالت نوشتن دو فیلد alert و title الزامی هست:
> 
> parse-push.png
> 
> شما می تونید به هر تعداد فیلدهای اضافه به این JSON اضافه کنید و در اپلیکیشن بهشون دسترسی داشته باشید (بر می گرده به خلاقیت خودتون تا بتونید استفاده های مفیدتری از Push Notification بکنید)
> 
> دراکتیویتی ای که بعنوان دریافت کننده ی Push معرفی کردید، با کدهای زیر به فیلدهایی که در json تعریف کردید دسترسی پیدا می کنید:
> final Intent intent = getIntent();
> ...


*ویرایش شد.*
مرسی کد به درستی کار می کنه.

----------


## immubology

من مراحل اموزش شمارو خط به خط انجام دادم در مرحله اخر که فرمودید که میریم تو مانیفست و تو تگ اپلیکیشن کلاس رو معرفی می کنیم.اونجا خودش   android:name="packagename.app.AppController وجود داره.اگه تغییرش بدم به android:name="packagename.MyApplication برنامه حین اجرا فورس کلوز میشه.اگرم همین بمونه برنامه اجرا میشه ولی نوتیفیکیشن که میزنی مینویسه has stoped و پوشی نمیاد.
در ضمن از Lib هایی که شما معرفی کردید و آپلود کرده بودید استفاده کردم.از جدیدترین ها هم استفاده کردم باز اینطور بود.
ممنون میشم راهنمایی بفرمایید.

----------


## psycho7

واقعا دارم کلافه میشم دیگه! :(
هر روشی رو امتحان میکنم نمیشه!
*Nevercom*  	 عزیز من فیلم و سورس کد شما رو دانلود کردم ولی وقتی سورستونو import میکنم به اکشن بار گیر میده و توی لاگ کت اینو مینویسه :
[2015-03-21 18:05:17 - ParsePushTest] Unable to resolve target 'android-20'
که فک میکنم بخاطر نسخه SDK باشه یعنی روی اندروید پایین تر جواب نمیده؟
آموزش های دیگه هم دنبال کردم و به این نتیجه رسیدم اگه توی کدم این خط PushService.setDefaultPushCallback(this, Splash.class); نباشه اصلا نوتیفیکیشن دریافت نمیشه و اگه این خط باشه هرکاری بکنم حتی uri بفرستم و خلاصه خودمو بکشم بازم همین اکتیویتی که بهش میدم باز میشه و به آدرس اینترنتی که میدم نمیره!

----------


## psycho7

میخوام سیستم یجوری باشه که این قابلیتو داشته باشه بعضی وقتا نوتیفی بفرستم که با کلیک روش صفحه اینترنتی باز بشه و بعضی وقتا نوتیفی بفرستم که با کلیک روشاکتیویتی از برنامه باز بشه!
راستی شنیدم parse محدودیت نوتیف داره و ماهیانه 1 میلیون بیشتر نمیشه فرستاد یا یه همچین چیزی!
روش دیگه ای نیست که محدودیت نداشته باشه؟

----------


## mz6488

سلام.منی میخوام وقتی رو پیغام اومد بعد تاچ کردن بیاد به اکتیویتی صفحه اصلی.تو حالت عادی که وقتی تاچ میکنم خطا میده.اومدم از کدهای زیر استفاده کردم.از یه طرف خوب کار میکنه ولی از طرف دیگه اگه برنامه از قبل باز باشه اون اکتیویتی قبلی تو حالت باز قرار میگیره و میشه دو تا اکتیویتی فعال.چجوری میتونم این مشکل رو حل کنم؟اگه دستوری باشه که بره تو اکتیوینی فعال بار هم خوبه

public class myBroad extends ParsePushBroadcastReceiver{


	@Override
	protected void onPushOpen(Context context, Intent intent) {
		
		 Intent i = new Intent(context, ActivityMain.class);
	        i.putExtras(intent.getExtras());
	        i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
		
	        context.startActivity(i);
	}


	


}

----------


## travianplus.org

سلام دوستان
من از این سایت آموزش رو دیدم http://iact.ir/%D8%A7%D8%B3%D8%AA%D9...-notification/
ولی برنامه همش کرش میشه به خاطر کلاس اپلیکشین اون دوخطی که توش گذاشتم اون دو خط رو کامنت کنم دیگه کرش نمیشه برنامه, لطفا راهنمایی فرمایید


Parse.initialize(this, "PJ7VclWhrrwhQLGX0W4PraJrNwJcugByiw717DJY", "lByuMpHlpJq3CQ96oDzdZYEDSN6H4wAnaMc9KhEQ");
    PushService.setDefaultPushCallback(this, splash.class);
    ParseInstallation.getCurrentInstallation().saveInB  ackground();


کتابخانه پارسه هم که دارم استفاده میکنم 1.9.1 هستش

----------


## gjmkdyttyhujk

سلام. 
من هم از آموزش های سایت iact.ir استفاد کردم ولی وقتی می خوام برنامه رو اجرا کنم. همون اول کار کرش میکنه و تو لوگ کت هم خطای noclassdef.com.parse.Parse رو میاره. نمی دونم چجوری این مشکل رو حل کنم. دوستان اگه یه نمونه مثالی دارند که لایبرری و کدها همه نوشته شده و فقط باید کلیدها رو عوض کنیم لطف کنند در اختیار ما قرار بدند. خیلی ممنون. البته تو اکلیپس باشه خیلی خوبه.

----------


## lind73

> سلام دوستان
> من از این سایت آموزش رو دیدم http://iact.ir/%D8%A7%D8%B3%D8%AA%D9...-notification/
> ولی برنامه همش کرش میشه به خاطر کلاس اپلیکشین اون دوخطی که توش گذاشتم اون دو خط رو کامنت کنم دیگه کرش نمیشه برنامه, لطفا راهنمایی فرمایید
> 
> 
> Parse.initialize(this, "PJ7VclWhrrwhQLGX0W4PraJrNwJcugByiw717DJY", "lByuMpHlpJq3CQ96oDzdZYEDSN6H4wAnaMc9KhEQ");
>     PushService.setDefaultPushCallback(this, splash.class);
>     ParseInstallation.getCurrentInstallation().saveInB  ackground();
> 
> ...



شما این کد خط رو در کدوم اکتیویتی قرار میدید باید اسم اون اکتیویتی رو به جای splash.class قرار بدی




Parse.initialize(this, "PJ7VclWhrrwhQLGX0W4PraJrNwJcugByiw717DJY", "lByuMpHlpJq3CQ96oDzdZYEDSN6H4wAnaMc9KhEQ");
    PushService.setDefaultPushCallback(this, YourActivity.class);
    ParseInstallation.getCurrentInstallation().saveInB  ackground();

----------


## hamedjj

وبسایت androidhive آموزش ارسال اعلان از طریق parse با تمام جزئیات در سایت قرار داد:

http://www.androidhive.info/2015/06/...ing-parse-com/

----------

