我想实现 android 推送通知。我用谷歌搜索,发现没有文档提供向服务器发送注册 token 的示例实现。都有空实现。有人有此方法的正确示例实现吗?
至少需要 API 文档。
https://firebase.google.com/docs/cloud-messaging/android/client
public void onTokenRefresh()
{
// Get updated InstanceID token.
String refreshedToken = FirebaseInstanceId.getInstance().getToken();
Log.w(TAG, "Refreshed token: " + refreshedToken);
// If you want to send messages to this application instance or
// Instance ID token to your app server.
sendRegistrationToServer(refreshedToken);
}
最佳答案
首先,您需要创建扩展 FirebaseInstanceIdService
的 FirebaseIDService
类
public class FirebaseIDService extends FirebaseInstanceIdService {
private static final String TAG = "FirebaseIDService";
private SharedPreferences sharePrefs;
private SharedPreferences.Editor edit;
@Override
public void onTokenRefresh() {
// Get updated InstanceID token.
String refreshedToken = FirebaseInstanceId.getInstance().getToken();
Intent intent = new Intent(FirebaseIDService.this, SaveFCMTokenService.class);
intent.putExtra("TOKEN",refreshedToken);
FirebaseIDService.this.startService(intent);
}
}
稍后创建扩展 Service
类的 SaveFCMTokenService
类
public class SaveFCMTokenService extends Service {
@Override
public void onCreate() {
// TODO Auto-generated method stub
super.onCreate();
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
// TODO Auto-generated method stub
if(intent != null){
Bundle b = intent.getExtras();
if(b != null) {
String token = b.getString("TOKEN");
sendRegistrationToServer(token);
}
}
return super.onStartCommand(intent, flags, startId);
}
@Override
public void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
}
@Override
public IBinder onBind(Intent arg0) {
// TODO Auto-generated method stub
return null;
}
private void sendRegistrationToServer(final String token) {
// Add custom implementation, as needed.
DatabaseReference ref = FirebaseDatabase.getInstance().getReference();
DatabaseReference fcmDatabaseRef = ref.child("FCM_Device_Tokens").push();
FCM_Device_Tokens obj = new FCM_Device_Tokens();
obj.setToken(token);
fcmDatabaseRef.setValue(obj);
}
}
另外,不要忘记将这两个添加到 list 文件中
<service android:name=".servicesreceivers.FirebaseIDService">
android:exported="true">
<intent-filter>
<action android:name="com.google.firebase.INSTANCE_ID_EVENT" />
</intent-filter>
</service>
<service android:name=".servicesreceivers.SaveFCMTokenService" />
FCM_Device_Tokens 模型类
@IgnoreExtraProperties
public class FCM_Device_Tokens {
@SerializedName("token")
private String token;
public FCM_Device_Tokens() {
}
public String getToken() {
return token;
}
public void setToken(String token) {
this.token = token;
}
}
关于java - 如何将 android 客户端注册 token 发送到 FCM 服务器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46545372/