尝试使用我的Android应用中的Cloud-Messaging API通过Firebase发送通知

时间:2017-02-27 20:18:27

标签: android firebase firebase-cloud-messaging

我正在使用Firebase和我的Android应用程序使用云消息传递API向我的应用程序发送通知。我正在使用MYSQL数据库来使用我的应用程序存储设备的令牌。

我的问题是,一旦用户向其发送令牌,令牌就不会被插入数据库。当用户发送时,插入字段为空白,因此我假设我的PHP用于此操作,并且可能与我的Android代码有关。

public class MainActivity extends AppCompatActivity {

    String urlInsertToken = "IP_ADDRESS_GOES_HERE/fcm_insert_token.php";
    Button btn;

    private static final String TAG = "MyFireActivity";

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

        btn = (Button) findViewById(R.id.btn1);
        btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                SharedPreferences sharedPreferences =   getApplication().getSharedPreferences(getString(R.string.FCM_PREF), Context.MODE_PRIVATE);
           // SharedPreferences.Editor editor = sharedPreferences.edit();
           // final String token = FirebaseInstanceId.getInstance().getToken();
            //Log.d(TAG,"Token", + token);
            //Log.d(TAG," token" + token);
            //Toast.makeText(MainActivity.this,token,Toast.LENGTH_SHORT).show();


            final String token = sharedPreferences.getString(getString(R.string.FCM_TOKEN), "");
            Toast.makeText(MainActivity.this,token,Toast.LENGTH_SHORT).show();
            StringRequest stringRequest = new StringRequest(Request.Method.POST,urlInsertToken,
                    new Response.Listener<String>() {
                        @Override
                        public void onResponse(String response) {

                        }

                    }, new Response.ErrorListener() {

                @Override
                public void onErrorResponse(VolleyError error) {

                }
            })

            {
                protected Map<String, String> getParams() throws AuthFailureError {
                    Map<String,String> params = new HashMap<String, String>();
                    params.put("fcm_token",token);
                    return params;
                }

            };

            MainActivity2.getMyInstance(MainActivity.this).addRequestQueue(stringRequest);

        }

    });
}
}
if($_SERVER["REQUEST_METHOD"]=="POST"){
    require_once('db_connect.php');
    insertFCMToken();

}


/* 
Function used to insert Token from GCM
*/
function insertFCMToken(){

    global $conn;

    $fcm_token = $_POST["fcm_token"];


    $sql = "INSERT INTO fcm_info values ('".$fcm_token."');";



    mysqli_close($conn);
}
?>

1 个答案:

答案 0 :(得分:0)

首先,请切换到retrofit2。其次,将令牌存储在首选项中不再相关。您可以获取对fire base实例id服务的挂钩。

String token = FirebaseInstanceId.getInstance().getToken();

我曾经得到确切的错误,我的错是令牌是空白的。

还要在你的php代码中添加echo,以验证令牌的状态,有时凌空行为真的出乎意料地因为上述原因我改用了retrofit.alot更快。

改造内部使用okhttp3库,因此您可以查看网络日志。通过这种方式,您可以纠正令牌是否已发送。

https://square.github.io/retrofit/