2015-11-17 66 views
1

我有兩個不同的應用程序,我在後端有用戶數據庫,如果有任何用戶在一個應用程序中登錄,他也可以登錄另一個應用程序,而不必按登錄,就像Facebook一樣,我怎麼能在應用程序中實施SSO?如何在Android應用程序中實現SSO

回答

0

你可以做到這一點使用Content Provider還您使用Shared preferences

這裏使用共享偏好可以做同樣的是例如: 呼叫用戶時,一個應用程序中記錄此方法。

public void writeSSOInfo(){ 
      SharedPreferences prefs = getSharedPreferences("CheckSSO",Context.MODE_WORLD_READABLE); 
      SharedPreferences.Editor editor = prefs.edit(); 
     if(userLoggedIn){ 
      editor.putBoolean("isLoggedIn", true); 
      }else{ 
      editor.putBoolean("isLoggedIn", false); 
       } 
      editor.commit(); 
     } 

保存在共享內存後,您可以使用下面的方法訪問另一個應用程序中的相同細節。

public void readSSOInfo(){ 
    Context con; 
    try { 
     con = createPackageContext("com.app.packagename1", 0); 
     SharedPreferences pref = con.getSharedPreferences("CheckSSO", Context.MODE_PRIVATE); 
     dataShared = pref.getBoolean("isLoggedIn", false); 
    } 
    catch (Exception e) { 
     Log.e("Not data shared", e.toString()); 
    } 
} 
+0

但它可能是一個安全問題... @Madhukar –

+0

除非有人知道確切的包名和共享密鑰。共享密鑰可以使用我已經使用的md5算法進行加密/解密。 –

+0

有什麼叫Keychain ...有沒有實現鏈接? –

0

我的建議是在您使用任何應用程序登錄後,我會在兩個應用程序之間的SharedPreferences中存儲用戶令牌。然後,在這兩個應用類似這樣的onCreate方法獲得它:

String PACKAGE_NAME = "your.package"; 
String PREFERENCE_NAME = "user-token"; 
String USER_TOKEN = ""; 

try { 
     myContext = createPackageContext(PACKAGE_NAME,Context.MODE_WORLD_WRITEABLE);    
     SharedPreferences sharedPrefs = myContext.getSharedPreferences(PREFERENCE_NAME, Context.MODE_WORLD_READABLE); 
     USER_TOKEN = sharedPrefs.getString(PREFERENCE_NAME, ""); 
     } 
catch (NameNotFoundException e) {  
     e.printStackTrace(); 
     } 

然後檢查USER_TOKEN爲空,如果不是我會跳到下一個畫面,並繼續使用相同的身份驗證令牌。

相關問題