为了账号安全,请及时绑定邮箱和手机立即绑定

从 GCM 迁移到 FCM

从 GCM 迁移到 FCM

PHP
海绵宝宝撒 2022-07-16 16:16:22
最近我从 GCM 迁移到 FCM,过去几天我一直在努力让它工作。Android 应用程序正在接收来自 google firebase 控制台的通知,但它们没有来自 php 服务器。这是我的 PHP 服务器端代码:<?phpdefine("GOOGLE_API_KEY", Setting::get('browser_key') ? Setting::get('browser_key') : "");class GCM {function __construct() {}public function send_notification($registatoin_ids, $message) {    Log::info("GOOGLE_API_KEY".GOOGLE_API_KEY);    include_once 'const.php';    $url = 'https://fcm.googleapis.com/fcm/send';    $fields = array(        'registration_ids' => $registatoin_ids,        'data' => $message,    );    $headers = array(        'Authorization: key=' . GOOGLE_API_KEY,        'Content-Type: application/json'    );    Log::info('***** PUSH MESSAGE ******'.print_r(json_encode($fields),true));    $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);    Log::info(print_r($result,true));    if ($result === FALSE) {        //die('Curl failed: ' . curl_error($ch));        Log::error('Curl failed: ' . curl_error($ch));    }    else{        //echo $result;        Log::error($result);    }    // Close connection    /*curl_close($ch);     echo $result/*."\n\n".json_encode($fields); */}}?>这是我的 const.php<?php    define('TEAM','team');    define('MESSAGE' , 'message');?>这是我的 Firebase 消息传递代码:public class MessagingService extends FirebaseMessagingService {private static final String TAG = "FCM Message";public MessagingService() {    super();}@Overridepublic void onMessageReceived(RemoteMessage remoteMessage) {    super.onMessageReceived(remoteMessage);    sendNotification(remoteMessage.getNotification().getBody());    Log.d(TAG, "From: " + remoteMessage.getFrom());    Log.d(TAG, "Notification Message Body: " + remoteMessage.getNotification());}}
查看完整描述

3 回答

?
宝慕林4294392

TA贡献2021条经验 获得超8个赞

尝试使用这个:


@TargetApi(Build.VERSION_CODES.O)

@RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN)


public void show_Notification(){


Intent intent=new Intent(getApplicationContext(),MainActivity.class);

String CHANNEL_ID="MYCHANNEL";

NotificationChannel notificationChannel=new NotificationChannel(CHANNEL_ID,"name",NotificationManager.IMPORTANCE_LOW);

PendingIntent pendingIntent=PendingIntent.getActivity(getApplicationContext(),1,intent,0);

Notification notification=new Notification.Builder(getApplicationContext(),CHANNEL_ID)

        .setContentText("Heading")

        .setContentTitle("subheading")

        .setContentIntent(pendingIntent)

        .addAction(android.R.drawable.sym_action_chat,"Title",pendingIntent)

        .setChannelId(CHANNEL_ID)

        .setSmallIcon(android.R.drawable.sym_action_chat)

        .build();


NotificationManager notificationManager=(NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);

    notificationManager.createNotificationChannel(notificationChannel);

notificationManager.notify(1,notification);



 }


查看完整回答
反对 回复 2022-07-16
?
拉风的咖菲猫

TA贡献1995条经验 获得超2个赞

要从 php 服务器发送Firebase 推送通知,您可以使用此代码。


<?php


function sendMessage($data, $target, $serverKey){

    //FCM api URL

    $rsp = [];

    $url = 'https://fcm.googleapis.com/fcm/send';

    //api_key available in Firebase Console -> Project Settings -> CLOUD MESSAGING -> Server key

    $server_key = $serverKey;

    $fields = array();

    $fields['data'] = $data;

    if(is_array($target)){

            $fields['registration_ids'] = $target;

        }else{

            $fields['to'] = $target;

    }

    //header with content_type api key

    $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) {

        //die('FCM Send Error: ' . curl_error($ch));

    }

    curl_close($ch);


    //print_r($result);

    return $result;

}

如果你想更新你的 android 代码,你可以关注这篇文章:Firebase 推送通知


查看完整回答
反对 回复 2022-07-16
?
哆啦的时光机

TA贡献1779条经验 获得超6个赞

你得到错误的数据。它应该是这样的。或尝试先打印数据然后从数组中获取。

sendNotification(remoteMessage.getData().get("message"));
Log.d("Push data", remoteMessage.getData().toString());


查看完整回答
反对 回复 2022-07-16
  • 3 回答
  • 0 关注
  • 78 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信