1. 程式人生 > >Bmob 開發 Android程式快速入門 9 使用者管理

Bmob 開發 Android程式快速入門 9 使用者管理

                     Bmob 開發 Android程式快速入門 9 使用者管理

 

 

使用者管理

   使用者是一個應用程式的核心。對於個人開發者來說,自己的應用程式積累到越多的使用者,就會給自己帶來越強的創作動力。因此Bmob提供了一個專門的使用者類——BmobUser來自動處理使用者賬戶管理所需的功能。

有了這個類,你就可以在你的應用程式中新增使用者賬戶功能。

BmobUser是BmobObject的一個子類,它繼承了BmobObject所有的方法,具有BmobObject相同的功能。不同的是,BmobUser增加了一些特定的關於使用者賬戶管理相關的功能。

 

屬性

BmobUser除了從BmobObject繼承的屬性外,還有幾個特定的屬性: username: 使用者的使用者名稱(必需)。 password: 使用者的密碼(必需)。 email: 使用者的電子郵件地址(可選)

 

擴充套件使用者類

很多時候,你的使用者表還會有很多其他欄位,如性別、年齡、頭像等。那麼,你需要對BmobUser類進行擴充套件,新增一些新的屬性。示例程式碼如下所示:

public class SpecialUser extends BmobUser {

    private boolean sex;
    private String nick;

    public boolean getSex() {
        return this.sex;
    }

    public void setSex(boolean sex) {
        this.sex = sex;
    }

    public String getNick() {
        return this.sex;
    }

    public void setNick(String nick) {
        this.nick = nick;
    }
}

更多程式碼實現大家可以下載SDK,在裡面的BmobExample中查詢MyUser類,參考它的用法。

 

建立使用者物件

建立使用者物件如下:

BmobUser user = new BmobUser();

 

註冊使用者

你的應用程式可能會要求使用者註冊。下面的程式碼是一個典型的註冊過程:

BmobUser bu = new BmobUser();
bu.setUsername("sendi");
bu.setPassword("123456");
bu.setEmail("[email protected]");
bu.signUp(this, new SaveListener() {
    @Override
    public void onSuccess() {
        // TODO Auto-generated method stub
        toast("註冊成功:");
    }
    @Override
    public void onFailure(int code, String msg) {
        // TODO Auto-generated method stub
        toast("註冊失敗:"+msg);
    }
});

在註冊過程中,伺服器會對註冊使用者資訊進行檢查,以確保註冊的使用者名稱和電子郵件地址是獨一無二的。此外,對於使用者的密碼,你可以在應用程式中進行相應的加密處理後提交。

如果註冊不成功,你可以檢視返回的錯誤物件。最有可能的情況是,使用者名稱或電子郵件已經被另一個使用者註冊。這種情況你可以提示使用者,要求他們嘗試使用不同的使用者名稱進行註冊。

你也可以要求使用者使用Email做為使用者名稱註冊,這樣做的好處是,你在提交資訊的時候可以將輸入的“使用者名稱“預設設定為使用者的Email地址,以後在使用者忘記密碼的情況下可以使用Bmob提供重置密碼功能。

這裡有兩點需要注意的:

  • 有些時候你可能需要在使用者註冊時傳送一封驗證郵件,以確認使用者郵箱的真實性。這時,你只需要登入自己的應用管理後臺,在應用設定->郵件設定(下圖)中把“郵箱驗證”功能開啟,Bmob雲後端就會在註冊時自動發動一封驗證給使用者。

  • username欄位是大小寫敏感的欄位,如果你希望應用的使用者名稱不區分大小寫,請在註冊和登入時進行大小寫的統一轉換。

 

登入使用者

當用戶註冊成功後,您需要讓他們以後能夠用註冊的使用者名稱登入到他們的賬戶使用應用。要做到這一點,你可以使用BmobUser類的login方法。

