Android Push уведомление от phpmyadmin не получает уведомление - PullRequest
0 голосов
/ 01 декабря 2018

Во-первых, я искал, но я не получил результата с 2017/2018, и некоторые вещи устарели.

Я пытался отправить уведомление для программы с php.У меня есть этот php (send_notification), но с 2016 года. Я уже получил токен для БД и был сохранен в tokens.tokens.Я думаю, что отправка данных с php не достаточно, потому что когда я изменил построитель уведомлений, теперь он говорит, что вам нужно указать idchannel (последний устарел)

 manager.notify(1,notificationBuilder.build());

и когда я передаю информацию ($поля)

        $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('Curl failed: ' . curl_error($ch));
        }
        curl_close($ch);

        return $result;

Канал не указан.


Обновление: я получаю сообщение, если отправляю его из Интернета, только если оно спит.Я попытался с тестом и отправив в тестовый раздел и канал 1, и я получил его оба, так что я почти уверен, что ошибка должна быть на php и, возможно, на предмете curl, который я отметил в начале.TEST

TEST2

Теперь я добавлю код, чтобы, возможно, кто-то мог помочь.

FirebaseMessagingService

package com.example.android.fcmtest;

import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.util.Log;

import com.google.firebase.messaging.RemoteMessage;

import androidx.core.app.NotificationCompat;

public class FirebaseMessagingService extends com.google.firebase.messaging.FirebaseMessagingService {

    WebService ws;


    @Override
    public void onNewToken(String token) {

        super.onNewToken(token);
        Log.d("NEW_TOKEN",token);
        Context context = this;
        ws.registrarTokenWebService(token, context);
    }



    @Override
    public void onMessageReceived(RemoteMessage remoteMessage) {

        showNotification(remoteMessage.getData().get("message"));
    }

    private void showNotification(String message){

        Intent i =  new Intent(this,MainActivity.class);
        i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

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

        NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this, "M_CH_ID")
                .setAutoCancel(true)
                .setContentTitle("FCM Test")
                .setContentText(message)
                .setSmallIcon(R.drawable.common_google_signin_btn_icon_dark)
                .setContentIntent(pendingIntent);

        NotificationManager manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);

        manager.notify(1,notificationBuilder.build());
    }

}

Основная деятельность

package com.example.android.fcmtest;

import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;

import com.google.android.gms.tasks.OnSuccessListener;
import com.google.firebase.iid.FirebaseInstanceId;
import com.google.firebase.iid.InstanceIdResult;
import com.google.firebase.messaging.FirebaseMessaging;

public class MainActivity extends AppCompatActivity {
    WebService ws;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ws = new WebService();

        FirebaseMessaging.getInstance().subscribeToTopic("test");
        FirebaseInstanceId.getInstance().getInstanceId().addOnSuccessListener( new OnSuccessListener<InstanceIdResult>() {
            @Override
            public void onSuccess(InstanceIdResult instanceIdResult) {
                String deviceToken = instanceIdResult.getToken();
                ws.registrarTokenWebService(deviceToken, MainActivity.this);
            }
        });

    }
}

push_notification.php

<?php

    function send_notification ($tokens, $message)
    {
        $url = 'https://fcm.googleapis.com/fcm/send';
        $fields = array(
            'registration_ids' => $tokens,
            'data' => $message
            );

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

        $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('Curl failed: ' . curl_error($ch));
        }
        curl_close($ch);

        return $result;

    }


    $hostname_localhost ="localhost";
    $username_localhost ="root";
    $password_localhost ="";
    $database_localhost ="tn";


    $conn = mysqli_connect ($hostname_localhost, $username_localhost, $password_localhost, $database_localhost);



    $sql = "SELECT tokens.tokens FROM tokens";


    $result = mysqli_query($conn,$sql);
    $tokens = array();

    if(mysqli_num_rows($result) > 0){

        while ($row = mysqli_fetch_assoc($result)) {
            $tokens[] = $row["tokens"];
        }
    }

    mysqli_close($conn);

    $message = array("message" => " FCM PUSH NOTIFICATION TEST MESSAGE");
    $message_status = send_notification($tokens, $message);
    echo $message_status;
?>

С тех пор, мои пожелания.

...