java - 如何将 FCM token ID 发送到 PHP 服务器?

标签 java android firebase firebase-cloud-messaging

FCM token ID 已生成,我希望将其发送到 PHP 服务器,然后将其存储在变量中。应该采取什么方法?

    @Override
    public void onNewToken(String token) {
        Log.d(TAG, "Refreshed token: " + token);

        // If you want to send messages to this application instance or
        // manage this apps subscriptions on the server side, send the
        // Instance ID token to your app server.
        sendRegistrationToServer(token);
    }

    private void sendRegistrationToServer(String token) {
    }

PHP 代码

<?php

$token = $_POST["tokenid"];
echo ($token);

?>

最佳答案

您可以将 FCM-Id 存储在 Preference 中,然后将此 FCM-Id 传递给后端,使用 API 调用将其作为参数传递。下面我使用 API 获取 FCM-Id 并传递给 PHP。

MyFirebaseInstanceIDService.java

public class MyFirebaseInstanceIDService extends FirebaseInstanceIdService {

    private static final String TAG = "MyFirebaseIIDService";
    Context context;

    /**
     * Called if InstanceID token is updated. This may occur if the security of
     * the previous token had been compromised. Note that this is called when the InstanceID token
     * is initially generated so this is where you would retrieve the token.
     */
    // [START refresh_token]
    @Override
    public void onTokenRefresh() {
        // Get updated InstanceID token.
        String refreshedToken = FirebaseInstanceId.getInstance().getToken();
        Log.d(TAG, "Refreshed token: " + refreshedToken);
        context = getApplicationContext();

        AppPreference.setStringPref(context, AppPreference.PREF_SIGNUP_FCM_ID, AppPreference.PREF_KEY.PREF_KEY_FCM_ID,
                refreshedToken);
        // If you want to send messages to this application instance or
        // manage this apps subscriptions on the server side, send the
        // Instance ID token to your app server.
        sendRegistrationToServer(refreshedToken);
    }

    // [END refresh_token]


    /**
     * Persist token to third-party servers.
     * <p>
     * Modify this method to associate the user's FCM InstanceID token with any server-side account
     * maintained by your application.
     *
     * @param token The new token.
     */
    private void sendRegistrationToServer(String token) {
        // TODO: Implement this method to send token to your app server.


        Map<String, String> params = new HashMap<String, String>();
        String device_id = Common.getDeviceId(this);
        params.put(FCM_TOKEN, token);
        params.put(DEVICEID, device_id);
        params.put(DEVICE_TYPE, device_type);
        JsonObjectRequest request = new JsonObjectRequest(FCM_TOKEN_URL, new JSONObject(params),
                new Response.Listener<JSONObject>() {

                    @Override
                    public void onResponse(JSONObject response) {
                        try {
                            parseJsonPersonalDetail(response);
                        } catch (Exception e) {
                            e.printStackTrace();
                        }
                    }
                },
                new Response.ErrorListener() {

                    @Override
                    public void onErrorResponse(VolleyError error) {
                        if (error.networkResponse != null) {
                            int statusCode = error.networkResponse.statusCode;
                            NetworkResponse response = error.networkResponse;

                            Log.d("testerror", "" + statusCode + " " + response.data);
                        }
                    }
                }) {
            @Override
            public Map<String, String> getHeaders() {
                Map<String, String> headers = new HashMap<String, String>();
                headers.put("User-agent", "Mozilla/5.0 (TV; rv:44.0) Gecko/44.0 Firefox/44.0");
                return headers;
            }
        };

        Common.setVolleyConnectionTimeout(request);
        ApplicationClass.getInstance().getRequestQueue().add(request);

    }


    /**
     * <b>Description</b> - Get back response for calling  callUserDetailSave API
     *
     * @param jsonObject - Pass API response
     */
    private void parseJsonPersonalDetail(JSONObject jsonObject) {
        try {
            Log.i("get response", "get response" + jsonObject);
            if (jsonObject.toString().contains(Constant.JSON_KEY.MSG)) {
                String message = jsonObject.getString(Constant.JSON_KEY.MSG);
                String status = jsonObject.getString(Constant.JSON_KEY.CODE);
            }
        } catch (Exception e) {
            e.getStackTrace();
        }
    }
}

首先,我获取 FCM id,然后调用 API 方法 sendRegistrationToServer 并将 API 中的 token 作为参数传递,以便后端开发人员从 API 参数中获取此 token 。

这里我传递了三个参数

  • params.put(FCM_TOKEN, token );
  • params.put(DEVICEID, device_id);
  • params.put(DEVICE_TYPE, device_type);

device_iddevice_type 通过,因为这是我的要求。

Add dependency in app level gradle file for calling Volley API call :

implementation 'com.android.volley:volley:1.1.0'

查看我为您创建的演示:Demo

Volley 库示例: Tutorial 1 Tutorial 2 Tutorial 3

关于java - 如何将 FCM token ID 发送到 PHP 服务器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60054798/

相关文章:

android - 从 firebase 获取数据快照时出错 -> java.lang.NumberFormatException : Invalid int: ""

android - firebaseAppDistribution - 方法 : build. android() 的无签名适用于参数类型:(build_run_closure1) 值:[build_run_closure1@x

java - Android 将字符串从一个 Activity 发送到另一个 Activity 不起作用

java - 在 Hibernate Component 标签中延迟加载不起作用

java正则表达式提取页面标题

android - 如何将自定义 Intent 过滤器注册到 AndroidManifest.xml 中的广播接收器?

javascript - Firestore(更新、删除、添加)触发器创建 Algolia 索引耗时太长

java如何创建不同对象的数组/矩阵

android - 如何将图像转换为base64以使用http帖子请求发送

android - 在android中加载webview时如何继续/忽略错误?