ارسال پوش نوتیفیکیشن توسط سرویس ایرانی پوشه
در مبحث قبل با قابلیت ارسال پوش نوتیفیکیشن در اندروید آشنا شدیم. در این قسمت از سری مباحث آموزش برنامه نویسی اندروید به نحوه ارسال پوش نوتیفیکیشن توسط سرویس ایرانی پوشه (Pushe) و همچنین معرفی امکانات این سرویس از جمله ارسال اعلان بر اساس موقعیت مکانی، نوع اتصال کاربر، زمان ارسال و… پرداخته میشود.
معرفی سرویس ایرانی پوشه
به نام خدا. پوشه یکی از سرویسهای مطرح داخلی جهت ارسال پوش نوتیفیکیشن در پلتفرمهای Android، iOS و Web است (البته نسخه iOS هنوز راه اندازی نشده). این سرویس قابلیتهای متعددی را در اختیار توسعه دهنده و مدیران اپلیکیشن یا وب سایتها قرار میدهد که با مراجعه به صفحه اصلی وب سایت آن به نشانی Pushe.co میتوانید توضیحات کامل را مطالعه بفرمایید.
قابلیتهای کلیدی سرویس را در تصویر زیر مشاهده میکنید:
تقریبا تمامی امکانات اولیه مورد نیاز در پلن رایگان پوشه در دسترس است و بجز موارد خاص، نیازی به پرداخت هزینهای نخواهیم داشت.
در ادامه مبحث و در قالب یک پروژه آزمایشی، ابتدا سرویس Pushe را روی یک اپلیکیشن پیاده سازی و رجیستر کرده و سپس با نحوه ارسال پوش نوتیفیکیشن و امکانات جانبی آن آشنا میشویم.
ارسال پوش نوتیفیکیشن توسط پوشه
برای استفاده از سرویس ابتدا باید ثبت نام کنیم. بعد از ثبت نام پنل کاربری در اختیار ما قرار میگیرد:
گزینه اندروید به صورت پیش فرض انتخاب شده. روی دکمهی “اپلیکیشن جدید” کلیک میکنم:
در مرحله نخست نام اپلیکیشن، نام بسته (Package name) و ابزار مورد استفاده را باید ثبت کنم. نام اپلیکیشن صرفا برای ثبت در پنل کاربری است و لزوما نباید حتما با نام حقیقی اپلیکیشن یکسان باشد. اما مورد دوم یعنی نام پکیج باید عینا همان چیزی باشد که در هنگام ساخت پروژه جدید در اندروید استودیو تعیین میکنیم.
من یک پروژه با نام Pushe و نام بسته ir.android_studio.pushe ساختهام که فقط یک Empty Activity دارد. فقط امیدوارم در حین مطالعه آموزش، نام پروژه را با کلاس مربوط به کتابخانه Pushe اشتباه نگیرید. بهتر بود نام دیگری برای پروژه انتخاب میکردم اما در اواسط تهیه آموزش این نکته به ذهنم رسید و فرصت اصلاح هم نبود. بنده را خواهید بخشید.
پروژه در محیط اندروید استودیو ساخته شده بنابراین گزینه ابزار مورد استفاده، همین آیتم را انتخاب میکنم. با کلیک روی دکمه ایجاد اپلیکیشن، اپلیکیشن ثبت شده و مراحل رجیستر آغاز میشود. در مرحله دوم از ما خواسته تا کتابخانه پوشه را به پروژه اضافه کنیم:
توصیه میکنم قبل از طی مراحل، راهنمای مربوط به اندروید استودیو پوشه را مطالعه کنید (این لینک). برای مثال در این داکیومنت تاکید شده در build.gradle پروژه حتما هردو مخزن ()google و ()jcenter تعریف شده باشند.
پس از اطمینان از مورد فوق، کتابخانه پوشه را به build.gradle (Module:app) اضافه کرده، سینک میکنم:
dependencies { implementation fileTree(dir: 'libs', include: ['*.jar']) implementation 'androidx.appcompat:appcompat:1.0.2' implementation 'co.ronash.android:pushe-base:1.6.3' }
اگر در دریافت کتابخانه و سینک شدن پروژه مشکل دارید، آموزش تغییر آی پی جهت دور زدن تحریم را مطالعه بفرمائید.
پس از sync شدن پروژه، در پنل پوشه روی دکمه “بعدی” کلیک میکنم:
در این قسمت دو تگ معرفی شده که میبایست در AndroidManifest.xml اضافه شود. با تعریف این تگها، هنگام نصب اپ توسط کاربر، مجوز دسترسی به موقعیت مکانی گرفته میشود. همانطور که در انتهای کادر بیان شده، این دسترسی الزامی نیست و تنها در صورتی باید به مانیفست اضافه شود که بخواهیم از امکانات موقعیت محور پوشه (ارسال پوش نوتیفیکیشن بر اساس موقعیت جغرافیایی و همچنین مشاهده موقعیت جغرافیایی کاربران) استفاده کنیم. تگها به اینصورت به مانیفست اضافه شد:
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="ir.android_studio.pushe"> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/> <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/AppTheme"> <meta-data android:name="co.ronash.pushe.token" android:value="PUSHE_354401661489"/> <activity android:name=".MainActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest>
در مرحله بعد باید متد Pushe.initialize در onCreate اکتیویتی تعریف شود:
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Pushe.initialize(this, true); }
در مرحله بعد که آخرین مرحله است، از ما خواسته شده تا پروژه را اجرا کرده و روی دکمه “بررسی و دریافت نصب” کلیک کنیم تا نصب پوشه بر روی اپلیکیشن بررسی و تایید گردد.
به نکات فوق دقت کنید. اتصال به اینترنت و همچنین نصب بودن Google Play Services روی دیوایس ضروری است. پروژه را روی شبیه ساز (امولاتور) اندروید اجرا میکنم. پس از اجرای کامل پروژه در قسمت Logcat اندروید استودیو پیغامهای مربوط به سرویس Pushe را بررسی میکنم:
ملاحظه میکنید به دلیل نصب نبودن (یا بروز نبودن) Google play services روی دیوایس مجازی من، نصب پوشه انجام نشد.
در شبیه ساز Genymotion با نصب Open GAPPS گوگل پلی سرویس روی دیوایس فعال میشود. روی دکمه Open GAPPS کلیک کرده و قوانین را Accept میکنم تا عملیات دانلود و نصب آغاز شود:
در صورتی که نصب با موفقیت صورت پذیرد، یک تیک سبز رنگ در کنار آیکون آن قرار میگیرد:
در صورتی که اعلانی مشابه تصویر زیر دریافت کردید روی FINISH SETUP کلیک کنید تا مراحل لازم طی شود. برای سادگی کار در تمامی مراحل Skip را انتخاب کنید.
مجدد پروژه را اجرا کرده و سپس روی دکمه “بررسی و دریافت نصب” پنل پوشه کلیک میکنم:
دیوایسی که پروژه روی آن اجرا شده به درستی شناسایی شد. به این ترتیب این اپلیکیشن با پکیج نیم ir.android_studio.pushe برای سرویس پوشه شناسایی و تایید شده و حالا میتوانم برای آن پوش نوتیفیکیشن ارسال کنم.
با کلیک روی دکمه “بستن” از ویزارد خارج شده و برای ارسال پوش نوتیفیکیشن، گزینه “ارسال اعلان” را انتخاب میکنم.
در مرحله اول آیتمهای اصلی اعلان را تنظیم میکنیم. نوع اعلان را همان نمایش اعلان انتخاب میکنم. در قسمت بعد اپلیکیشنی را انتخاب کردهام که باید اعلان را دریافت کند. قسمت محتوای اعلان را نیز طبق میل و سلیقه خودمان تکمیل میکنیم. فعلا همین اعلان ساده را آزمایش میکنم. هردو گزینه “ارسال آزمایشی” و “ارسال نهایی” اعلان را به دیوایس(های) هدف ارسال میکنند. اما به جهت سادگی در اعمال تغییرات در مراحل بعد، ارسال آزمایشی را انتخاب میکنم تا ویزارد بسته نشود. با کلیک روی این دکمه، پنجرهای با عنوان “لیست دستگاههای مورد علاقهی شما” باز شده که دیوایس من را نشان میدهد. در واقع این همان دیوایسی است که در پروسه فعال شدن اعلان پوشه از آن استفاده کردم و سیستم پوشه به صورت پیش فرض آن را جزء دیوایسهای مورد علاقه من انتخاب کرده بود.
با انتخاب دیوایس، اعلان ارسال میگردد. پس از مدت زمان کوتاهی پوش نوتیفیکیشن روی دیوایس مجازی من دریافت میشود:
با لمس اعلان، صفحه اصلی برنامه باز میشود. این وظیفهای است که به طور پیش فرض در تنظیمات اعلان در پوشه تعیین شده. اما عملکردهای دیگری هم میتوان برای اعلان تعریف کرد:
عملکردهایی شامل باز کردن لینک، صفحه یک اپ در مارکت(گوگل پلی، بازار، مایکت و ایران اپس)، باز کردن دیالوگ، استفاده از intent ها، باز کردن صفحه پیامک و تعیین یک متن پیش فرض، باز کردن شماره گیر و تعریف یک شماره تماس، باز کردن یک WebView، نمایش یک اکتیویتی خاص در اپلیکیشن اندروید، دعوت به کانال تلگرامی، باز کردن ایمیل و بستن اعلان.
به عنوان مثال با انتخاب گزینه “باز کردن لینک”، میتوانم لینک ثبت نام تور کویرنوردی در وب سایتم را وارد کنم که کاربر با لمس نوتیفیکیشن، به این لینک هدایت خواهد شد. سایر آیتمها هرکدام کاربرد خاص خود را دارد که حتما با اکثر موارد آشنا هستید و تجربه آن را در اپهای موجود روی دیوایس خود داشتهاید.
همچنین امکان تعریف دکمه (Action) تا نهایتا ۳ مورد وجود دارد:
با اعمال هر تغییر روی اعلان، پیش نمایش آن فورا بروز میشود و قبل از ارسال، شکل کلی اعلان را مشاهده میکنیم. هرچند جزئیات ممکن است در نسخههای مختلف اندروید تفاوتهایی داشته باشند که در مبحث آموزش ساخت نوتیفیکیشن در اندروید به تعدادی از آنها اشاره کردم.
برای دیدن سایر تنظیمات اعلان روی دکمه “بعدی” کلیک میکنم:
در این مرحله محتوای مربوط به نوتیفیکیشن در حالت باز شده (Expanded) را میتوان تعیین کرد. علاوه بر آن، آیتمهای متن نوار اعلان، خلاصه متن و همچنین آیکون اعلان نیز قابل تغییر هستند.
یک ارسال آزمایشی جدید انجام میدهم:
قابلیتهای فیلتر و تاپیک
در مرحله بعد دو قابلیت با عناوین “فیلتر” و “تاپیک” گنجانده شده است.
فیلتر: توسط پارامترهای متعدد میتوانیم فیلترهایی اعمال کنیم تا اعلان فقط برای گروه خاصی از کاربران ارسال گردد:
این فیلترها شامل موقعیت مکانی (انتخاب یک یا چند استان)، اپراتور (موبایل)، نوع اتصال کاربر به اینترنت (اینترنت ثابت یا موبایل)، برند گوشی، نسخه اپلیکیشن نصب شده روی دیوایس و ارسال به یک کانال خاص را شامل میشوند.
به عنوان مثال اگر بخواهم اعلان مربوط به تور کویرنوردی را عمدتا کاربران استانهای خراسان و همچنین استانهای مجاور مانند یزد و سمنان دریافت کنند، با انتخاب این استانها، تا حدود زیادی به این هدف دست خواهم یافت.
تاپیک: این قابلیت مشابه عضویت در خبرنامههای ایمیلی است. پوشه قابلیتی را در اختیار ما قرار داده تا کاربران بتوانند در موضوعات متفاوتی عضو شده و صرفا پوشهای مرتبط با همان موضوع را دریافت کنند. به عنوان مثال من دکمهای به اکتیویتی اضافه میکنم که با کلیک روی آن، این دیوایس در موضوعی با نام desert (به معنی کویر) رجیستر شود. از این پس هرگاه در پنل پوشه، پوش نوتیفیکیشنی در تاپیک desert ارسال گردد، صرفا این دیوایس و سایر دیوایسهایی که در این موضوع ثبت نام کردهاند، پوشها را دریافت میکنند.
مزیت این قابلیت در این است که میتوان اعلانهای تخصصی را صرفا برای افرادی ارسال کرد که مایل به دریافت آن هستند. در نتیجه هم تعامل افراد با اپ بیشتر شده و هم با اعلانهای پراکنده و غیر ضروری برای کاربران مزاحمت ایجاد نمیشود. اگر شخصی در تاپیک “اخبار ورزشی” عضو شده باشد، شاید با دریافت روزانه ۵ پوش ورزشی هم مشکلی نداشته و حتی استقبال کند. اما قطعا برای من که هیچ میانهای با مسابقات ورزشی و اخبار آن ندارم، حتی دریافت یک اعلان در هفته میتواند آزاردهنده باشد.
یک Button به اکتیویتی اضافه نموده و توسط متد subscribe کلاس Pushe، نام تاپیک(ها) را تعیین میکنم:
MainActivity.java:
package ir.android_studio.pushe; import androidx.appcompat.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.Button; import co.ronash.pushe.Pushe; public class MainActivity extends AppCompatActivity { Button newsButton; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Pushe.initialize(this, true); newsButton = findViewById(R.id.btn_newsletter); newsButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Pushe.subscribe(getApplicationContext(), "desert"); } }); } }
این متد دو ورودی میگیرد. اولی context برنامه و دومی نام تاپیک که در اینجا من desert وارد کردم. پروژه را اجرا کرده و روی دکمه کلیک میکنم:
بعد از کلیک روی دکمه، لاگ کت اندروید استودیو را بررسی میکنم:
اپ با موفقیت در تاپیک desert عضو شد. حالا نام این تاپیک در پنل پوشه نمایش داده میشود که میتوانیم اعلان را فقط برای اعضای این تاپیک ارسال کنیم:
پس تاپیکها در خود برنامه باید تعریف شوند نه پنل پوشه. بعد از اولین عضویت در یک تاپیک، نام آن در پنل ما قابل نمایش خواهد بود.
فقط دیوایسی میتواند در تاپیکها عضو شود که قبلا روی سرویس پوشه رجیستر شده باشد. بنابراین بهتر است کد مربوط به عضویت در تاپیک، درون این شرط قرار گیرد. به این ترتیب درخواست عضویت از جانب دیوایسی که به هر دلیلی هنوز روی پوشه شناسایی نشده، ارسال نمیگردد. اینکار توسط متد isPusheInitialized کلاس Pushe صورت میگیرد:
newsButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { if (Pushe.isPusheInitialized(getApplicationContext())) { Pushe.subscribe(getApplicationContext(), "desert"); } } });
همچنین توسط متد Pushe.unsubscribe کاربر میتواند لغو عضویت در تاپیک را درخواست کند:
Pushe.unsubscribe(getApplicationContext(), "desert");
غیرفعال کردن و فعال کردن دریافت پوش نوتیفیکیشن پوشه
با استفاده از متد Pushe.setNotificationOff دریافت پوش نوتیفیکیشن غیر فعال میشود. یک دکمه دیگر با عنوان “عدم دریافت اعلانات” به اکتیویتی اضافه میکنم:
disableBtn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Pushe.setNotificationOff(getApplicationContext()); } });
همچنین کاربری که قبلا دریافت پوش را غیر فعال کرده مجدد توسط متد Pushe.setNotificationOn میتواند دریافت اعلانها را فعال نماید.
در مرحله آخر، سایر تنظیمات قرار داده شده:
تنظیماتی شامل زمان ارسال اعلان، کلید جایگزینی، زمان نمایش اعلان، زمان زنده ماندن اعلان و تنظیمات مربوط به نمایش آن.
در قسمت زمان بندی میتوانیم تعیین کنیم اعلان دقیقا در چه روز و چه ساعتی ارسال گردد.
بهترین توضیح برای قابلیت کلید جایگزینی، توضیحات خود پوشه است:
“پیامهایی که تا به حال با این کلید ارسال شده باشند، در صورتی که کاربر آنها را ندیده باشد، با این پیام جدید شما جایگزین خواهند شد. با استفاده از این کلید میتوانید جلوی ارسال چندبارهی پیامهای مشابه به کاربرانتان را بگیرید.”
در قسمت زمان نمایش اعلان تعیین میکنیم اعلان به محض دریافت روی دیوایس ظاهر شود یا به زمانی که کاربر برنامه را باز میکند موکول گردد.
تنظیمات مربوط به نمایش Push Notification واضح بوده و نیاز به توضیحی ندارد.
توجه : سورس پروژه درون پوشه Exercises قرار دارد
تعداد صفحات : ۲۴
حجم : ۲ مگابایت
قیمت : رایگان
دانلود رایگان با حجم ۲ مگابایت لینک کمکی
سلام
من با ریاکت جی اس و pwa سایتم رو پیاده سازی کردم
اگ لطف کنید این رو با ریاکت جی اس هم توضیح بدید ممنون میشم
با تشکر
تو سایت پوشه مستنداتش رو بررسی کردید؟
با سلام و خسته نباشید…
استاد عزیز امکان داره توضیح بفرمائید که چطور میشه در یک اپلیکیشن به کاربر اجازه داد که تنها ویدئو را ببیند و نتواند آن را دانلود و ذخیره نماید. و اینکه در دفعات بعد نیز بدون اتصال به اینترنت آن را مشاهده نماید، اپلیکیشنی مانند اپلیکیشن هوش مالی. میشه لطفا بفرمائید که از چه نوع تکنولوژی باید استفاده کرد. با تشکر
وقتی میشه رایگان این کار رو کرد (با استفاده از سرویس های دیگه)واقعا چرا باید به اینا پول بدیم؟!!!!!!!!!!!!!!!!!!!!!!!!!!!
سلام مهندس
من از سرویس گوگل مپ استفاده میکنم و موقع گرفتن ران از برنامه تداخل ایجاد میکنه با سرویس پوشه،اینجا باید چیکار کنم ؟ تو اینترنت جستجو کردم نتیجه ای نبود
اطلاعی ندارم بزرگوار. از پشتیبان پوشه کمک بگیرید. نتیجه رو هم اینجا قرار بدید بقیه استفاده کنن
ممنون
سلام
لطفا در مورد FCM sender id و FCM server key
توضیح بدین ؟
برای ساخت پروژه در سایت پوشه
سلام و عرض و ادب
خیلی ممنونم بابت آموزش کامل پوش نوتیفیکیشن
موفق باشید
عالی مثه همیشه. تشکر از جناب مطهری عزیز
خواهش بزرگوار
سلام، عالی به تمام معنا
با سلام و تشکر بابت آموزش … میخواستم بدونم اگر بخواهیم تو برنامه جیسون بگیریم با پوشه چه جوری باید ازش استفاده کنیم ؟ خوب طبق آموزشا باید یک کلاس MyPushListener ساخته بشه و بقیه موارد..جالا سوال اینه اگر تو یه روز چند تا نوتیفیکیشن بفرستیم چکار باید بکنیم؟ یعنی اگر کاربر پیام قبلی رو باز نکرده باشه پیام جدید برسه هر دوش محتویات جیسونش یکی میشه (میشه دومی)
والا من سرویس جیسونش رو تست نکردم و اطلاعی ندارم. میتونید تیکت بزنید و از خودشون بپرسید
سلام مهندس
ببخشید اینجا سوالم رو عنوان میکنم چون نتونشتم جای مرتبطش رو پیدا کنم
من میخوام از دیپندنسی
compile ‘com.google.android.gms:play-services-ads-identifier:11.0.0’
استفاده کنم
services-ads-identifier
داخل ریپوزیتوری نیست
خود اندروید دانلودش نمیکنه
نمیدونم از کجا میتونم دانلودش کنم
خیلی ممنون میشم راهنماییم کنید
صفحه پرسش های رایج، قسمت تغییر آی پی رو مطالعه بفرمایید.
ممنون خیلی عالیه واقعا
نمیدونم چرا این سایت یدونه تبلیغ هم نداره
با سلام آموزش نوتیفیکیشن با پوشه بسیار عالی بود . موفق باشین.