ارسال پوش نوتیفیکیشن سمت سرور با PHP و FCM

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

چون قبلش میخواستم در مورد کار با وان‌سیگنال آموزش بدم ولی خوب انگار که یه چیز مرسومی شده و ایران تحریم شد و مطلب یه جورایی بی ارزش میشد.

دقیقا سر قضیه آموزش ارسال Push Notification با parse هم همین مشکل پیش اومد و اون هم یه مدت تحریم شدیم و بعدش که کلا برچیده شد!

در حال حاضر تنها چیزی که مونده برامون فایربیس گوگل هستش که اتفاقا همینم تحریم شدیم! ولی خوب میشه هنوز استفاده کرد و من امروز مقدمات این کار رو توضیح میدم که به چه شکله.

شروع...

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

https://en.wikipedia.org/wiki/Push_technology#Push_notification

https://www.urbanairship.com/push-notifications-explained

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

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

فرض گرفته شده که کارهای بالا رو کردید. حالا از توی پنل مدیریتی فعلی فایربیس که تغییرات زیادی هم کرده نسبت به قبل، باید وارد مسیر زیر (که عکسشو رو گذاشتم) بشید. یعنی روی چرخ دنده کلیک کنید و بعد گزینه project setting و بعد هم بزنید روی تب cloud message.

گوگل فایربیس رو سال 2014 خرید و یه سری تغییرات اعمال کرده و در حال حاضر به دو صورت میشه با قسمت پوش نوتیفیکیشن کار کرد. ما به همون شیوه راحتتر و قدیمیش کار میکنیم. پس توی مسیر فعلی و تب cloud messageing مقدار جلوی عبارت Legacy server Key رو کپی کنید تا بعد توی کدهامون ازش استفاده کنیم.

کدهای Php برای ارسال پوش نوتیفیکیشن به یک دیوایس مشخص (یک دستگاه موبایل، تبلت و ... اندرویدی) به شرح زیر هستش. توضیحات کدها در ادامه...

   define( 'API_ACCESS_KEY', 'LEGACY_SERVER_KEY');
    $fcm_token= 'DEVICE_FCM_TOKEN';
    $url = 'https://fcm.googleapis.com/fcm/send';
    #prep the bundle
    $data = array
     (
         'body'   => 'Body  Of Notification',
         'title'  => 'Title Of Notification'
     );
  $fields = array
    (
        'to'    => $fcm_token,
        'notification'  => $data
    );
  $headers = array
    (
        'Authorization: key=' . API_ACCESS_KEY,
        'Content-Type: application/json'
    );
    #Send Reponse To FireBase Server
    $ch = curl_init();
    curl_setopt( $ch,CURLOPT_URL, $url );
    curl_setopt( $ch,CURLOPT_POST, true );
    curl_setopt( $ch,CURLOPT_HTTPHEADER, $headers );
    curl_setopt( $ch,CURLOPT_RETURNTRANSFER, true );
    curl_setopt( $ch,CURLOPT_SSL_VERIFYPEER, false );
    curl_setopt( $ch,CURLOPT_POSTFIELDS, json_encode( $fields ) );
    $result = curl_exec($ch );
        if ($result === FALSE) {
            die('Oops! FCM Send Error: ' . curl_error($ch));
        }
    curl_close( $ch );
    #Echo Result Of FireBase Server
    var_dump($result);

خط اول رو باید همون توکنی که از پنل فایربیس برداشتید جایگزین کنید به جای عبارت LEGACY_SERVER_KEY و خط دوم که اسمش رو گذاشتم fcm_token هم توکنی هست که برنامه نویس موبایل به ازای هر دیوایس باید به شما ارائه بده که شما میتونید فرضا توی api هر بار که اپلیکیشن باز شد این رو سمت سرور ذخیره کنید و از این دست کارها.

بقیه کدها هم بسیار واضح و مبرهن هستش و نیازی به توضیح نیست. تمام!

و اما مهمترین نکته این آموزش که لازمه بدونید اینه که، مثل رباتهای تلگرامی که بعد از فیلترینگ نمیشه از ایران باهاشون کار کرد، فایربیس هم همین مدلی شده و برای کار باهاش حتما حتما باید از سرورهای خارج از کشور استفاده کنید...
  • لینک مستندات برای کارهای پیشرفته تر:

https://firebase.google.com/docs/cloud-messaging/send-message

من الله توفیق.