所以,我有这门课。此类会将device token
保存为共享首选项。
public class MyFirebaseInstanceIDService extends FirebaseInstanceIdService {
private static final String TAG = "MyFirebaseIIDService";
Context myCon;
public MyFirebaseInstanceIDService(Context mCon){
this.myCon=mCon;
}
@Override
public void onTokenRefresh() {
super.onTokenRefresh();
String refreshedToken = FirebaseInstanceId.getInstance().getToken();
storeToken(refreshedToken);
}
private void storeToken(String token) {
SessionHandler.getInstance(myCon).saveDeviceId(token);
}
}
以下是我如何在其他活动中使用该课程
MyFirebaseInstanceIDService firebaseService = new MyFirebaseInstanceIDService(Login_activity.this);
firebaseService.onTokenRefresh();
这是我的清单
<service
android:name=".custom_services.MyFirebaseInstanceIDService">
<intent-filter>
<action android:name="com.google.firebase.INSTANCE_ID_EVENT"/>
</intent-filter>
</service>
所以,在上面的清单中,我收到了这条消息
MyFirebaseInstanceIDService没有默认构造函数
我该如何解决?提前谢谢
答案 0 :(得分:2)
您不需要直接调用服务对象。一旦您在清单文件中声明它,Android将处理您的服务。
您也不需要添加构造函数来传递上下文,因为服务将在其中提供上下文。
如果你需要强行刷新令牌(它会抛出错误在主线程上运行,所以使用异步任务或使用其他线程):
FirebaseInstanceId.getInstance().deleteInstanceId();
FirebaseInstanceId.getInstance().getToken();
刷新令牌后,方法public void onTokenRefresh()
将被调用,您的内部功能将会运行。
答案 1 :(得分:1)
在MyFirebaseInstanceIDService
:
public MyFirebaseInstanceIDService(){
}
答案 2 :(得分:0)
您不需要定义构造函数。你的课应该就像
public class MyFirebaseInstanceIDService extends FirebaseInstanceIdService {
private static final String TAG = "MyFirebaseIIDService";
@Override
public void onTokenRefresh() {
String refreshedToken = FirebaseInstanceId.getInstance().getToken();
Log.d(TAG, "Refreshed token: " + refreshedToken);
sendRegistrationToServer(refreshedToken);
}
private void sendRegistrationToServer(String token) {
Log.d("mDeviceToken", token);
}
}
不需要
MyFirebaseInstanceIDService firebaseService = new MyFirebaseInstanceIDService(Login_activity.this);
firebaseService.onTokenRefresh();
您只需要在OnTokenRefresh()中保存您的令牌(可能在sharedPreference中)。
答案 3 :(得分:0)
无需调用MyFirebaseInstanceIDService类
您可以从任何活动中获取Device Token
...
String deviceToken = FirebaseInstanceId.getInstance().getToken();
答案 4 :(得分:0)
参见Clas Architecture。
<main></main>
即public class FirebaseInstanceIdService extends Service
是FirebaseInstanceIdService
因此您不必将Service
传递给它,因为它有自己的Context
所以您不必拥有参数化构造函数
如果您没有任何构造函数,编译器会自动注入默认的构造函数。而已 。保持简单。
Context