2017-08-06 88 views
3

我想发送推送通知,但是当代码执行时,它显示无效的注册错误。下面是代码如何在android中获取有效的firebase令牌?

LoginActivity

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; 
    } 
} 

pushnotification代码

$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, “成功”:0,”失败 “:1,” canonical_ids “:0”,结果 “:[{” ERR或“:”InvalidRegistration“}]}

我得到了上述结果。如何解决这个错误。

回答

1

正确的方式来获得令牌的是:

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 
    } 
} 
0

你应该用下面的代码片段去:

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); 
} 

}

通常情况下,我将火力地堡令牌存储在我的sharedPref。为了更方便,您可以尝试使用SharePref util的小型util类来获得更多便利。在这里找到它android-shared-preference-util

相关问题