【问题标题】:Unable to store Firebase token in MySQL database无法在 MySQL 数据库中存储 Firebase 令牌
【发布时间】:2018-02-23 07:13:26
【问题描述】:

我不知道哪里出错了。我需要获取 firebase 令牌并将其存储在我的数据库中,并通过使用这些令牌向这些设备发送通知。下面是我的代码。我真的需要一些帮助。

MainActivity.java

public class MainActivity extends AppCompatActivity {



@Override
protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    FirebaseInstanceId.getInstance().getToken();
    FirebaseMessaging.getInstance();


}

}

FirebaseInstanceIDService.java

public class FirebaseInstanceIDService extends 
FirebaseInstanceIdService {

@Override
public void onTokenRefresh() {

    String token = FirebaseInstanceId.getInstance().getToken();
    Log.e("Token :",token);
    registerToken(token);
}

private void registerToken(String token) {

    OkHttpClient client = new OkHttpClient();
    RequestBody body = new FormBody.Builder()
            .add("Token",token)
            .build();

    Request request = new Request.Builder()
            .url("http://localhost/notify.php")
            .post(body)
            .build();

    try {
        client.newCall(request).execute();
    } catch (IOException e) {
        e.printStackTrace();
    }
}
}

FirebaseMessagingService.java

public class FirebaseMessagingService extends 

com.google.firebase.messaging.FirebaseMessagingService{

@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 builder = new NotificationCompat.Builder(this)
            .setAutoCancel(true)
            .setContentTitle("FCM Test")
            .setContentText(message)
            .setSmallIcon(R.drawable.gas45)
            .setContentIntent(pendingIntent);

    NotificationManager manager = (NotificationManager) 
getSystemService(NOTIFICATION_SERVICE);

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


}

notify.php

<?php 
if (isset($_POST["Token"])) {

       $fcm_Token=$_POST["Token"];
       $conn = mysqli_connect("localhost","root","","fcm") or 
 die("Error connecting");
       $q="INSERT INTO users (Token) VALUES ( '$fcm_Token')"
          ."ON DUPLICATE KEY UPDATE Token = '$fcm_Token';";

  mysqli_query($conn,$q) or die(mysqli_error($conn));
  mysqli_close($conn);
}
?>

【问题讨论】:

  • 请查看我之前的回答[this](stackoverflow.com/a/40283178/4741746)
  • 你在onTokenRefresh的方法中得到token了吗?
  • 不..我没有得到
  • 您的代码有什么问题?请记住:您是我们中唯一可以在调试器中运行此代码并告诉我们发生了什么的人。

标签: php android mysql firebase firebase-cloud-messaging


【解决方案1】:

请更改您的查询

   $q="INSERT INTO users (Token) VALUES ( '$fcm_Token')"
      ."ON DUPLICATE KEY UPDATE Token = '$fcm_Token';";

到这里

$q="INSERT INTO users (Token) VALUES ( '".$fcm_Token."')"
          ."ON DUPLICATE KEY UPDATE Token = '".$fcm_Token."';";

我认为您在附加变量语法的 PHP 字符串中犯了错误。 您应该像这样附加$fcm_Token,因为您已经使用. 运算符附加了字符串。

请试试这个。

【讨论】:

  • 对不起,我不明白你在说什么。
  • 您是否检查过您的查询是否正常工作...我错过了query
  • @Pranav MS 他在获取令牌后没有在 android 端获取令牌 PHP 代码执行所以首先我们需要检查 android 端而不是 php 端
【解决方案2】:

您可以查看

  1. 在没有代理的情况下检查您的互联网连接并打开互联网连接
  2. 用新的google-service.json 替换你可以在 firebaseconsol 中得到它
  3. 请检查您的设备中是否有 google play 服务,它是否可以正常工作,如果没有 google play 服务,firebase 将无法工作

检查-FireBaseInstanceId service does not get registered

您是否在 AndroidManifiest.xml 文件中注册了 Firebase 服务

<!-- Firebase Notifications -->
        <service
            android:name="com.indus.corelib.notification.FirebaseMessagingService"
            android:exported="false" >
            <intent-filter>
                <action android:name="com.google.firebase.MESSAGING_EVENT" />
            </intent-filter>
        </service>
        <service
            android:name="com.indus.corelib.notification.FirebaseIDService"
            android:exported="false" >
            <intent-filter>
                <action android:name="com.google.firebase.INSTANCE_ID_EVENT" />
            </intent-filter>
        </service>

请关注step 一颗花药examplebest 一颗祝你好运

【讨论】:

    【解决方案3】:

    onTokenRefresh() 已弃用,获取令牌的最佳方法是:

       FirebaseInstanceId.getInstance().getInstanceId().addOnSuccessListener(MainActivity.this, new OnSuccessListener<InstanceIdResult>() {
                @Override
                public void onSuccess(InstanceIdResult instanceIdResult) {
                    String newToken = instanceIdResult.getToken();
                    Log.e("newToken", newToken);
                    SharedPreferences.Editor editor = getSharedPreferences("TOKEN_PREF", MODE_PRIVATE).edit();
                    if (token!=null){
                        storetoken(newToken);
                    }
    
                }
            });
    

    【讨论】:

      猜你喜欢
      • 2018-11-12
      • 1970-01-01
      • 2017-12-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-01
      相关资源
      最近更新 更多