現在我正在嘗試創建一個Android應用程序,假設它將會是一些「X」概念還好。所以我正在創建一個登錄屏幕。我想要做的就是立即在移動設備上登錄該應用程序時,只要我嘗試訪問該應用程序,就應該始終登錄該應用程序。如何讓android應用程序始終處於登錄狀態?
例如我們的Facebook,G郵箱和雅虎等。在我們的手機
什麼該怎麼辦?
現在我正在嘗試創建一個Android應用程序,假設它將會是一些「X」概念還好。所以我正在創建一個登錄屏幕。我想要做的就是立即在移動設備上登錄該應用程序時,只要我嘗試訪問該應用程序,就應該始終登錄該應用程序。如何讓android應用程序始終處於登錄狀態?
例如我們的Facebook,G郵箱和雅虎等。在我們的手機
什麼該怎麼辦?
使用共享首選項進行自動登錄功能。當用戶登錄到您的應用程序時,請將登錄狀態存儲到sharedPreference中,並在用戶註銷時清除sharedPreference。
檢查每次當用戶進入應用程序,如果從共享偏好用戶狀態爲真,則無需再次登錄,否則直接到登錄頁面的時間。
爲了實現這一目標首先要創建一個類,這個類,你需要寫的所有關於在sharedpreference get和set值的功能。請看下面的代碼。
public class SaveSharedPreference
{
static final String PREF_USER_NAME= "username";
static SharedPreferences getSharedPreferences(Context ctx) {
return PreferenceManager.getDefaultSharedPreferences(ctx);
}
public static void setUserName(Context ctx, String userName)
{
Editor editor = getSharedPreferences(ctx).edit();
editor.putString(PREF_USER_NAME, userName);
editor.commit();
}
public static String getUserName(Context ctx)
{
return getSharedPreferences(ctx).getString(PREF_USER_NAME, "");
}
}
現在的主要活動(「活動」,其中登錄時,用戶會被重定向)如果使用setUserName()函數,用戶登錄成功,則設置用戶名先檢查
if(SaveSharedPreference.getUserName(MainActivity.this).length() == 0)
{
// call Login Activity
}
else
{
// Stay at the current activity.
}
在登錄活動。
登錄後,當您按下回來從這個應用程序中調用moveTaskToBack(true);
會在後臺狀態。希望幫助
成功登錄後首先,保存的用戶名/電子郵件和密碼SharedPreferences
。
每當應用程序將啓動,執行代碼,用於將檢索sharedPrefernces的用戶名和密碼,然後這兩個值可以作爲參數來將所述用戶認證的方法來傳遞。
您只需要保存cookie或散列或標識會話的內容......將用戶和密碼保存在明顯的位置不會有利於安全... – tyoc213
您可能會增加對註銷操作下在SaveSharedPreference.java:
public static void clearUserName(Context ctx)
{
Editor editor = getSharedPreferences(ctx).edit();
editor.clear(); //clear all stored data
editor.commit();
}
始終每當...所以這似乎是一個自動登錄的方法。 應用程序啓動後,用戶在提供授權信息後不必再次登錄。有幾種方法可以實現這一點。 Facebook API例如提供了不使用表單元素的登錄機制。 因此,您基本上必須構建一個視圖,在該視圖中用戶可以提供一次授權信息,將它們存儲在SharedPreferences中,並在下次自動登錄。 即使沒有這樣的基於API的登錄,並且您必須使用提供的登錄表單,您有時也可以模擬POST請求登錄。這取決於該表單的實際服務器端實現。 但請記住:這是一個安全問題。因此絕不要以明文形式存儲授權憑證。不要依靠應用程序中定義的密鑰來加密,因爲通過對APK進行反向工程可以檢測到此密鑰。而是使用許多關於設備的集體信息以及用戶必須輸入的密鑰或由應用程序隨機生成並存儲的密鑰。
使用SharedPreferences是一種在Android中保存和檢索鍵值對數據並在整個應用程序中保持會話的方法。
不同,需要採取以下步驟SharedPreferences工作:通過傳遞兩個參數的構造
份額SharedPreferences接口的初始化階段(字符串和整數)
// Sharedpref file name
private static final String PREF_NAME = "PreName";
// Shared pref mode
int PRIVATE_MODE = 0;
//初始化SharedPreferences SharedPreferences pref = getApplicationContext()。getSharedPreferences(「MyPref」,0); // 0 - 用於私人模式
使用編輯器界面和它的方法來修改SharedPreferences值和用於存儲數據供將來檢索
//Initialising the Editor
Editor editor = pref.edit();
editor.putBoolean("key_name", true); // Storing boolean - true/false
editor.putString(「KEY_NAME」,「字符串值」) ; //存儲字符串 editor.putInt(「key_name」,「int value」); //存儲整數 editor.putFloat(「key_name」,「float value」); //存儲浮點數 editor.putLong(「key_name」,「long value」); //長存
editor.commit(); //提交更改
檢索數據
數據可以從保存的喜好通過調用的getString()(對於字符串)方法來提取。請記住,此方法應在共享首選項上調用,而不是在編輯器上調用
// returns stored preference value
// If value is not present return second param value - In this case null
pref.getString("key_name", null); // getting String
pref.getInt("key_name", null); // getting Integer
pref.getFloat("key_name", null); // getting Float
pref.getLong("key_name", null); // getting Long
pref.getBoolean("key_name", null); // getting boolean
如果你想從共享偏好可以調用刪除(「KEY_NAME」刪除)刪除該特定值。如果你想刪除所有數據,調用clear()
editor.remove("name"); // will delete key name
editor.remove("email"); // will delete key email
editor.commit(); // commit changes
Following will clear all the data from shared preferences
editor.clear();
editor.commit(); // commit changes
請按照下面的鏈接下載一個簡單明瞭的例子: http://www.androidhive.info/2012/08/android-session-management-using-shared-preferences/
我希望我沒有違背規則和分享此鏈接的平臺的法規。
//This is my SharedPreferences Class
import java.util.HashMap;
import android.annotation.SuppressLint;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
public class SessionManager {
// Shared Preferences
SharedPreferences pref;
// Editor for Shared preferences
Editor editor;
// Context
Context _context;
// Shared pref mode
int PRIVATE_MODE = 0;
// Sharedpref file name
private static final String PREF_NAME = "AndroidHivePref";
// All Shared Preferences Keys
private static final String IS_LOGIN = "IsLoggedIn";
// User name (make variable public to access from outside)
public static final String KEY_NAME = "name";
// Email address (make variable public to access from outside)
public static final String KEY_EMAIL = "email";
// Constructor
@SuppressLint("CommitPrefEdits")
public SessionManager(Context context) {
this._context = context;
pref = _context.getSharedPreferences(PREF_NAME, PRIVATE_MODE);
editor = pref.edit();
}
/**
* Create login session
*/
public void createLoginSession(String name, String email) {
// Storing login value as TRUE
editor.putBoolean(IS_LOGIN, true);
// Storing name in pref
editor.putString(KEY_NAME, name);
// Storing email in pref
editor.putString(KEY_EMAIL, email);
// commit changes
editor.commit();
}
/**
* Check login method wil check user login status If false it will redirect
* user to login page Else won't do anything
*/
public void checkLogin() {
// Check login status
if (!this.isLoggedIn()) {
// user is not logged in redirect him to Login Activity
Intent i = new Intent(_context, MainActivity.class);
// Closing all the Activities
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
// Add new Flag to start new Activity
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
// Staring Login Activity
_context.startActivity(i);
}
}
/**
* Get stored session data
*/
public HashMap<String, String> getUserDetails() {
HashMap<String, String> user = new HashMap<String, String>();
// user name
user.put(KEY_NAME, pref.getString(KEY_NAME, null));
// user email id
user.put(KEY_EMAIL, pref.getString(KEY_EMAIL, null));
// return user
return user;
}
/**
* Clear session details
*/
public void logoutUser() {
// Clearing all data from Shared Preferences
editor.clear();
editor.commit();
// After logout redirect user to Loing Activity
Intent i = new Intent(_context, MainActivity.class);
// Closing all the Activities
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
// Add new Flag to start new Activity
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
// Staring Login Activity
_context.startActivity(i);
}
/**
* Quick check for login
**/
// Get Login State
public boolean isLoggedIn() {
return pref.getBoolean(IS_LOGIN, false);
}
}
Finally, you will have to create an instance of this SessionManager class in the onCreate method of your activity class and then call the createLoginSession for the session that will be used throughout the entire session
// Session Manager Class
SessionManager session;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Session Manager
session = new SessionManager(getApplicationContext());
session.createLoginSession("Username", intentValue);
}
我希望它有幫助。
Xamarin.Android
端口奇拉格拉瓦爾的和LINTUism的答案:
public class SharedPreference
{
static ISharedPreferences get(Context ctx)
{
return PreferenceManager.GetDefaultSharedPreferences(ctx);
}
public static void SetUsername(Context ctx, string username)
{
var editor = get(ctx).Edit();
editor.PutString("USERNAME", username);
editor.Commit();
}
public static string GetUsername(Context ctx)
{
return get(ctx).GetString("USERNAME", "");
}
public static void Clear(Context ctx)
{
var editor = get(ctx).Edit();
editor.Clear();
editor.Commit();
}
}
能否請你給我ATLEAST一個示例程序 – Rohith
當我做到這一點,並嘗試重新登錄,它返回null – Sauron
thi是非常不安全的,因爲您可以在根用電話上訪問共享首選項作爲xml文件 – Choletski