BmobUser bu2 = new BmobUser();
bu2.setUsername("lucky");
bu2.setPassword("123456");
bu2.login(this, new SaveListener() {
    @Override
    public void onSuccess() {
        // TODO Auto-generated method stub
        toast("登入成功:");
    }
    @Override
    public void onFailure(int code, String msg) {
        // TODO Auto-generated method stub
        toast("登入失敗:"+msg);
    }
});

 

獲取當前使用者

如果使用者在每次開啟你的應用程式時都要登入,這將會直接影響到你應用的使用者體驗。為了避免這種情況,你可以使用快取的CurrentUser物件。

每當你應用的使用者註冊成功或是第一次登入成功,都會在本地磁碟中有一個快取的使用者物件,這樣,你可以通過獲取這個快取的使用者物件來進行登入:

BmobUser bmobUser = BmobUser.getCurrentUser(this);
if(bmobUser != null){
    // 允許使用者使用應用
}else{
    //快取使用者物件為空時, 可開啟使用者註冊介面…
}

在擴充套件了使用者類的情況下獲取當前登入使用者,可以使用如下的示例程式碼(SpecialUser類可參看上面):

SpecialUser userInfo = BmobUser.getCurrentUser(this,SpecialUser.class);

 

退出登入

退出登入非常簡單,可以使用如下的程式碼:

BmobUser.logOut(this);   //清除快取使用者物件
BmobUser currentUser = BmobUser.getCurrentUser(this); // 現在的currentUser是null了

 

更新使用者

很多情況下你可能需要修改使用者資訊,比如你的應用具備修改個人資料的功能,Bmob提供的使用者更新方式有兩種寫法:

第一種:新建一個使用者物件,並呼叫update(context,objectId,updateListener)方法來更新(推薦使用),示例:

BmobUser newUser = new BmobUser();
newUser.setEmail("[email protected]");
BmobUser bmobUser = BmobUser.getCurrentUser(this);
newUser.update(this,bmobUser.getObjectId(),new UpdateListener() {
    @Override
    public void onSuccess() {
        // TODO Auto-generated method stub
        toast("更新使用者資訊成功:");
    }
    @Override
    public void onFailure(int code, String msg) {
        // TODO Auto-generated method stub
        toast("更新使用者資訊失敗:" + msg);
    }
});

 

第二種:獲取本地的使用者物件,並呼叫update(context,updateListener)方法來更新(不推薦使用),示例:

BmobUser bmobUser = BmobUser.getCurrentUser(this);
// 修改使用者的郵箱為[email protected]
bmobUser.setEmail("[email protected]");
bmobUser.update(this,new UpdateListener() {
    @Override
    public void onSuccess() {
        // TODO Auto-generated method stub
        toast("更新使用者資訊成功:");
    }
    @Override
    public void onFailure(int code, String msg) {
        // TODO Auto-generated method stub
        toast("更新使用者資訊失敗:" + msg);
    }
});

1、開發者在進行使用者更新操作的時候,推薦使用第一種方式來進行使用者的更新操作,因為此方法只會更新你提交的使用者資訊(比如只會向伺服器提交當前使用者的email值),而不會將本地儲存的使用者資訊也提交到後臺更新。

2、在更新使用者資訊時,如果使用者郵箱有變更並且在管理後臺打開了郵箱驗證選項的話,Bmob雲後端同樣會自動發一封郵件驗證資訊給使用者。

 

查詢使用者

查詢使用者和查詢普通物件一樣,只需指定BmobUser類即可,如下:

BmobQuery<BmobUser> query = new BmobQuery<BmobUser>();
query.addWhereEqualTo("username", "lucky");
query.findObjects(this, new FindListener<BmobUser>() {
    @Override
    public void onSuccess(List<BmobUser> object) {
        // TODO Auto-generated method stub
        toast("查詢使用者成功:"+object.size());
    }
    @Override
    public void onError(int code, String msg) {
        // TODO Auto-generated method stub
        toast("查詢使用者失敗:"+msg);
    }
});

瀏覽器中檢視使用者表

