ارسال پوش نوتیفیکیشن توسط سرویس ایرانی پوشه

در مبحث قبل با قابلیت ارسال پوش نوتیفیکیشن در اندروید آشنا شدیم. در این قسمت از سری مباحث آموزش برنامه نویسی اندروید به نحوه ارسال پوش نوتیفیکیشن توسط سرویس ایرانی پوشه (Pushe) و همچنین معرفی امکانات این سرویس از جمله ارسال اعلان بر اساس موقعیت مکانی، نوع اتصال کاربر، زمان ارسال و… پرداخته می‌شود.

معرفی سرویس ایرانی پوشه

سرویس ارسال پوش نوتیفیکیشن پوشه Pushe

به نام خدا. پوشه یکی از سرویس‌های مطرح داخلی جهت ارسال پوش نوتیفیکیشن در پلتفرم‌های Android، iOS و Web است (البته نسخه iOS هنوز راه اندازی نشده). این سرویس قابلیت‌های متعددی را در اختیار توسعه دهنده و مدیران اپلیکیشن یا وب سایت‌ها قرار می‌دهد که با مراجعه به صفحه اصلی وب سایت آن به نشانی Pushe.co می‌توانید توضیحات کامل را مطالعه بفرمایید.
قابلیت‌های کلیدی سرویس را در تصویر زیر مشاهده می‌کنید:

امکانات پوش نوتیفیکیشن پوشه

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

ارسال پوش نوتیفیکیشن توسط پوشه

برای استفاده از سرویس ابتدا باید ثبت نام کنیم. بعد از ثبت نام پنل کاربری در اختیار ما قرار می‌گیرد:

حساب کاربری پوشه

گزینه اندروید به صورت پیش فرض انتخاب شده. روی دکمه‌ی “اپلیکیشن جدید” کلیک می‌کنم:

نام اپلیکیشن و package name اپلیکیشن

در مرحله نخست نام اپلیکیشن، نام بسته (Package name) و ابزار مورد استفاده را باید ثبت کنم. نام اپلیکیشن صرفا برای ثبت در پنل کاربری است و لزوما نباید حتما با نام حقیقی اپلیکیشن یکسان باشد. اما مورد دوم یعنی نام پکیج باید عینا همان چیزی باشد که در هنگام ساخت پروژه جدید در اندروید استودیو تعیین می‌کنیم.
من یک پروژه با نام Pushe و نام بسته ir.android_studio.pushe ساخته‌ام که فقط یک Empty Activity دارد. فقط امیدوارم در حین مطالعه آموزش، نام پروژه را با کلاس مربوط به کتابخانه Pushe اشتباه نگیرید. بهتر بود نام دیگری برای پروژه انتخاب می‌کردم اما در اواسط تهیه آموزش این نکته به ذهنم رسید و فرصت اصلاح هم نبود. بنده را خواهید بخشید.
پروژه در محیط اندروید استودیو ساخته شده بنابراین گزینه ابزار مورد استفاده، همین آیتم را انتخاب می‌کنم. با کلیک روی دکمه ایجاد اپلیکیشن، اپلیکیشن ثبت شده و مراحل رجیستر آغاز می‌شود. در مرحله دوم از ما خواسته تا کتابخانه پوشه را به پروژه اضافه کنیم:

افزودن کتابخانه پوشه به build.gradle اندروید استودیو

توصیه می‌کنم قبل از طی مراحل، راهنمای مربوط به اندروید استودیو پوشه را مطالعه کنید (این لینک). برای مثال در این داکیومنت تاکید شده در 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 شدن پروژه، در پنل پوشه روی دکمه “بعدی” کلیک می‌کنم:

مجوز دسترسی موقعیت جغرافیایی در پوش نوتیفیکیشن Pushe

در این قسمت دو تگ معرفی شده که می‌بایست در 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 اکتیویتی تعریف شود:

متد Pushe.initialize سرویس ایرانی پوشه

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    Pushe.initialize(this, true);

}

