2017-07-07 1 views
1

Ich habe eine Android-App, die eine gesicherte Website in einer Webansicht aufrufen. Die Webansicht ruft das Zertifikat ab, um es der Website zu übergeben.Wie zu verhindern, ChoosePrivateKeyAlias ​​Dialog in Android App?

muss ich die KeyChain.choosePrivateKeyAlias(this, keyChainAliasCallback, null, null, null, -1, CERT_ALIAS); Methode verwenden, und dies wird ein Dialog wie dieser

certificate select

Ich möchte würde dieses Fenster anzuzeigen nur das erste Mal, wenn der Benutzer die App verwendet, aber ich don‘ Ich weiß, ob es möglich ist.

Ich sah über abfangen mit einem Gerät/Besitzer Profil. Bedeutet das, dass es auf Android-Arbeit sein sollte? Es ist ein wenig verschwommen für mich.

Eine andere Lösung wäre es, das Zertifikat und den privaten Schlüssel zu speichern, der zum ersten Mal irgendwo von keiner anderen App oder dem Benutzer zugänglich ist. Ich denke über SharedPreferences im privaten Modus nach.

Bin ich falsch?

Danke für Ihre Antworten!

Antwort

1

Ich bin nicht sicher über den guten Weg, um dieses Problem zu lösen, aber hier ist, was ich getan habe, das hat gut für mich funktioniert.

Ich habe eine boolesche Variable in den Einstellungen überprüft, und wenn false zurückgegeben wird, zeige ich das Fenster choosPrivateKeyAlias ​​an. Wenn True zurückgegeben wird, weiß ich, dass ich die Berechtigung zum direkten Abrufen des Zertifikats habe, sodass kein Popup angezeigt werden muss.

boolean isGranted = prefs.getBoolean("MY_CERT", false); 
if(!isGranted) { 
     //Get cert and private key from internal android store 
     KeyChainAliasCallback keyChainAliasCallback = new KeyChainAliasCallback() { 
      @Override 
      public void alias(@Nullable String s) { 
       Log.d(TAG, "selected alias = " + s); 
       SharedPreferences.Editor editor = getPreferences(MODE_PRIVATE).edit(); 
       editor.putBoolean("MY_CERT", true); 
       editor.commit(); 
       retriveCertsTask.execute(); 
      } 
     }; 
     KeyChain.choosePrivateKeyAlias(mActivity, keyChainAliasCallback, null, null, null, -1, CERT_ALIAS); 
    } else { 
     // Retrieve certs an private key 
     retriveCertsTask.execute(); 
    } 

Hoffe, es hilft ...

Verwandte Themen