استارت‌آپ و کارآفرینی

استفاده سریع و آسان از Google Cloud Messaging در Android با OneSignal

Google Cloud Messaging یک سرویس رایگان برای ارسال پیام بین سرور و اپلیکیشن‌ها برای توسعه‌دهندگان است، که شامل پیام‌های downstream از سرور به اپ و پیام‌های upstream از اپ به سرور است. معمولا از این سرویس برای ارسال پیام از سرور به اپ و نمایش نوتیفیکشن در اپ استفاده می‌شود.

 

GCM-archOneSignal یک سرویس مبتنی بر GCM (البته برای اپ‌های اندروید – از این سرویس برای اپ‌های ios,Windows Phone, Amazon, Chrome App نیز می‌توان استفاده کرد) برای ارسال نوتیفیکیشن به اپ است که علاوه بر امکاناتی بیشتر که نسبت به سرویس GCM دارد کار با آن بسیار ساده و آسان است.

سرویس‌های دیگری نیز برای ارسال نوتیفیکیشن به اپ وجود دارد مانند Parse Push و Pushover و البته خود GCM که می‌توان از آنها استفاده کرد، ولی بخاطر API خوب سرویس OneSignal و آسان بودن استفاده، این سرویس رو بهتون پیشنهاد میدم.

برای استفاده از این سرویس ابتدا باید برای اپ خود از GCM یک key دریافت کنید که در این لینک به صورت کامل روند دریافت توضیح داده شده.

