Mat*_*šút 28 android firebase firebase-cloud-messaging
我正在使用FCM在我的应用中提供通知.一切都运作良好,但现在我意识到,当我使用Android Studio(而非GooglePlay)安装我的应用程序时,令牌在首次运行时为空.当我关闭我的应用程序并重新启动它时,令牌不再为空.导致这个问题的原因是什么,我该如何避免呢?
InstanceIDService:
public class InstanceIDService extends FirebaseInstanceIdService {
@Override
public void onTokenRefresh() {
String token = FirebaseInstanceId.getInstance().getToken();
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("url_to_registration_script")
.post(body)
.build();
try {
client.newCall(request).execute();
} catch (IOException e) {
e.printStackTrace();
}
}
}
Run Code Online (Sandbox Code Playgroud)
在MainActivity中:
FirebaseMessaging.getInstance().subscribeToTopic("topic");
String token = FirebaseInstanceId.getInstance().getToken();
Log.d("TOKEN", token);
Run Code Online (Sandbox Code Playgroud)
安装并首次启动应用程序时,上次日志返回null
注册脚本:
<?php
if (isset($_POST["Token"])) {
$_uv_Token=$_POST["Token"];
$conn = mysqli_connect("localhost","user","pass","db") or die("Error connecting");
$q="INSERT INTO users (Token) VALUES ( '$_uv_Token') "
." ON DUPLICATE KEY UPDATE Token = '$_uv_Token';";
mysqli_query($conn,$q) or die(mysqli_error($conn));
mysqli_close($conn);
}
?>
Run Code Online (Sandbox Code Playgroud)
小智 8
从模拟器卸载应用程序并再次运行,以便再次调用onTokenRefreshed方法.
要查看是否已经注册,您只想知道FCM TOken
String refreshedToken = FirebaseInstanceId.getInstance().getToken();
Run Code Online (Sandbox Code Playgroud)
在MyFirebaseMessagingService类中添加上面的任何位置(在oncreate方法中),只需添加Toast或记录refreshedToken.
小智 5
只需更换:
String token = instanceID.getToken();
Run Code Online (Sandbox Code Playgroud)
有:
String token = instanceID.getToken($SENDER_ID, "FCM");
Run Code Online (Sandbox Code Playgroud)
它会起作用.
归档时间: |
|
查看次数: |
35218 次 |
最近记录: |