2017-03-03 3 views
0

Ich integriere die Slack Api: Sign in with Slack. Ich habe ein paar Dinge von Slack Api.Einloggen mit Slack Api, Android

ich die Notwendigkeit code Parameter auch.

In meiner Activity Klasse verwende ich WebView dafür. Für den Zugriff auf code Parameter, in shouldOverrideUrlLoading Methode, die ich verwendet:

public boolean shouldOverrideUrlLoading(WebView view, String url) { 
     if (url.startsWith("http://localhost:8000/")) { 
      UrlQuerySanitizer urlQuerySanitizer = new UrlQuerySanitizer(url); 
      String CLIENT_CODE = urlQuerySanitizer.getValue("code"); 
      Log.e(TAG, "shouldOverrideUrlLoading: "+ CLIENT_CODE); 
      loginPresenter.loginSuccess(); 
      return true; 
     } else { 
      view.loadUrl(url); 
      return true; 
     } 
    } 

I Klasse machen genannt HttpConstant URL zu halten:

public class HttpsConstant { 
    public static final String AUTHORIZATION_SLACK_URL = "https://slack.com/oauth/authorize?scope=identity.basic,identity.email,identity.avatar&client_id=something"; 
    public static final String TOKEN_URL = "https://slack.com/"; 
} 

I Klasse machen StrngConstant nannte diese zu halten: CLIENT_ID, CLIENT_SECRET, CLIENT_CODE.

public final class StringConstant { 
    public static final String CLIENT_ID = "something"; 
    public static final String CLIENT_SECRET = "something" ; 
    public static final String CLIENT_CODE = "something but still does not 
     able to pass the code parameter here from my activity class"; 
} 

I Retrofit für Login-Dienst bin mit:

public interface LoginService { 
    @GET("api/oauth.access?client_id=" + StringConstant.CLIENT_ID + 
    "&client_secret=" + StringConstant.CLIENT_SECRET + 
    "&code="+ StringConstant.CLIENT_CODE) 
    Call<LoginResponse> getLoginToken(); 
} 

Ich habe versucht, durch SharedPreferences in shouldOverrideUrl Methode verwendet, aber nicht in der Lage zu verwenden.

SharedPreferences preferences = getSharedPreferences("ClientCode", Context.MODE_PRIVATE); 
SharedPreferences.Editor editor = preferences.edit(); 
editor.putString("Code", CLIENT_CODE); 
editor.commit(); 

Wie kann ich code Parameter im Login-Service übergeben? Wie kann ich diese SharedPreferences verwenden, damit ich auf den Parameter code zugreifen kann? Oder gibt es eine andere Möglichkeit, den code Parameter zu erhalten und diesen zu verwenden?

Antwort

0

Sie haben die gemeinsame Einstellung festgelegt und nicht in LoginService.

Sie haben zu tun wie in LoginService

public interface LoginService { 


SharedPreferences preferences = getSharedPreferences("ClientCode", Context.MODE_PRIVATE); 

    @GET("api/oauth.access?client_id=" + StringConstant.CLIENT_ID + 
    "&client_secret=" + StringConstant.CLIENT_SECRET + 
    "&code="+ preferences.getString("Code","")) 
    Call<LoginResponse> getLoginToken(); 
} 

Ähnlichkeit, Sie haben für client_id und client_secret zu setzen und zu erhalten.

+0

In dieser LoginService-Klasse; getSharedPreferences können nicht aufgelöst werden, das sagt es auch. –

+0

Schnittstelle ist für die Deklaration nicht für Detail implementieren.So verwenden Aktivität oder Fragment oder statische Funktion in diesem Pass Contex –

+0

Deshalb habe ich verwendet, StringConstant-Klasse. –