سپس در فایل (build.gradle (Module: app خود این دو خط را اضافه کنید:

dependencies {
 compile 'com.onesignal:OneSignal:1.8.1+@aar'
 compile 'com.google.android.gms:play-services:7.3.0'
 }

همچنین در همین فایل کد زیر را در android>defaultConfig اضافه کنید:

android {
 defaultConfig {
 manifestPlaceholders = [manifestApplicationId:"${applicationId}"]
 }
 }

حواس‌تون باشه که کدهای بالا رو به بلوک‌ها اضافه کنید، کامل جایگزین نکنید!!!

خب حالا برای کانفیگ و استفاده از OneSignal کافیه ابتدا package های زیر رو در launcher Activity اپلیکیشن خود import کنید:

import com.onesignal.OneSignal;
import com.onesignal.OneSignal.NotificationOpenedHandler;

سپس در OnCreate دستورات زیر رو اضافه کنید:

OneSignal.init(this, "<Product ID>", "<API Key>", new NotificationOpenedHandler() {
     @Override
     public void notificationOpened(String s,JSONObject jsonObject, boolean b){
// کد های مربوط به هندل کردن پیام یا ... بعد از کلیک کاربر بر روی نوتیفیکیشن اینجا قرار میگیرد
}});

که در اون Product Id رو گوگل بهتون میده و API key رو از OneSignal در قسمت

My Apps > “your app”> Settings

رو باید دریافت کنید و در کد بالا جایگزین کنید.

و در آخر یادتون نره که حتما کدهای زیر رو در تمام Activity های اپلیکیشن اضافه کنید.

@Overrideprotected
void onPause() {
   super.onPause();
   OneSignal.onPaused();
}
@Overrideprotected
void onResume() {
   super.onResume();
   OneSignal.onResumed();
}

حالا به راحتی میتونید از پنلی که OneSignal در اختیارتون قرار میده استفاده کنید و به اپلیکیشن(ها) پیام ارسال کنید. البته OneSignal یک API هم برای این کار در اختیار توسعه‌دهنده‌ها قرار داده که بتونید از طریق اپلیکیشن ثالث پیام و نوتیفیکیشن ارسال کنید.

لینک API OneSignal

اینم لینک یه API کامل با PHP واسه OneSignal از git

16 نظرات
  1. علی می گوید

    مطلب خیلی خوبی بود.

    1. صمصام بابادی می گوید

      😉 قابلی نداشت

  2. طه می گوید

    سلام
    ممنون از این که اطلاعاتتون رو به اشتراک میزارید .

    چند نکته کوتاه 🙂

    من از gcm در اپ اندرویدی خودم استفاده کردم خوب جواب میده و زمان تاخیرش بد نیست البته خیلی خوب هم نیست.

    > استفاده از GCM مستلزم وجود Google Play Services در دستگاه اندرویدی می باشد
    ابتدا باید بررسی شود که ایا Google Play Services نصب شده است یا نه
    در صورت نصب نبودن باید با نمایش یک dialog این موضوع را به کاربر اطلاع داده و وی را به صفحه ی دانلود Google Play Services اجاع دهیم . (اشکال اول در استفاده از GCM )
    البته اکثر دستگاه های اندرویدی از ابتدا Google Play Services را به صورت نصب شده دارند.

    > در صورتی که تعداد کاربران شما از تعداد معینی بیشتر شود باید باید مبلغی به گوگل پرداخت کنید .البته مبلغ اندک هست و قطعا زمانی که شما به این تعداد کاربر برسید مشکلی در پرداخت نخواهید داشت . (اشکال دوم) – البته اطلاعات من در این مورد مربوط به چندین ماه پیش هست باید مجدد بررسی شود

    > مسله ی دیگر داشتن حساب کاربری گوگل هست که برای استفاده از GCM باید حداقل یکبار در دستگاه اندرویدی فعال شده باشد (اشکال سوم)

    > شرکت (سفارش دهنده ی این اپ) به شرکت دوم دیگری (گوگل) از نظر کاری و کسب درامد وابسته میشه که خیلی از شرکت ها که برنامه بلند مدت کاری و پروژه ی اینده داری دارند استفاده از GCM رو نمی پسندند. (اشکال چهارم)

    > به همه ی اینها تحریم ها و فیلترینگ رو هم اضافه کنید. هم از طرف گوگل هم از طرف ایران . البته کاغذ پاره ایی بیش نیستند D;

    موارد بالا در مجموع باعث نارضایتی کاربران (ایرانی) و سفارشدهندگان از اپ اندرویدی می شود که باید قبل از استفاده در پروژه ی واقعی حتما مورد بررسی قرار بگیرند.

    راه حل :

    + استفاده از روش OneSignal آسانتر از استفاده GCM به تنهایی می باشد اما در پروژه های مهم بنا به دلایل بالا هیچ کدام توصیه نمی شود

    + استفاده از Parse Push و Pushover هم بعد از یک مدت زمان TRIAL نیاز به پرداخت مالی دارد.
    https://pushover.net/faq#overview-fees
    https://parse.com/plans

    + پیشنهاد من برای اپ هایی که نیازمند Instance Message هستند MQTT هست . البته باید به عنوان یه پروژه ی تحقیقاتی عملیاتی بهش نگاه کرد.

    کلاینت MQTT Library و سرور به صورت تست از mosqitue استفاده شود
    برای mosqitue ترجیحا سرور linux استفاده شود.(نصب و استفاده بسیارساده است)

    MQTT تمام متد های مربوط به دریافت پیام در لحظه (Instance Message) رو پیشبینی کرده(کد به صورت آماده وجود داره) و من تونستم با استفاده از اون پیام در لحظه به شکل مناسبی به صورت نوتیفیکیشن دریافت کنم. ارسال پیام از سرور به دستگاه اندرویدی و از دستگاه اندرویدی به دیگر دستگاه های اندرویدی.
    ارتباط چند دستگاه اندرویدی برای دریافت پیام از دستگاه اندرویدی دیگر به شکل خوبی انجام شد حتی ترتیب ارسال پیام ها هم رعایت شده . و نیز گروه بندی اعضا و ثبت نام و ….

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

    ———————-
    خوشحالم می کنید که اگر نقد یا پیشنهادی به متن من وارده بفرمایید
    درود بر صمصمام عزیز

    1. صمصام بابادی می گوید

      درود بر شما دوست عزیز
      خیلی ممنون ، امیدوارم این مطالب بدرد دوستان بخوره
      قبل از هرچیزی بگم که من روی استفاده از GCM یا OneSingnal یا … تعصب ندارم و البته همون طور که میدونید برای حل مسئله توی حرفه ما راه های زیادی وجود داره که با توجه به شرایط ما روش حل مسئله رو انتخاب میکنیم.
      در رابطه با این نکته هایی که فرمودید بنده هم موافقم البته کمی اختلاف نظر شخصی دارم و یه سری نکته باید اضافه کنم
      ۱- قبول دارم که این یک مشکل هست ولی کاربرانی که google play service ندارند خیلی کم هستند و بازم بستگی به اپلیکیشنتون داره که استفاده بکنید یا خیر.
      ۲- اگر از خود GCM استفاده میکنید که باید مبلغی پرداخت کنید ولی اگر از OneSignal استفاده میکنید خیر ، چون این امکان رو بهتون میده که به تعداد نامحدود کاربر تعداد نامحدودی پیام بفرستید ، بعلاوه کلی امکانات خوب دیگه.
      ۳- خدایییش این دیگه مشکل نیست :دی آخه داشتن یه حساب گوگل واسه دولوپر کار سختیه!!!
      ۴- دقیقا منظورتون رو نفهمیدم ولی استفاده کردن از این جور سرویس ها بستگی به اپلیکیشنی داره که دارید توسعه میدید ، باید بررسی کنید که آیا میتونید و آیا ارزش داره از این سرویس استفاده کرد؟!

      درمورد تحریم و فیلترینگ تا جایی که من اطلاع دارم خود google play service هیچ وقت تحریم یا فیلتر نبوده (play store برای مدتی تحریم بود ولی همه اپلیکیشن های google تحریم نبودن و تقریبا صد در صد اپ های گوکل نیاز به google play service دارن)

      OneSignal علاوه بر اینکه خیلی کار رو راحت و آسون کرده و خیلی از مشکلات رو حل کرده (یه جورایی) خیلی امکانات خوبی هم در اختیار دولوپر ها قرار میده ( به نظر من نباید چرخ رو دوباره اختراع کرد )

      درمورد MQTT اطلاعاتی ندارم و البته نظری ، حتما بهش یه نگاه میندازم
      ممنون از شما

      1. طه می گوید

        سلام ممنونم که پاسخ دادید
        در مورد شماره ۳ : منظورم استفاده کننده از اپ بود نه developer
        البته شاید این شرط (داشتن اکانت ) رو گوگل برداشته باشه

        در مورد تحریم ها : گوگل پلی تا چند وقت پیش قابل دسترسی نبود اخیرا باز شده برای کاربران ایرانی . منظورم دانلود google play service سرویس از app store هست در صورت نیاز(مگر این که بشه از جای دیگه هم دانلود کرد )
        شرایط سیاست خارجی کشور ما ریسک بالایی رو برای خیلی از مشاغل از جمله developer ها به دنبال داره و کار ما رو سختتر میکنه
        ما هم مرد روز های سخخخت 🙂
        گرچه اعتقاد دارم google play service به بهترین شکل وظایفش رو انجام میده اما تو کار(های بزرگ) و تو شرایط فعلی ما باید تا اونجا که میشه وابستگی رو کم کنیم تا به اما و اگر ها در اینده دچار نشیم (فقط یک نظر)

        VIBER
        WHATS APP
        TELEGRAM و …
        هیچ کدوم از GCM استفاده نکردن
        اپ FACEBOOK از MQTT استفاده کرده
        WHATS APP احتمالا XMPP استفاده کرده

        لطفا در صورتی که تو اپ هاتون از OneSignal یا GCM به صورت تجاری استفاده کردین نتایجش رو با ما هم به اشتراک بزارین.
        یه سوال اینکه کنجکاوم بدونم اپ های شبکه ی اجتماعی مثل انار و یا بیسفون از چه روشی برای ارسال پیام از سرور استفاده می کنن!!؟ کسی اطلاعی نداره ؟

        1. علی.ب می گوید

          دوست عزیز به نظرم مورد کاربرد gcm رو اشتباه برداشت کردید.
          گوگل توی همه گوشی هایی که تایید شده گوگل هستند سرویسی رو برای push در نظر گرفته که کارش اینه با سرورهای گوگل در ارتباط باشه و در صورت دریافت پیام اونو به اپ مربوطه انتقال بده حتی اگه برنامه در حال اجرا نباشه و نکته دیگه اینکه برای موارد real-time اصلا خوب نیست بهتر از تکنولوژی های مثل websocket استفاده کنید (فقط موقع اجرا برنامه بهینه هست در غیر این صورت چیزی از باتری نمیمونه!)
          + gcm کلا رایگان هست ولی محدودیت هایی داره مثلا توی هر درخواست فقط میشه حداکثر به ۱۰۰۰ reg_id پیام فرستاد یا حجم کل بسته ها بیشتر از ۴ کیلوبایت نباید باشه و …

          احتمالا شما با سرویس cloud pub/sub گوگل اشتباه گرفتید:
          https://cloud.google.com/pubsub/

      2. morteza می گوید

        سلام ، راجع به MQTT اطلاعات بیشتری میتونید ارایه کنید؟؟

    2. neilabak می گوید

      سلام .من قبلا از parse برای ارسال نوتیفیکیشن استفاده میکردم .الان چون parse گفته از سال ۲۰۱۷ دیگه سرویسش قطع میشه مجبورم از سرور دیگه ای استفاده کنم. آموزشهای gcm رو خوندم و پوکیدم از بس گیج کننده بود! میخواستم ببینم آیا OneSignal مشابه parse هست ؟ با توجه به اینکه این پستتون مال سال ۹۴ هست آیا الانم OneSignal رو پیشنهاد میکنید ؟
      و مسئله دوم اینکه در آموزشهای استفاده از gcm گفته که دیوایس کاربر اکانت گوگل داشته باشه ، با توجه به اینکه کاربرایی که از برنامه ی من میخوان استفاده کنن احتمال ۹۰ درصد اکانت گوگل ندارند و ۹۰ درصد برای استفاده از برنامه اکانت نخواهند ساخت ! آیا باز هم استفاده از gcm پیشنهاد میشه یا خیر؟
      با سپاس

      1. neilabak می گوید

        آیا کسی هست مرا یاری کند؟

  3. Mahdi می گوید

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

  4. s می گوید

    سلام ببخشید شما توی اکلیپس هم از OneSignal استفاده کردین؟
    من میخوام توی اپلیکیشنم طبق لینک زیر از OneSignal-Android-SDK-1.10.5استفاده کنم و خود sample اصلی را هم که توی اکلیپس run میکنم به این مشکل برمی خورم!!
    همه ی مراحلی که در لینک
    http://documentation.onesignal.com/docs/amazon-native-sdk-installation
    گفته را انجام داده ام اما این خطا را میده
    ‘com.onesignal.example.MainActivity$ExampleNotificationOpenedHandler’, referenced from method com.onesignal.example.MainActivity.onCreate
    شما تجربه ای در این زمینه ندارید؟

  5. M می گوید

    سلام، ببخشید میشه این روش را برای Widget ها هم استفاده کرد؟

  6. arang می گوید

    ما که نتونستیم یه پوش ارسال کنیم با این OneSingnal حتی به سمپل خودش ارسال نکرد
    اگر شما نمونه ای دارید لینک بدید بی زحمت

  7. QMT Provider می گوید

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

  8. علیرضا می گوید

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

    زمانی که برنامه بسته میشه ، ریسیو داشته باشیم؟
    متشکرم

  9. مصطفی می گوید

    سلام و ادب . دوست عزیز ما دقیقا همین کار را ی سال پیش کردیم و تا الان مشکلی نداشتیم ولی ی مدته که دیکه نوتیف نمیفرسته و خطای وان سیگنال را ک چک کردیم Google Play Services Library Error میده. راهکاری دارید ؟

ارسال یک پاسخ

آدرس ایمیل شما منتشر نخواهد شد.