Android FCM определяет идентификатор канала и отправляет уведомление на этот канал через PHP - PullRequest
0 голосов
/ 18 января 2019

Я полностью потерялся в этом, получил 20 открытых вкладок, чтобы решить эту надоедливую головоломку. Я изучил несколько учебных пособий, но ни один из них не отвечает, где определить идентификатор канала и как отправить на него уведомление через PHP.

override fun onMessageReceived(remoteMessage: RemoteMessage?) {
    showNotification(remoteMessage!!.data["message"]!!)
}

private fun showNotification(message: String) {

    val i = Intent(this, MainActivity::class.java)
    i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)

    val pendingIntent = PendingIntent.getActivity(this, 0, i, PendingIntent.FLAG_UPDATE_CURRENT)


    val builder = NotificationCompat.Builder(this)
            .setAutoCancel(true)
            .setContentTitle("FCM Test")
            .setContentText(message)
            .setLargeIcon(BitmapFactory.decodeResource(resources, com.amoflirt.amoflirt.R.drawable.ic_vip_heart))
            .setSmallIcon(com.amoflirt.amoflirt.R.drawable.common_google_signin_btn_icon_dark)
            .setContentIntent(pendingIntent)


    val manager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager

    manager.notify(0, builder.build())
}

Независимо от того, что я здесь изменяю, это не влияет на способ отправки / получения уведомлений, как setLargeIcon ничего не добавляет.

Это PHP:

define( 'API_ACCESS_KEY', 'xxx');

 $msg = array(
            'body'  => $body,
            'title' => $title,
            );

$fields = array(
                'to' => $token,
                'notification'  => $msg
                );


$headers = array
            (
            'Authorization: key=' . API_ACCESS_KEY,
            'Content-Type: application/json'
            );


$ch = curl_init();
curl_setopt( $ch,CURLOPT_URL, 'https://fcm.googleapis.com/fcm/send' );
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 );
echo $result;
curl_close( $ch );

Я пробовал все виды "решений", чтобы добавить большой значок и вибрацию с обеих сторон (Android и PHP), но ни одно из них не работает. Но самое главное, я не понимаю, как добавить проклятые каналы и как отправлять им уведомления. Почему у андроида в целом такой беспорядок и куча собачьей хрени: (

Заранее спасибо

Ответы [ 2 ]

0 голосов
/ 30 апреля 2019

Я обновил ответ @ Nasdomlan, но никто не проверял и не принимал его. поэтому я выкладываю свой ответ здесь:

$msg = array(
            'body'  => $body,
            'title' => $title,
            'android_channel_id' => $id
       );

$fields = array(
                'to' => $token,
                'notification'  => $msg
          );

где $ id вашей строки channel_id. Вы можете прочитать об этом в https://firebase.google.com/docs/cloud-messaging/http-server-ref#notification-payload-support, «Таблица 2b. Android - ключи для уведомлений»

0 голосов
/ 26 февраля 2019
 $msg = array(
            'body'  => $body,
            'title' => $title,
            'channel_id' => $id,
            );

$fields = array(
                'to' => $token,
                'notification'  => $msg
                );

где $id строка вашего канала_ид

...