【问题标题】:How to get valid firebase token in android?如何在android中获取有效的firebase令牌?
【发布时间】:2018-01-14 00:47:22
【问题描述】:

我正在尝试发送推送通知,但是当代码被执行时,它显示无效注册错误。下面是代码

登录活动

 String getToken = FirebaseInstanceIDService.onTokenRefreshs();
String getUsername = username.getText().toString();
String URL = DataHolder.TokenUrl(getUsername,getToken);

OnTokenRefresh代码

public class FirebaseInstanceIDService extends FirebaseInstanceIdService {
    public static String onTokenRefreshs(){
        String token = FirebaseInstanceId.getInstance().getToken();
        return  token;
    }
}

推送通知代码

$url = 'https://fcm.googleapis.com/fcm/send';

          $message = array("message" => "hell man");

     $xyz=array("firebasetokengoeshere I haven't included for now");
     $fields = array(
     'to' => json_encode($xyz),
     'data' => $message
     );

     $headers = array(
     'Authorization:key = Appkey goes here',
     '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){

     }
     curl_close($ch);

     return $result;



     $message_status = send_notification($tokens, $message);
     echo $message;

{"multicast_id":6744250798651355841,"success":0,"failure":1,"canonical_ids":0,"results":[{"error":"InvalidRegistration"}]}

我得到了以上结果。如何解决此错误。

【问题讨论】:

    标签: android firebase firebase-cloud-messaging


    【解决方案1】:

    获取token的正确方法是:

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

    FirebaseInstanceIdService 的实现应包含onTokenRefresh() 方法,该方法在创建新令牌时自动调用。您不需要显式调用它。您不需要将其创建为您自己的方法,因为它已被覆盖。此外,它不应该是static。应该是这样的:

    public class MyFirebaseInstanceIdService extends FirebaseInstanceIdService {
    
        @Override
        public void onTokenRefresh() {
            String refreshedToken = FirebaseInstanceId.getInstance().getToken();
            // Store the token
        }
    }
    

    【讨论】:

      【解决方案2】:

      您应该使用下面的 sn-p:

      public class FirebaseCloudInstanceIDService extends FirebaseInstanceIdService {
      private static final String TAG = "Firebase";
      
      @Override
      public void onTokenRefresh() {
          // Get updated InstanceID token.
          String fcmToken = FirebaseInstanceId.getInstance().getToken();
          Log.d(TAG, "Refreshed token: " + fcmToken);
      
          AppPref.saveFCMToken(this, fcmToken);
      }
      

      }

      通常,我会将 Firebase 令牌存储在我的 sharedPref 中。为了更方便,您可以尝试我的小型 util 类,它充当 SharePref util 更方便。在这里找到它android-shared-preference-util

      【讨论】:

        猜你喜欢
        • 2016-10-13
        • 1970-01-01
        • 1970-01-01
        • 2018-01-07
        • 2020-09-26
        • 2021-09-07
        • 2017-11-08
        • 1970-01-01
        • 2017-08-21
        相关资源
        最近更新 更多