2017-10-31 11 views
0

既存のアンドロイドアプリにリモート通知を追加します。 Firebaseのチュートリアルに従いました。 "FirebaseInstanceIdService"を拡張してトークンを取得しました。 これは正常に動作しますが、今このトークンをRESTサービスに送信したいと考えています。ここでFirebase、Rest and AndoidAnnotiations

は私の「FirebaseInstanceIdService」ですが、これは クライアントは常にnullである:(機能していません。私はまた、それが正常に動作しますが、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から静的を削除し、「MyFirebaseInstanceIdSを追加しましたこのようなマニフェストにervice_」:

<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 :サービスをインスタンス化できません .classes.MyFirebaseInstanceIdService_: java.lang.InstantiationException: java.lang.Class < .classes.MyFirebaseInstanceIdService_>にはゼロがありません 引数のコンストラクタ

+0

を使用する必要がサービスだからあなたは、MyFirebaseInstanceIdServiceのための間違った注釈を持っていますか?あなたのRestClientは静的であり、それを挿入するステートメントはありません。 – Passiondroid

+0

はい、静的を使用しないでください。マニフェストに生成された 'MyFirebaseInstanceIdService_'も宣言してください。 – WonderCsabo

+0

@WonderCsado:マニフェストでMyFirebaseInstanceIdService_を宣言すると、 "...デフォルトのコンストラクタがありません"と表示され、クラッシュします – Urkman

答えて

1

それはあなたが使用している注入を依存関係@EService

@EService 
public class MyFirebaseInstanceIDService extends FirebaseInstanceIdService {...}