در مرحله بعد که آخرین مرحله است، از ما خواسته شده تا پروژه را اجرا کرده و روی دکمه “بررسی و دریافت نصب” کلیک کنیم تا نصب پوشه بر روی اپلیکیشن بررسی و تایید گردد.

بررسی نصب پوشه روی اپلیکیشن اندروید

به نکات فوق دقت کنید. اتصال به اینترنت و همچنین نصب بودن Google Play Services روی دیوایس ضروری است. پروژه را روی شبیه ساز (امولاتور) اندروید اجرا می‌کنم. پس از اجرای کامل پروژه در قسمت Logcat اندروید استودیو پیغام‌های مربوط به سرویس Pushe را بررسی می‌کنم:

اچرای پروژه اندروید روی شبیه ساز Genymotion

ملاحظه می‌کنید به دلیل نصب نبودن (یا بروز نبودن) Google play services روی دیوایس مجازی من، نصب پوشه انجام نشد.
در شبیه ساز Genymotion با نصب Open GAPPS گوگل پلی سرویس روی دیوایس فعال می‌شود. روی دکمه Open GAPPS کلیک کرده و قوانین را Accept می‌کنم تا عملیات دانلود و نصب آغاز شود:

آموزش نصب Open GAPPS روی امولاتور Genymotion

در صورتی که نصب با موفقیت صورت پذیرد، یک تیک سبز رنگ در کنار آیکون آن قرار می‌گیرد:

نصب Open GAPPS روی شبیه ساز جنی موشن

در صورتی که اعلانی مشابه تصویر زیر دریافت کردید روی FINISH SETUP کلیک کنید تا مراحل لازم طی شود. برای سادگی کار در تمامی مراحل Skip را انتخاب کنید.

نصب Open GAPPS روی شبیه ساز جنی موشن

مجدد پروژه را اجرا کرده و سپس روی دکمه “بررسی و دریافت نصب” پنل پوشه کلیک می‌کنم:

شناسایی نصب پوشه روی اپلیکیشن اندروید

دیوایسی که پروژه روی آن اجرا شده به درستی شناسایی شد. به این ترتیب این اپلیکیشن با پکیج نیم ir.android_studio.pushe برای سرویس پوشه شناسایی و تایید شده و حالا می‌توانم برای آن پوش نوتیفیکیشن ارسال کنم.

تذکر: اگر از شبیه ساز AVD اندروید استودیو استفاده می‌کنید، باید دیوایسی را انتخاب کنید که در عنوان آن (with Google APIs) قید شده باشد. سایر نسخه‌ها شامل Google Play Services نیستند.

با کلیک روی دکمه “بستن” از ویزارد خارج شده و برای ارسال پوش نوتیفیکیشن، گزینه “ارسال اعلان” را انتخاب می‌کنم.

ارسال پوش نوتیفیکیشن در پوشه

در مرحله اول آیتم‌های اصلی اعلان را تنظیم می‌کنیم. نوع اعلان را همان نمایش اعلان انتخاب می‌کنم. در قسمت بعد اپلیکیشنی را انتخاب کرده‌ام که باید اعلان را دریافت کند. قسمت محتوای اعلان را نیز طبق میل و سلیقه خودمان تکمیل می‌کنیم. فعلا همین اعلان ساده را آزمایش می‌کنم. هردو گزینه “ارسال آزمایشی” و “ارسال نهایی” اعلان را به دیوایس(های) هدف ارسال می‌کنند. اما به جهت سادگی در اعمال تغییرات در مراحل بعد، ارسال آزمایشی را انتخاب می‌کنم تا ویزارد بسته نشود. با کلیک روی این دکمه، پنجره‌ای با عنوان “لیست دستگاه‌های مورد علاقه‌ی شما” باز شده که دیوایس من را نشان می‌دهد. در واقع این همان دیوایسی است که در پروسه فعال شدن اعلان پوشه از آن استفاده کردم و سیستم پوشه به صورت پیش فرض آن را جزء دیوایس‌های مورد علاقه من انتخاب کرده بود.
با انتخاب دیوایس، اعلان ارسال می‌گردد. پس از مدت زمان کوتاهی پوش نوتیفیکیشن روی دیوایس مجازی من دریافت می‌شود:

