2017-03-16 3 views
0

나는 Dropbox에서 사진을 다운로드해야하는 Android 앱을 제작 중입니다. 그러나 매번 사용자는 자신을 인증해야합니다. 세부 사항을 처음 저장하고 나중에 인증을받지 않아도되는 응용 프로그램을 원합니다. 코드는 다음과 같습니다.Android 애플리케이션을 시작할 때마다 드롭 박스 사용자 세부 정보를 저장하지 않고 인증하는 방법은 무엇인가요?

protected void initialize_session(){ 
    AppKeyPair appKeys = new AppKeyPair(APP_KEY, APP_SECRET); 
    AndroidAuthSession session = new AndroidAuthSession(appKeys); 
    mDBApi = new DropboxAPI<AndroidAuthSession>(session); 
    mDBApi.getSession().startOAuth2Authentication(Control_Gate.this); 
} 


protected void onResume() { 
    if (mDBApi.getSession().authenticationSuccessful()) { 
     try { 
      // Required to complete auth, sets the access token on the session 
      mDBApi.getSession().finishAuthentication();; 
      String accessToken = mDBApi.getSession().getOAuth2AccessToken(); 
     } catch (IllegalStateException e) { 
      Log.i("DbAuthLog", "Error authenticating", e); 
     } 
    } 
    super.onResume(); 
} 

사용자를 앱으로 반환하기위한 것입니다. 솔루션이이 두 가지에 있어야한다는 것을 알고 있지만 자격 증명을 저장하는 방법을 파악할 수 없습니다.

답변

1

accessToken을 공유 환경 설정/SQLite에 저장하십시오.

예 :

SharedPreferences sp = getSharedPreferences(
              "First_share_memory", Activity.MODE_APPEND); 
            // save in cache memory 
            sp.edit().putString("accesstoken", accessToken).commit(); 

및 getDropboxAPI의 방법이 사용

link

+0

정말 고마워요. 다음을 포함시켜야합니다. else { mDBApi.getSession(). startOAuth2Authentication (Control_Gate.this); }onResume 메서드 –

+0

또 다른 질문은 pubnub를 통해 안드로이드 응용 프로그램에 메시지를 보내고 있습니다. 서비스에 코드를 작성했지만 Android OS가 서비스를 종료합니다. START_STICKY도 사용했지만 여러 번 서비스가 다시 시작되고 일부 알림도 누락됩니다. 그 유일한 512 메가 램. 내가 멈추지 않도록 모바일 용 코드를 넣을 수있는 또 다른 방법이 있습니까? –

+0

새 질문을 만드십시오. SO 표준에 따라 모든 질문에 새로운 스레드가 있습니다. 세부 정보 U는 배경 및 전경 서비스에 대해 읽어야합니다. –

1

이 SharedPrefernce에 토큰을 저장하고 적절하게 사용 자세한 내용은

private DropboxAPI <AndroidAuthSession> getDropboxAPI() { 
    AppKeyPair appKeys = new AppKeyPair(APP_KEY, APP_SECRET); 
    AndroidAuthSession session = new AndroidAuthSession(appKeys, ACCESS_TYPE); 
    mDBApi = new DropboxAPI<AndroidAuthSession>(session); 

SharedPreferences sharedpreferences = getSharedPreferences("First_share_memory", Activity.MODE_APPEND); 
String savedAccessToken = sharedpreferences.getString("accesstoken", "");// get previously saved accessToken 

if (!TextUtils.isEmpty(savedAccessToken)) { 
    mDBApi.getSession().setOAuth2AccessToken(savedAccessToken); 
} 

return mDBApi; 
} 

이 심판을 참조하십시오. 다음은 동일한 샘플 코드입니다.

protected void onResume() { 
     AndroidAuthSession session = mApi.getSession(); 
     setLoggedIn(mApi.getSession().authenticationSuccessful()); 
     if (session.authenticationSuccessful()) { 
      try { 
       // Mandatory call to complete the auth 
       session.finishAuthentication(); 

       // Store it locally in our app for later use 
       TokenPair tokens = session.getAccessTokenPair(); 
       storeKeys(tokens.key, tokens.secret); 
       setLoggedIn(true); 
      } catch (IllegalStateException e) { 
       showToast(getString(R.string.could_not_authenticate_with_dropbox) 
         + e.getLocalizedMessage()); 
      } 
     } 
     super.onResume(); 
    } 

storeKeys을 추가하고 clearKeys가 된 SharedPreferences에

private void storeKeys(String key, String secret) { 
     // Save the access key for later 
     SharedPreferences prefs = getSharedPreferences(ACCOUNT_PREFS_NAME, 0); 
     Editor edit = prefs.edit(); 
     edit.putString(ACCESS_KEY_NAME, key); 
     edit.putString(ACCESS_SECRET_NAME, secret); 
     edit.commit(); 
    } 

    private void clearKeys() { 
     SharedPreferences prefs = getSharedPreferences(ACCOUNT_PREFS_NAME, 0); 
     Editor edit = prefs.edit(); 
     edit.clear(); 
     edit.commit(); 
    } 
private String[] getKeys() { 
     SharedPreferences prefs = getSharedPreferences(ACCOUNT_PREFS_NAME, 0); 
     String key = prefs.getString(ACCESS_KEY_NAME, null); 
     String secret = prefs.getString(ACCESS_SECRET_NAME, null); 
     if (key != null && secret != null) { 
      String[] ret = new String[2]; 
      ret[0] = key; 
      ret[1] = secret; 
      return ret; 
     } else { 
      return null; 
     } 
    } 

을 값을 저장하고 다음과 같은 세션을 초기화하는 기능 :

public AndroidAuthSession buildSession() { 
     AppKeyPair appKeyPair = new AppKeyPair(APP_KEY, APP_SECRET); 
     AndroidAuthSession session; 

     String[] stored = getKeys(); 
     if (stored != null) { 
      AccessTokenPair accessToken = new AccessTokenPair(stored[0], 
        stored[1]); 
      session = new AndroidAuthSession(appKeyPair, ACCESS_TYPE, 
        accessToken); 
     } else { 
      session = new AndroidAuthSession(appKeyPair, ACCESS_TYPE); 
     } 
     return session; 
    } 

편집 : 당신의 onResume 기능의 변화를 다음 만들기 추가 이 3 개의 정수와 setLoggedIn (true)의 호출을 코멘트 할 수 있습니다.

final static private String ACCOUNT_PREFS_NAME = "prefs"; 
final static private String ACCESS_KEY_NAME = "ACCESS_KEY"; 
final static private String ACCESS_SECRET_NAME = "ACCESS_SECRET"; 
+0

ACCOUNT_PREFS_NAME, ACCESS_KEY_NAME 및 ACCESS_SECRET_NAME은 무엇인가요? 거기에 오류가 발생합니다. –

+0

그리고 setLoggedIn() 및 getKeys()는 무엇입니까? Android에서 제공하는 메소드입니까? 그들을 사용할 때도 오류가 발생합니다. –