我有两个不同的应用程序,我在后端有用户数据库,如果任何用户在一个应用程序中,他也可以登录另一个应用程序而无需登录,就像facebook一样,我如何在应用程序中实现SSO?
答案 0 :(得分: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());
}
}
答案 1 :(得分: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是否为空,如果不是,我会跳到下一个屏幕并继续使用相同的Auth令牌。