User表是一個特殊的表,專門儲存BmobUser物件。在瀏覽器端,你會看到一個User表旁邊有一個小人的圖示。

 

密碼重置

一旦你引入了一個密碼系統,那麼肯定會有使用者忘記密碼的情況。對於這種情況,我們提供了一種方法,讓使用者安全地重置起密碼。

重置密碼的流程很簡單,開發者只需要求使用者輸入註冊的電子郵件地址即可:

final String email = "[email protected]";
BmobUser.resetPassword(this, email, new ResetPasswordListener() {
    @Override
    public void onSuccess() {
        // TODO Auto-generated method stub
        toast("重置密碼請求成功,請到" + email + "郵箱進行密碼重置操作");
    }
    @Override
    public void onFailure(int code, String e) {
        // TODO Auto-generated method stub
        toast("重置密碼失敗:" + e);
    }
});

密碼重置流程如下:

  1. 使用者輸入他們的電子郵件,請求重置自己的密碼。
  2. Bmob向他們的郵箱傳送一封包含特殊的密碼重置連線的電子郵件。
  3. 使用者根據嚮導點選重置密碼連線,開啟一個特殊的Bmob頁面,根據提示他們可以輸入一個新的密碼。
  4. 使用者的密碼已被重置為新輸入的密碼。

 

找回密碼

為方便大家瞭解如何用Bmob開發找回密碼的功能,我們為大家準備了另外一份文件,詳細見我們在Github中的文件:

https://github.com/bmob/bmob-cloudcode-demo/blob/master/HOW-TO-FIND-PASSWORD.md

郵箱驗證

設定郵件驗證是一個可選的應用設定, 這樣可以對已經確認過郵件的使用者提供一部分保留的體驗,郵件驗證功能會在使用者(User)物件中加入emailVerified欄位, 當一個使用者的郵件被新新增或者修改過的話,emailVerified會被預設設為false,如果應用設定中開啟了郵箱認證功能,Bmob會對使用者填寫的郵箱傳送一個連結, 這個連結可以把emailVerified設定為 true.

emailVerified 欄位有 3 種狀態可以考慮:

  • true : 使用者可以點選郵件中的連結通過Bmob來驗證地址,一個使用者永遠不會在新建立這個值的時候顯示emailVerified為true。
  • false : 使用者(User)物件最後一次被重新整理的時候, 使用者並沒有確認過他的郵箱地址, 如果你看到emailVerified為false的話,你可以考慮重新整理使用者(User)物件。
  • missing : 使用者(User)物件已經被建立,但應用設定並沒有開啟郵件驗證功能; 或者使用者(User)物件沒有email郵箱。

請求驗證Email

傳送給使用者的郵箱驗證郵件會在一週內失效,可以通過呼叫 requestEmailVerify 來強制重新發送:

final String email = "[email protected]";
BmobUser.requestEmailVerify(this, email, new EmailVerifyListener() {
    @Override
    public void onSuccess() {
        // TODO Auto-generated method stub
        toast("請求驗證郵件成功,請到" + email + "郵箱中進行啟用。");
    }
    @Override
    public void onFailure(int code, String e) {
        // TODO Auto-generated method stub
        toast("請求驗證郵件失敗:" + e);
    }
});

 

第三方賬號登陸

Bmob提供了非常簡單的方法來實現使用第三方賬號登陸的功能,目前支援新浪微博、QQ賬號的登陸。

新浪微博賬號登陸

使用新浪微博賬號登陸,需要先在新浪微博開放平臺中建立應用並得到appkey和redirectUrl,在新浪微博開放平臺建立應用的步驟可以參考新浪微博提供的開發文件。然後將新浪微博提供的SDK和BmobSDK一樣放入自己專案的libs目錄中。接下來就是在程式中呼叫BmobSDK提供的方法了。示例程式碼如下:

