2017-03-16 7 views
0

私はDropboxから写真をダウンロードする必要があるアンドロイドアプリを構築しています。しかし、毎回、ユーザーは自分自身を認証する必要があります。最初に詳細を保存し、後で必要な認証は不要にしたい。コードは次のとおりです。Androidアプリケーションを起動するたびに、Dropboxユーザーの詳細を認証しないようにする方法

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(); 
} 

これは、ユーザーをアプリに戻すためのものです。私はソリューションがこれらの2つになければならないことを知っていますが、資格情報を保存する方法を理解できません。

答えて

1

あなたのaccessTokenを共有設定/ SQLiteに保存します。

ex。

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

とgetDropboxAPI方法でこれを使用します。詳細については

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; 
} 

は、参考文献を参照してください。

link

+0

ありがとうございました。ちょうど以下を含める必要がありました: else { mDBApi.getSession()。startOAuth2Authentication(Control_Gate.this); } onResumeメソッドの –

+0

別の質問私はアンドロイドアプリケーションにメッセージを送信するためにpubnubを通過しています。私はコードをサービスに書いたが、今はAndroid OSがサービスを殺している。私もSTART_STICKYを使用していますが、サービスを何度か再起動してしまい、何らかの通知もありません。その唯一の512MBのラム。携帯電話がハングしないようにコードを置くことができる別の方法はありますか? –

+0

新しい質問を作成してください。すべての質問には新しいスレッドがありますので、SO標準に従ってください。詳細については、バックグラウンドとフォアグラウンドサービスについて読む必要があります。 –

1

はSharedPrefernceにトークンを保存し、それに応じてそれを使用しています。以下は同じもののサンプルコードです。

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によって提供されていますか?それらを使用するときにもエラーが発生する –

関連する問題