ارسال Push Notification در پوشه

تذکر: عدم دریافت اعلان دلایل متعددی می‌تواند داشته باشد. ابتدا از برقراری ارتباط اینترنت روی دیوایس مطمئن شوید. برای اطمینان بیشتر روی مرورگر دیوایس یک وبسایت را لود کنید. در دیوایس‌های مجازی ممکن است ارتباط مستمر مانند دیوایس‌های حقیقی پایدار نبوده و نیاز به بستن برنامه و باز کردن مجدد آن باشد. یا حتی بستن و راه اندازی دوباره خود دیوایس.

با لمس اعلان، صفحه اصلی برنامه باز می‌شود. این وظیفه‌ای است که به طور پیش فرض در تنظیمات اعلان در پوشه تعیین شده. اما عملکردهای دیگری هم می‌توان برای اعلان تعریف کرد:

عملکردهای پوش نوتیفیکیشن در پوشه

عملکردهایی شامل باز کردن لینک، صفحه یک اپ در مارکت‌(گوگل پلی، بازار، مایکت و ایران اپس)، باز کردن دیالوگ، استفاده از intent ها، باز کردن صفحه پیامک و تعیین یک متن پیش فرض، باز کردن شماره گیر و تعریف یک شماره تماس، باز کردن یک WebView، نمایش یک اکتیویتی خاص در اپلیکیشن اندروید، دعوت به کانال تلگرامی، باز کردن ایمیل و بستن اعلان.
به عنوان مثال با انتخاب گزینه “باز کردن لینک”، می‌توانم لینک ثبت نام تور کویرنوردی در وب سایتم را وارد کنم که کاربر با لمس نوتیفیکیشن، به این لینک هدایت خواهد شد. سایر آیتم‌ها هرکدام کاربرد خاص خود را دارد که حتما با اکثر موارد آشنا هستید و تجربه آن را در اپ‌های موجود روی دیوایس خود داشته‌اید.
همچنین امکان تعریف دکمه (Action) تا نهایتا ۳ مورد وجود دارد:

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

با اعمال هر تغییر روی اعلان، پیش نمایش آن فورا بروز می‌شود و قبل از ارسال، شکل کلی اعلان را مشاهده می‌کنیم. هرچند جزئیات ممکن است در نسخه‌های مختلف اندروید تفاوت‌هایی داشته باشند که در مبحث آموزش ساخت نوتیفیکیشن در اندروید به تعدادی از آنها اشاره کردم.

پیش نمایش پوشه

برای دیدن سایر تنظیمات اعلان روی دکمه “بعدی” کلیک می‌کنم:

تنظیمات پوش پوشه

در این مرحله محتوای مربوط به نوتیفیکیشن در حالت باز شده (Expanded) را می‌توان تعیین کرد. علاوه بر آن، آیتم‌های متن نوار اعلان، خلاصه متن و همچنین آیکون اعلان نیز قابل تغییر هستند.
یک ارسال آزمایشی جدید انجام می‌دهم:

ارسال پوش نوتیفیکیشن توسط پوشه در حالت باز شده یا 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 وارد کردم. پروژه را اجرا کرده و روی دکمه کلیک می‌کنم:

قابلیت تاپیک در پوش نوتیفیکیشن پوشه

نکته: در نامگذاری تاپیک از کاراکترهای زبان فارسی استفاده نکنید.

بعد از کلیک روی دکمه، لاگ کت اندروید استودیو را بررسی می‌کنم:

بررسی Logcat اندروید استودیو جهت صحت عضویت دیوایس در تاپیک پوشه

اپ با موفقیت در تاپیک 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 می‌تواند دریافت اعلان‌ها را فعال نماید.