BmobUser.weiboLogin(this, "appkey", "redirectUrl", new OtherLoginListener() {
    @Override
    public void onSuccess(JSONObject userAuth) {
        // TODO Auto-generated method stub
        toast("第三方登陸成功:"+userAuth);
    }

    @Override
    public void onFailure(int code, String msg) {
        // TODO Auto-generated method stub
        toast("第三方登陸失敗:"+msg);
    }
});

QQ賬號登陸

使用QQ賬號登陸,同樣也需要在騰訊開放平臺中建立應用並得到appid,在騰訊開放平臺建立應用的步驟可以參考騰訊開放平臺提供的開發文件。然後將騰訊提供的SDK和BmobSDK一樣放入自己專案的libs目錄中。使用騰訊SDK還需要在AndroidManifest.xml檔案中新增相應的配置如下:

<!-- qq回撥需要註冊該activity -->
<activity
    android:name="com.tencent.connect.common.AssistActivity"
    android:configChanges="orientation|keyboardHidden"
    android:screenOrientation="portrait"
    android:theme="@android:style/Theme.Translucent.NoTitleBar" />

<!-- qq授權需要註冊該activity -->
<activity
    android:name="com.tencent.tauth.AuthActivity"
    android:launchMode="singleTask"
    android:noHistory="true" >
    <intent-filter>
        <action android:name="android.intent.action.VIEW" />

        <category android:name="android.intent.category.DEFAULT" />
        <category android:name="android.intent.category.BROWSABLE" />

        <data android:scheme="tencent你的AppId" />
    </intent-filter>
</activity>

最後是在程式中呼叫BmobSDK提供的方法了,示例程式碼如下:

BmobUser.qqLogin(this, "appid", new OtherLoginListener() {
    @Override
    public void onSuccess(JSONObject userAuth) {
        // TODO Auto-generated method stub
        toast("第三方登陸成功:"+userAuth.toString());
    }

    @Override
    public void onFailure(int code, String msg) {
        // TODO Auto-generated method stub
        toast("第三方登陸失敗:"+msg);
    }
});

 

第三方賬號與BmobUser繫結

如果你的應用中有其他功能已經使用到了相關第三方平臺的功能,比如社交分享功能,那麼你可以將已經得到的使用者授權資訊傳遞給BmobSDK來便捷地與BmobUser進行繫結。以下程式碼展示了將第三方賬號和已經存在的BmobUser物件進行繫結:

BmobUser.associateWithAuthDate(this, BmobUser.getCurrentUser(this), userAuth, new UpdateListener() {
    @Override
    public void onSuccess() {
        // TODO Auto-generated method stub

    }

    @Override
    public void onFailure(int code, String msg) {
        // TODO Auto-generated method stub

    }
});

以上程式碼中的引數userAuth是由開發者構造的JSONObject格式的第三方平臺授權資訊,相關平臺的授權資訊格式如下所示: 新浪微博的userAuth內容:

{"weibo": {
      "uid": "145785469",
            "access_token": "2.00vs9yFCI8FrHCba4951pdq5vn1slZ",
            "expiration_in": "78000"
    }
}

QQ的userAuth內容:

{"qq": {
      "openid": "AAC61872C459FB196AECFA9D6FEBA334",
      "access_token": "19A1E9FB3E440B4D15DBB44a39946FD4",
      "expires_in": 7776000
    }
}

 

解除繫結

解除第三方賬號與BmobUser的繫結關係如下程式碼所示:

BmobUser.dissociateAuthData(this, BmobUser.getCurrentUser(this), new UpdateListener() {
    @Override
    public void onSuccess() {
        // TODO Auto-generated method stub
        toast("解除繫結成功");
    }

    @Override
    public void onFailure(int code, String msg) {
        // TODO Auto-generated method stub
        toast("解除繫結失敗:"+msg);
    }
});

第三方登入的案例原始碼

大家可以下載我們提供的案例原始碼:https://github.com/bmob/bmob-android-demo-thirdpartylogin 這個原始碼包含了第三方登入的原始碼和登入之後如何獲取使用者基本資訊的部分。

 

希望對你有幫助。