ارسال پیام با FCM Server
در سری مقالات آموزش Firebase, قصد داریم تا با پیاده سازی یک FCM Server, از طریق Device خودمان به Device های دیگر پیام ارسال کنیم.
در مقاله قبل پیرامون پیاده سازی Cloud Messaging در اندروید صحبت کردیم. در این مقاله ابتدا یک FCM Server را با PHP پیاده سازی میکنیم تا در نقش کنترل کننده باشد. همچنین بدلیل اینکه این مقاله آموزشی اندروید میباشد کد های مربوط به PHP صرفا برای اجرا شدن و نمایش cloud messaging میباشد و در این مقاله قصد بر آموزش سمت Server آن نیست.
ابتدا یک متد به کلاس ZHCloudMessaging اضافه میکنیم تا token مربوط به کاربر را به همراه نام کاربری برای server ارسال کند
private void userInfo(String token,String username){ // send token from onTokenRefresh() and user name to server }
سپس کلاس FcmMessaging را برای ارسال پیام ها پیاده سازی میکنیم. این کلاس باید قابلیت اتصال به Server را داشته باشد. برای آموزش ارتباط به Server میتوانید به اینجا مراجعه کنید. در کلاس ایجاد شده یک متد برای ارسال پیام ها مینویسم :
public void sendMessage(String username,String Message) { // send target username and message to server }
تا به اینجا در سمت اندروید امکان ارسال پیام به Device دیگر فراهم شد.
در سمت Server نیاز است تا چنین کد هایی داشته باشیم :
<?php public function userInfo($username,$token){ // insert or update user to database } public function getToken($username){ // get from database token of $username } public function sendMessage($data,$target){ $url = 'https://fcm.googleapis.com/fcm/send'; $server_key = ''; $message = array(); $message['data'] = $data; if(is_array($target)){ $message['registration_ids'] = getToken($target); }else{ $message['to'] = $target; } $headers = array( 'Content-Type:application/json', 'Authorization:key='.$server_key ); $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_VERIFYHOST, 0); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($fields)); $result = curl_exec($ch); if ($result === FALSE) { // error } curl_close($ch); return $result; }
مقدار Server Key را باید از پنل خود و قسمت Project Setting, قسمت Cloud Messaging دریافت کنید.
ساختار پیام های ارسالی از طرف Server به Client باید به این صورت باشد :
Content-Type:application/json Authorization:key=server key { "to" : Device Token, "data" : { Message }, }
و همانطور که مشخص است باید field های آن به این صورت مقدار دهی شوند
- Authorization key : مقدار Server Key
- To : این مقدار token مربوط به گیرنده میباشد
- Data : شامل پیام میباشد
اگر بخواهید بر اساس Topic ها پیام را ارسال کنید باید در قسمت To بجای token از مقدار Topic ها استفاده کنید
Content-Type:application/json Authorization:key=Server Key { "to": "/topics/news", "data": { "message": Message } }
و همچنین میتوانید از عملگر های منطقی نیز استفاده کنید
Content-Type:application/json Authorization:key=Server Key { "condition": "'Android' in topics || 'IOS' in topics", "data": { "message": Message } }
در اینجا مشخص میکنیم که اگر Device در Topic اندرودید یا IOS قرار دارد این پیام را دریافت کند. ساختار کلی ارسال پیام به Topic ها به این صورت است
'TopicA' in topics && ('TopicB' in topics || 'TopicC' in topics)
در صورتی که پیام با موفقیت ارسال گردد message id و در صورتی که با خطا مواجه شود error برگردانده میشود.
در این مقاله سعی شد تا Cloud Messaging را از سمت Server برای شما توضیح داده شود. در پایان سری مقالات آموزش Firebase اقدام به ساخت یک پروژه با تمام امکانات Firebase میکنیم تا تمام این آموزش هارا در کنار هم و به صورت عملی مشاهده کنید.
در مقاله بعدی Authenticate در Firebase را بررسی خواهیم کرد.
سری مقالات آموزش Firebase همچنان ادامه دارد.
با ما همراه باشید.
دیدگاهتان را بنویسید
برای نوشتن دیدگاه باید وارد بشوید.