2017-08-08 10 views
0

私のアプリでプッシュ通知を使用しようとしています。私は作業を完了しましたが、Firebaseのリフレッシュされたトークンを自分のサーバーに送る必要がありますが、アクティビティ/フラグメントのコンテキスト外でrxjava2/retrofit2メソッドを使用する方法はわかりません。どのように私はそれにアクセスできますか?サービスクラスからWebserviceへの呼び出しを行う方法

マイソース:

public class FirebaseInstanceIDService extends FirebaseInstanceIdService { 

    private static final String TAG = "FIIDService"; 

    @Override 
    public void onTokenRefresh() { 
     // Get updated InstanceID token. 
     String refreshedToken = FirebaseInstanceId.getInstance().getToken(); 
     sendRegistrationToServer(refreshedToken); 
    } 

    private void sendRegistrationToServer(String token) { 

     //TODO 

    } 

} 

私が活動/フラグメントに含まれていた場合、私は次の呼び出しを使用しますが、サービスで、私はそれを行うことはできません。

getCompositeDisposable() 
.add(productManager.getProductList(authToken)) 
.subscribeOn(Schedulers.io()) 
.observeOn(AndroidSchedulers.mainThread()) 
.subscribe(new Consumer<List<Product>>() { 
        @Override 
        public void accept(@NonNull List<Product> products) throws Exception { 
         onProductsLoaded(products); 
        } 
       }, new Consumer<Throwable>() { 
        @Override 
        public void accept(@NonNull Throwable throwable) throws Exception { 
         if (!isViewAttached()) 
          return; 
         getMvpView().hideAlertDialog(); 
         getMvpView().showErrorAlertDialog(); 
        } 
       })); 
+0

私はあなたがサービスでそれを行うのを妨げているのか理解できません。 –

+0

メソッド "void sendRegistrationToServer(String token)"の内部で、サーバー側に新しいトークンを格納するために、新しいトークンでrestサービスを呼び出す必要があります。しかし、私はactivity/fragmentのコンテキストなしでREST呼び出しを行う方法を知らない。 – MAOL

+0

さて、RESTサービスコールでは、アクティビティ/フラグメントのコンテキストは必要ありません。 –

答えて

0

RESTサービスを呼び出すには、Activity/Fragmentコンテキストは必要ありません。結局のところ

URL fireBaseUrl = new URL("http://your.service.url"); 
      HttpsURLConnection urlConnection = (HttpsURLConnection) fireBaseUrl.openConnection(); 
      urlConnection.setReadTimeout(10000); 
      urlConnection.addRequestProperty("Content-Type", "application/json"); 
      urlConnection.addRequestProperty("Authorization", "key=" + NetworkUtils.SERVER_KEY); 
      urlConnection.setRequestMethod("POST"); 
      urlConnection.setDoOutput(true); 

      JSONObject notification = new JSONObject() 
        .put("to", "/topics/skm") 
        //.put("to", NetworkUtils.REGISTRATION_TOKEN) 
        .put("data", new JSONObject() 
          .put("latitude", longitude) 
          .put("longitude", latitude)); 

      OutputStreamWriter oStreamWriter = new OutputStreamWriter(urlConnection.getOutputStream(), "UTF-8"); 
      String requestString = notification.toString(); 
      Log.d("JSON REQUEST", requestString); 

      oStreamWriter.write(requestString); 
      oStreamWriter.close(); 

      int status = urlConnection.getResponseCode(); 
      Log.d("STATUS CODE", status + ""); 
0

[SOLVED]

、私は新しいcompositedisposableとだけこのサービスのマネージャーを作成します。そしてこのオブジェクトの要求。私はsharedpreferencesを使用して新しいプッシュトークンを格納する必要がありました。

private void sendRegistrationToServer(final String token) { 

     Log.e("FIIS", "sendRegistrationToServer(" + token + ")"); 

     CompositeDisposable compositeDisposable = new CompositeDisposable(); 

     AccountUserManager accountUserManager = new AccountUserManager(); 

     compositeDisposable 
       .add(
         accountUserManager 
           .updatePushToken(getUserAuthToken(), token) 
           .subscribeOn(Schedulers.io()) 
           .observeOn(AndroidSchedulers.mainThread()) 
           .subscribe(new Consumer<HttpCustomRes<EmptyModel>>() { 
            @Override 
            public void accept(@NonNull HttpCustomRes<EmptyModel> emptyModelHttpCustomRes) throws Exception { 

             ErrorCode errorCaught = ErrorCode.bypassForErrors(emptyModelHttpCustomRes.getError()); 

             if (errorCaught.equals(ErrorCode.SUCCESSFUL_REPSONSE)) { 
              Log.e("FIIS", "SUCCESSFUL_RESPONSE"); 
              setUserPushToken(token); 
             } else { 
              Log.e("FIIS", "Unknown Error. Error " + errorCaught.getId()); 
             } 

            } 
           }, new Consumer<Throwable>() { 
            @Override 
            public void accept(@NonNull Throwable throwable) throws Exception { 
             Log.e("FIIS", "Error. " + throwable.getMessage()); 
            } 
           })); 

    } 

    String getUserAuthToken() { 

     SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(getApplicationContext()); 

     if (sharedPreferences.contains(AppConstants.PREF_KEY_USER_AUTH)) { 
      String userAuthString = sharedPreferences.getString(AppConstants.PREF_KEY_USER_AUTH, null); 
      UserAuth userAuth = new Gson().fromJson(userAuthString, UserAuth.class); 

      return userAuth.getToken(); 
     } 

     return null; 

    } 

    void setUserPushToken(String token) { 

     SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(getApplicationContext()); 

     sharedPreferences.edit().putString(token, null).apply(); 

    } 
関連する問題