私たちは以下を使用しています:
BMSClient.getInstance().registerAuthenticationListener("realm", new CustomAuthentication(this));
と:
AuthorizationManager.createInstance(this.getApplicationContext());
AuthorizationManager.getInstance().setAuthorizationPersistencePolicy(AuthorizationManager.PersistencePolicy.ALWAYS);
電話に認証データを保存します。「認証データはローカル ストレージに保存されます」が ALWAYS に設定されています。
上記のコードは、起動時にスプラッシュスクリーンで常に実行されるため、アプリの再起動時に常に実行されます。
私たちが抱えていた問題は、トークンの有効期限が切れたと思われる時間が経過した後 (数時間または数日)、HTTP 307の形式で応答を受け取ることです。アプリを再起動した後でも、リクエストに対してこの応答を取得し続けます。それを回避する唯一の方法は、設定からアプリに入り、すべてのデータを消去することです.
次の質問は、テストと可能な解決策を進めるのに役立ちます。
- トークンが BMSClient にキャッシュされる期間はどれくらいですか? (テスト目的)
- AuthorizationManager は、トークンの新しいフェッチを強制するのに何らかの方法で役立ちますか?
- 彼らはログアウト機能に取り組んでいますか?
カスタム リスナー:
public class CustomAuth implements AuthenticationListener {
private Context activityContext;
public CustomAuth(Context activityContext) {
this.activityContext = activityContext;
}
@Override
public void onAuthenticationChallengeReceived(AuthenticationContext authContext, JSONObject challenge, Context context) {
//1. read the challenge JSONObject
//2. handle the challenge (use the context for handling UI based operations)
//3. return response using the AuthenticationContext authContext
SharedPreferences preferences = activityContext.getSharedPreferences("UserPreference", Context.MODE_PRIVATE);
String email = preferences.getString("email", "");
if(email.equals("")) {
email = "unidentified-user@error.com";
}
JSONObject jsonEmail = new JSONObject();
try {
jsonEmail.put("email", email);
} catch (JSONException e) {
authContext.submitAuthenticationChallengeAnswer(null);
}
authContext.submitAuthenticationChallengeAnswer(jsonEmail);
}
@Override
public void onAuthenticationSuccess(Context context, JSONObject info) {
//additional operations in case of authentication success
Log.d("Authentication", "Auth success: " + String.valueOf(info));
}
@Override
public void onAuthenticationFailure(Context context, JSONObject info) {
//additional operations in case of authentication failure
Log.d("Authentication", "Auth failure ." + String.valueOf(info));
}
}