Невозможно передать данные в запрос POST с помощью библиотеки Volley - Android - PullRequest
0 голосов
/ 31 января 2020

Я пытаюсь отправить уведомление firebase pu sh с моего сервера. Я запускаю файл. php, отправляя запрос POST, используя Volley, например:

public static void dataPacket(Activity activity, Map<String, String> bundle)
    {
        new AsyncTask<String, Boolean, Boolean>()
        {
            protected Boolean doInBackground(String... params)
            {
                String url  = CloudData.TEST_DATA_PACKET;
                RequestQueue queue = Volley.newRequestQueue(activity);

                StringRequest postRequest = new StringRequest(Request.Method.POST, url,
                        response -> {
                            // response
                            Log.d("Response", response);
                        },
                        error -> {
                            error.printStackTrace();
                            Log.d("Error.Response", error.toString());
                        }
                ) {
                    @Override
                    protected Map<String, String> getParams()
                    {
                        return bundle;
                    }

                    @Override
                    public Map<String, String> getHeaders()
                    {
                        Map<String, String>  headerParams = new HashMap<>();
                        headerParams.put("Content-Type", "application/json; charset=utf-8");

                        return headerParams;
                    }//*/
                };

                postRequest.setRetryPolicy(new DefaultRetryPolicy(
                        10000,
                        0,
                        DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));//*/

                queue.add(postRequest);
                return true;
            }
        }.execute();
    }

Это мой файл. php на моем сервере:

<?php
    require 'FCMPushNotification.php'; 

    $FCMPushNotification = new \BD\FCMPushNotification('MY_API_KEY');

    $sDeviceToken = $_POST['token'];

    $aPayload = array(
        'data' => array("test"=>123),
        'notification' => array(
            'title' => 'Example app',
            'body'=> 'This is an example message',
            'sound'=> 'default'
        )
    );

    $aOptions = array(
        'time_to_live' => 0 //means messages that can't be delivered immediately are discarded. 
    );

    $aResult = $FCMPushNotification->sendToDevice(
        $sDeviceToken,      
        $aPayload,
        $aOptions // optional
    );

    var_dump($aResult);  

 ?>

Когда я измените эту строку

$sDeviceToken = $_POST['token'];

на эту

$sDeviceToken = 'my_firebase_token_for_a_device';

все работает нормально. Но когда я пытаюсь получить переменную 'token' из запроса POST, android выдает мне эту ошибку:

BasicNetwork.performRequest: Неожиданный код ответа 500 для https://mywebsite.com/sendnotification.php W /System.err: com. android .volley.ServerError W / System.err: at com. android .volley.toolbox.BasicNetwork.performRequest (BasicNetwork. java: 179) W / System.err: at com. android .volley.NetworkDispatcher.run (NetworkDispatcher. java: 114) D / Error.Response: com. android .volley.ServerError

Что я делаю не так?

Обновление

Так я называю dataPacket:

PostTaskListener<String> postTaskListener = result ->
        {
            bundle.put("token",result); 
            SendNotification.dataPacket(activity,bundle);
        };
        FirebaseCloud.getFirebaseToken(db.getActiveProfile().cID,postTaskListener,activity);

1 Ответ

2 голосов
/ 31 января 2020

Вы указали формат тела как application / json и указали его в виде массива (form-data), который может повлиять на результат. Формат должен быть multipart / form-data (или application / x- www-form-urlencoded, согласно вики).

...