Firebase、Rest 和 AndoidAnnotiations
Firebase, Rest and AndoidAnnotiations
我想向现有 android 应用添加远程通知。
我遵循了 Firebase 教程来这样做。
所以我扩展 "FirebaseInstanceIdService" 来获取令牌。
这工作正常,但现在我想将此令牌发送给 REST 服务。
这是我的 "FirebaseInstanceIdService",但这不起作用 :(
客户端始终为空。我还在 Activity 中使用这段代码来处理对 REST 服务的其他请求,它工作正常...
对这里的错误有什么建议吗?
@EBean
public class MyFirebaseInstanceIdService extends FirebaseInstanceIdService {
@Bean
MyAuthInterceptor authInterceptor;
@RestService RestClient client;
public RestClient getRestClient()
{
return client;
}
@AfterInject
void initAuth()
{
RestTemplate template = client.getRestTemplate();
List<ClientHttpRequestInterceptor> interceptors = new ArrayList<ClientHttpRequestInterceptor>();;
interceptors.add(authInterceptor);
template.setInterceptors(interceptors);
List<HttpMessageConverter<?>> converter = new ArrayList<HttpMessageConverter<?>>();
converter.add(new GsonHttpMessageConverter());
template.setMessageConverters(converter);
}
@Override
public void onTokenRefresh()
{
String refreshedToken = FirebaseInstanceId.getInstance().getToken();
DeviceTokenJson token = new DeviceTokenJson();
token.token = refreshedToken;
token.env = "prod";
token.os = "android";
token.disabled = 0;
RestClient test = getRestClient();
ResponseJsonNotification response = getRestClient().registerToken(token);
}
}
更新:
按照建议,我从 RestClient 中删除了静态,并将 "MyFirebaseInstanceIdService_" 添加到清单中,如下所示:
<service
android:name=".classes.MyFirebaseInstanceIdService_">
<intent-filter>
<action android:name="com.google.firebase.MESSAGING_EVENT"/>
<action android:name="com.google.firebase.INSTANCE_ID_EVENT"/>
</intent-filter>
</service>
现在我收到 MyFirebaseInstanceIdService_ has no default constructor
错误消息...
当我启动应用程序时崩溃:
java.lang.RuntimeException: Unable to instantiate service
.classes.MyFirebaseInstanceIdService_:
java.lang.InstantiationException:
java.lang.Class<.classes.MyFirebaseInstanceIdService_> has no zero
argument constructor
您对 MyFirebaseInstanceIdService 的注释有误,因为它是您必须使用 @EService 的服务
@EService
public class MyFirebaseInstanceIDService extends FirebaseInstanceIdService {...}
我想向现有 android 应用添加远程通知。 我遵循了 Firebase 教程来这样做。 所以我扩展 "FirebaseInstanceIdService" 来获取令牌。 这工作正常,但现在我想将此令牌发送给 REST 服务。
这是我的 "FirebaseInstanceIdService",但这不起作用 :( 客户端始终为空。我还在 Activity 中使用这段代码来处理对 REST 服务的其他请求,它工作正常...
对这里的错误有什么建议吗?
@EBean
public class MyFirebaseInstanceIdService extends FirebaseInstanceIdService {
@Bean
MyAuthInterceptor authInterceptor;
@RestService RestClient client;
public RestClient getRestClient()
{
return client;
}
@AfterInject
void initAuth()
{
RestTemplate template = client.getRestTemplate();
List<ClientHttpRequestInterceptor> interceptors = new ArrayList<ClientHttpRequestInterceptor>();;
interceptors.add(authInterceptor);
template.setInterceptors(interceptors);
List<HttpMessageConverter<?>> converter = new ArrayList<HttpMessageConverter<?>>();
converter.add(new GsonHttpMessageConverter());
template.setMessageConverters(converter);
}
@Override
public void onTokenRefresh()
{
String refreshedToken = FirebaseInstanceId.getInstance().getToken();
DeviceTokenJson token = new DeviceTokenJson();
token.token = refreshedToken;
token.env = "prod";
token.os = "android";
token.disabled = 0;
RestClient test = getRestClient();
ResponseJsonNotification response = getRestClient().registerToken(token);
}
}
更新:
按照建议,我从 RestClient 中删除了静态,并将 "MyFirebaseInstanceIdService_" 添加到清单中,如下所示:
<service
android:name=".classes.MyFirebaseInstanceIdService_">
<intent-filter>
<action android:name="com.google.firebase.MESSAGING_EVENT"/>
<action android:name="com.google.firebase.INSTANCE_ID_EVENT"/>
</intent-filter>
</service>
现在我收到 MyFirebaseInstanceIdService_ has no default constructor
错误消息...
当我启动应用程序时崩溃:
java.lang.RuntimeException: Unable to instantiate service .classes.MyFirebaseInstanceIdService_: java.lang.InstantiationException: java.lang.Class<.classes.MyFirebaseInstanceIdService_> has no zero argument constructor
您对 MyFirebaseInstanceIdService 的注释有误,因为它是您必须使用 @EService 的服务
@EService
public class MyFirebaseInstanceIDService extends FirebaseInstanceIdService {...}