2013-02-17 3 views
0

Android Dropbox API를 사용하고 있습니다. 내 응용 프로그램의 주요 활동에서, 나는 dropbox API에 대한 인증 호출을하고 있습니다. 문제는 앱이 시작될 때마다 사용자가 앱이 드롭 보관함에 액세스 할 수있는 권한을 부여하도록 '허용'해야한다는 것입니다. 내 코드는 다음과 같습니다 :유효한 보관 용 계정 사용자 세션을 확인하는 방법은 무엇입니까?

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    getWindow().requestFeature(Window.FEATURE_NO_TITLE); 
    setContentView(R.layout.main); 



    //clearKeys(); 
    //Log.e(TAG, "keys cleared"); 

    AppKeyPair appKeys = new AppKeyPair(APP_KEY, APP_SECRET); 
    AndroidAuthSession session = new AndroidAuthSession(appKeys, ACCESS_TYPE); 




    mDBApi = new DropboxAPI<AndroidAuthSession>(session); 

    mDBApi.getSession().startAuthentication(Main.this); 
    Log.e(TAG, "started authentication"); 





protected void onResume() { 
    super.onResume(); 



    if (mDBApi.getSession().authenticationSuccessful()) { 
     try { 
      // MANDATORY call to complete auth. 
      // Sets the access token on the session 
      mDBApi.getSession().finishAuthentication(); 

      if(mDBApi.getSession().authenticationSuccessful()){ 
      Log.e(TAG, "Authentication finished"); 
      } 
      AccessTokenPair tokens = mDBApi.getSession().getAccessTokenPair(); 

      // Provide your own storeKeys to persist the access token pair 
      // A typical way to store tokens is using SharedPreferences 
      storeKeys(tokens.key, tokens.secret); 
     } catch (IllegalStateException e) { 
      Log.i("DbAuthLog", "Error authenticating", e); 
     } 
    } 


}//end of onResume() 

내가 앱이 그런 경우가 있다면 그래서 인증을 우회 할 수 auth'd 것을 알 수있는 방법을 찾을 필요가있다. 나는이 시점에서 어떻게 그것에 대해 가야할지 모르겠다. 아무도 도와 줄 수 있습니까?

답변

4

인증하기 전에 확인합니다. 이렇게하려면 OAuth를 통해 공개 된 메소드 중 하나에 대한 권한이 부여 된 요청 만하면됩니다. 짧고 간단한 결과를 가져 오는 방법을 호출하는 것이 가장 좋습니다. 유효하지 않거나 만료 된 토큰으로 인해이 호출이 실패하면 인증으로 진행하십시오. 이 시점에서 저장된 토큰을 업데이트하면 나머지는 이전과 같이 작동합니다.

+0

저장된 액세스 토큰이 유효한지 확인하는 방법은 무엇입니까? –

+0

@ShajeelAfzal "OAuth를 통해 노출 된 메소드 중 하나에 대해 승인 된 요청을하십시오."- https://api.dropbox.com/1/account/info에 요청하여 대답을 얻을 수 있는지 확인하십시오. –

+0

안녕하세요! 답변 해주셔서 감사합니다. 내가 안드로이드에 대한 Dropbox 코어 라이브러리를 사용하고, 여전히 내가 api.dropbox.com/1/account/info를 사용해야합니까 아니면 당신이 동일한 일을 할 수있는 핵심 라이브러리에서 어떤 방법을 아십니까? –

2

SDK를 사용해 보셨습니까?

동기화 API 광고 SDK : 드롭 박스에 https://www.dropbox.com/developers/sync/tutorial/android

에서 인증하는 ". 보관 용 사용자가 링크 된"

이 작업이 완료되면, 당신은 로그 캣 의 정보 레벨 메시지 말을 볼 수 사용자는 을 한 번만 수행하면 SDK가 사용자 토큰을 캐시에 저장합니다. 앱이 다시 시작되면 hasLinkedAccount를 호출하여 에 의해 이미 연결되어 있는지 확인할 수 있습니다.

업데이트 :

코어 API의 SDK : https://www.dropbox.com/developers/core/setup#android

연결 자바 문서는 여기에서 찾을 :

: https://www.dropbox.com/static/developers/dropbox-android-sdk-1.5.3-docs/index.html

사용자 인증 후 앱으로 연결 반환에

finishAuthentication() 메소드는 사용자의 액세스 토큰 을 세션에 바인딩합니다. 이제 mDBApi.getSession(). getAccessTokenPair()를 통해 검색 할 수 있습니다.

앱이 닫힌 후에이 토큰이 다시 필요하므로 나중에 액세스 할 때 저장하려면이 메시지를 저장하는 것이 중요합니다 ( ). 그렇게하지 않으면 사용자가 앱에서 보관 용 계정에 액세스 할 때마다 다시 인증해야합니다.

키 저장을 구현하는 일반적인 방법은 Android의 SharedPreferences API를 사용하는 것입니다. 방법을 알아 보려면 Android 설명서를 확인하세요. 그 동안 편의상 위 코드 은 storeKeys 함수가 에 사용하려는 모든 메소드를 호출하여 더 영구적 인 위치에 키를 저장하는 것으로 가장합니다.

편집 : storeKeys의

구현 : 저장된 액세스 토큰이 여전히 유효한 경우 (있는 경우 물론,)

public static boolean storeKeys(String key, String secret) { 
    SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(this); // this refers to context 
    SharedPreferences.Editor editor = settings.edit(); 
    editor.putString("key", key); 
    editor.putString("secret", secret); 
    return editor.commit(); 
} 
+0

동기화 API 용입니다. 나는 핵심 API를 사용하고있다. 그래도 고마워. –

+0

누구나 이벤트 리스너를 경험 한 적이 있습니까? onCreate에 대한 리스너를 어떻게 든 추가하여이 작업을 수행 할 수 있습니까? –

+0

열쇠는'storeKeys (tokens.key, tokens.secret); 인 것 같아요. 나는 스스로 구현해야하고이 두 값을 저장하기 위해'SharedPreferences'를 사용해야합니다. 그래서 onCreate가 존재하는지 확인하고 실패 (네트워크 실패 제외)가 승인을 다시 요청하면 다음 단계로 계속 진행하십시오. – madlymad

관련 문제