در مرحله آخر، سایر تنظیمات قرار داده شده:

تنظیمات ارسال پوش نوتیفیکیشن در سرویس Pushe

تنظیماتی شامل زمان ارسال اعلان، کلید جایگزینی، زمان نمایش اعلان، زمان زنده ماندن اعلان و تنظیمات مربوط به نمایش آن.
در قسمت زمان بندی می‌توانیم تعیین کنیم اعلان دقیقا در چه روز و چه ساعتی ارسال گردد.
بهترین توضیح برای قابلیت کلید جایگزینی، توضیحات خود پوشه است:
“پیام‌هایی که تا به حال با این کلید ارسال شده باشند، در صورتی که کاربر آنها را ندیده باشد، با این پیام جدید شما جایگزین خواهند شد. با استفاده از این کلید می‌توانید جلوی ارسال چندباره‌ی پیام‌های مشابه به کاربرانتان را بگیرید.”
در قسمت زمان نمایش اعلان تعیین می‌کنیم اعلان به محض دریافت روی دیوایس ظاهر شود یا به زمانی که کاربر برنامه را باز می‌کند موکول گردد.
تنظیمات مربوط به نمایش Push Notification واضح بوده و نیاز به توضیحی ندارد.

تذکر: ارسال پوش نوتیفیکیشن با محتوای تکراری و پشت سرهم قطعا تاثیر منفی زیادی بر اعتماد کاربر به اپ شما می‌گذارد. بنابراین قبل از ارسال نهایی حتما محتوا و تنظیمات اعلان را با دقت بررسی کرده و تک تک آیتم‌ها را از نگاه و دید مخاطب (و نه نگاه خودتان) بسنجید. محتوای جذاب، زمان مناسب ارسال، عدم دریافت اعلان‌های غیر ضرور و… همگی مواردی هستند که عدم رعایت آن تاثیر بدی بر برنامه شما خواهد گذاشت. اگر مخاطبین اعلان فعلی، ساکنین تهران هستند، نیازی به درگیر کردن سایر شهرها و استان‌ها نیست.

توجه : سورس پروژه درون پوشه Exercises قرار دارد

دانلود نسخه PDF این آموزش به همراه سورس پروژه
تعداد صفحات : ۲۴
حجم : ۲ مگابایت
قیمت : رایگان
دانلود رایگان با حجم ۲ مگابایت لینک کمکی
این مطلب چقدر برایتان مفید بود؟ لطفا امتیاز دهید
4/5 - (13 امتیاز)
پرسش‌ها و دیدگاه‌های کاربران
دوره آموزش برنامه نویسی اندروید
دوره آموزش برنامه نویسی اندروید

با دریافت این دوره به تمامی آموزش‌های غیر رایگان و رایگان موجود در وب سایت دسترسی دارید که تخفیفی برای آموزش‌های غیر رایگان نیز درنظر گرفته شده. این پکیج به دو صورت دانلودی و ارسال پستی ارائه می‌گردد.
آموزش‌های اندروید استودیو در دو دسته «پایه» و «تکمیلی» منتشر می‌شوند.
آموزش‌های پایه شامل مباحث اصلی و ضروری و آموزش‌های تکمیلی مطالبی است که می‌بایست در کنار مطالب اصلی بررسی شود.
با خرید این دوره، به تمامی آموزش‌های غیر رایگانی که در آینده منتشر می‌شود نیز به صورت رایگان دسترسی خواهید داشت!

یک دیدگاه بنویسید

پرسش‌های زیر تایید و پاسخ داده نـــخواهند شد:
۱: جزء موارد مطرح شده در صفحات مشکلات و پرسش‌های رایج و بروزرسانی‌های محتوای آموزشی باشد
۲: سوال قبلا توسط کاربران در دیدگاه‌ها مطرح و پاسخ داده شده باشد
۳: پرسش خارج از مبحث آموزشی موجود در این صفحه باشد