استفاده از پوش نوتیفیکیشن ها در اندروید - بخش دوم
در مطلب قبلی نحوه ساخت اپلیکیشن اندروید برای دریافت پوش نوتیفیکیشن و رجیستر کردن کلاینت را آموختیم، در ادامه قصد داریم اسکریپت پایتونی بسازیم که پوش نوتیفیکیشن ها را برای گوشی اندرویدی که اپلیکیشن بر روی آن نصب شده ارسال نماید.
7. ارسال پوش نوتیفیکیشن ها
در بخش پایانی این آموزش یک اسکریپت ساده پایتون خواهیم ساخت که به تولید و ارسال پوش نوتیفیکیشن ها برای گوشی های اندرویدی که اپلیکیشن بر روی آنها نصب شده می پردازد. شما قادر به اجرای این اسکریپت از کامپیوتر لوکال خود و یا از یک وب سرور ریموت که به آنها دسترسی SSH دارید، می باشید.
گام 1: ساخت اسکریپت
یک فایل جدید به نام send.py ساخته و آن را در ویرایشگر متنی مورد نظر خود باز کنید.
در قسمت بالای فایل، ماژول های urllib2 و urllib را وارد کنید، از این ماژول ها به منظور ارسال داده به سرویس ارتباطی کلود گوگل استفاده می شود. ماژول json را نیز وارد کنید، چرا که داده های ارسال شده باید از نوع JSON معتبر باشند. در آخر جهت دسترسی به آرگومنت های کامند لاین، ماژول sys را وارد کنید.
from urllib2 import *
import urllib
import json
import sys
در مرحله بعد، یک متغیر بسازید که کلید API سرور را ذخیره کند، این کلید باید بخشی از هر درخواست HTTP باشد که برای CCS صورت می پذیرد.
MY_API_KEY="ABCDEF123456789ABCDE--12A"
هر نوتیفکیشن دارای یک عنوان و یک بدنه است، به جای هارد-کد کردن آنها درون اسکریپت می توانید عنوان و بدنه را با استفاده از آرایه argv به عنوان آرگومنت های کامند لاین بپذیرید.
messageTitle = sys.argv[1]
messageBody = sys.argv[2]
یک آبجکت دیکشنری جدید پایتون جهت نمایش داده های که باید برای CCS ارسال شوند، بسازید. برای اینکه اپلیکیشن اندروید قادر به دریافت نوتیفیکیشن باشد، باید برای تاپیکی با نام my_little_topic منتشر شود. یک کلید به نام to برای دیکشنری بسازید و مقدار آن را به /topics/my_little_topic ست کنید.
به منظور نمایش محتوای نوتیفیکیشن یک کلید به نام notification را به دیکشنری افزوده و مقدار آن را با دیکشنری دیگری که دربرگیرنده سه کلید زیر است، ست نمایید:
- body
- title
- icon
مطمئن شوید که مقدار کلید icon با نام آیکون قابل ترسیم در پروژه اندروید مطابقت می کند.
data={
"to" : "/topics/my_little_topic",
"notification" : {
"body" : messageBody,
"title" : messageTitle,
"icon" : "ic_cloud_white_48dp"
}
}
با استفاده از تابع dumps از ماژول json، دیکشنری را به یک رشته از نوع JSON تبدیل کنید.
dataAsJSON = json.dumps(data)
تنها کار لازم در این مرحله ارسال رشته JSON به https://gcm-http.googleapis.com/gcm/send می باشد. برای این کار یک آبجکت Request جدید ساخته و dataAsJson را به عنوان داده آن ست کنید. بعد از آن هدر Authorization را به MY_API_KEY و هدر Content-type را به application/json ست کنید.
request = Request(
"https://gcm-http.googleapis.com/gcm/send",
dataAsJSON,
{ "Authorization" : "key="+MY_API_KEY,
"Content-type" : "application/json"
}
)
در آخر برای اجرای درخواست و واکشی پاسخ، آبجت request را به تابع urlopen فرستاده و متد read آن را فراخوانی نمایید.
print urlopen(request).read()
اسکریپت پایتون در این مرحله کامل شده و می توان آن را مورد استفاده قرار داد.
گام 2: اجرای اسکریپت
در این مرحله قادر به ارسال پوش نوتیفیکیشن بر روی هر گوشی اندرویدی که اپلیکیشن بر روی آن نصب شده، می باشیم. یک ترمینال را باز کرده و دایرکتوری را که در آن send.py را ساخته اید وارد نمایید. نام اسکریپت را به همراه عنوان نوتیفیکیشن و یک به عنوان بدنه نوتیفیکیشن، به python قابل اجرا بفرستید. در زیر مثالی برای نمایش نحوه انجام کار نمایش داده شده است:
python send.py "My first push notification" "GCM API is wonderful!"
چنانچه در حین کار با خطایی مواجه نشوید، پاسخی مشابه زیر دریافت خواهید کرد:
{"message_id":12345676892321}
با چک کردن گوشی اندروید، یک نوتیفیکیشن جدید در قسمت نوتیفیکیشن ها به نمایش در خواهد آمد.
نتیجه گیری
در این مرحله با نحوه ارسال پوش نوتیفیکیشن برای کاربران آشنایی پیدا کرده اید، در این مطلب نحوه ساخت یک اپلیکیشن اندروید که توانایی رجیستر کردن خود و دریافت نوتیفیکیشن هایی که برای یک تاپیک خاص منتشر شده اند را آموختید، علاوه بر این طریقه ساخت یک اسکریپت پایتون که قادر به انتشار نوتیفیکیشن است را نیز فرا گرفته اید.
پوش نوتیفیکیشن ها ابزار بسیار خوبی برای تعامل با کاربران می باشند، اما پیشنهاد می شود که آنها را به ندرت و تنها در صورتی که دربرگیرنده اطلاعات مفید و کاربردی باشند، مورد استفاده قرار دهید، چرا که ارسال مداوم آنها بدون هیچ دلیل منطقی، ممکن است به پاک کردن اپلیکیشن از جانب کاربر بینجامد.
برای دریافت اطلاعات جزئی تر درباره Google Cloud Messaging می توانید به Cloud Messaging Guide مراجعه نمایید.