ثبت‌نام/ورود - Unity

در این بخش قصد داریم اعمال ساده‌ای را که برای کار با کاربر مورد نیاز اپلیکیشن‌های شماست، به همراه مثال نشان دهیم. همه اعمالی که به کاربر مرتبط است در کلاس BacktoryUser قرار گرفته است و شما تقریبا در همه مثال‌ها آن را خواهید دید.

پیش‌نیازها

  1. شما با سرویس کاربران بکتوری آشنایی دارید. در غیر این صورت به معرفی سرویس کاربران مراجعه کنید.
  2. راه‌اندازی SDK بکتوری در یونیتی انجام شده است.

ثبت‌نام

با استفاده از این سرویس، کاربر می تواند پس از وارد کردن اطلاعات خود، در سیستم ثبت‌نام کند. معمولاً کاربر برای ثبت‌نام لازم است که حداقل نام‌کاربری و رمز عبور خود را وارد کند. در صورتی که کاربران شما ایمیل خود را نیز وارد می‌کنند و می‌خواهید حتما ایمیل‌ها تایید شده باشند لازم است که برای پروژه خود، تایید ثبت‌نام از طریق ایمیل را فعال کنید. با این کار کاربرانی که ثبت‌نام می‌کنند تا زمانی که از طریق ایمیل، ثبت‌نام خود را تایید نکنند، در سیستم غیر‌فعال هستند. در پروژه‌هایی که گزینه تایید ایمیل (از طریق پنل بکتوری) فعال نباشد، همه کاربران به محض ثبت‌نام (و بدون نیاز به تایید از طریق ایمیل) فعال می‌گردند.

برای ثبت‌نام با نام‌کاربری و گذرواژه، سرویس زیر در کلاس BacktoryUser را استفاده می‌کنیم.

// First create a user and fill his/her data
BacktoryUser newUser = new BacktoryUser {
    FirstName = "FirstName",
    LastName = "LastName",
    Username = usernameInput.text,
    Email = emailInput.text,
    Password = passwordInput.text,
    PhoneNumber = "09121234567",
    Avatar = "mydomain.com/avatar.png"
};
// Registring user to backtory (in background)
newUser.RegisterInBackground(response =>
{
    // Checking result of operation
    if (response.Successful) {
        Debug.Log("Register Success; new username is " + response.Body.Username);
    }
    else if (response.Code == (int) BacktoryHttpStatusCode.Conflict) {
        // Username is invalid
        Debug.Log("Bad username; a user with this username already exists.");
    }
    else {
        // General failure
        Debug.Log("Registration failed; for network or some other reasons.");
    }
});

همانطور که در مثال بالا می‌بینید در حالتی که عملیات موفق نباشد کد خطایی به شما بازگردانده خواهد شد که از طریق response.Code قابل دسترس است. برای سرویس ثبت‌نام انواع کدهای جواب ممکن به صورت جدول زیر است:

Tables Description
201-Created Successful registration
404-Not Found Your Authentication-Id is wrong
409-Conflict User with same username already exists
500-Internal Server Error Data access was unsuccessful
503-Service Unavailable Your service is disabled

ورود کاربر

در SDK شما می‌توانید به سادگی با داشتن نام‌کاربری و رمزعبور کاربر وارد شوید. در صورتی که به صورت شخصی تمایل دارید به مکانیزم امنیتی بکتوری به صورت عمیق‌تر و دقیق آشنا شوید، فرآیند امنیتی ورود کاربران را مطالعه کنید. آن چیزی که در SDK لازم است بدانید این است که به کمک LoginInBackground می‌توانید کاربر دلخواه خود را در اپلیکیشن وارد کنید. تکه کد زیر یک نمونه ساده از این کار را نشان می‌دهد:

// Fetch username/password from UI or anywhere you desire
string username = "mohx";
string password = "123456";

// Pass user info to login
BacktoryUser.LoginInBackground(username, password, loginResponse => {

    // Login operation done (fail or success), handling it:
    if (loginResponse.Successful) {
        // Login successful
        Debug.Log("Welcome " + username);
    } 
    else if (loginResponse.Code == (int) BacktoryHttpStatusCode.Unauthorized) {
        // Username 'mohx' with password '123456' is wrong
        Debug.Log("Either username or password is wrong.");
    }
    else {
        // Operation generally failed, maybe internet connection issue
        Debug.Log("Login failed for other reasons like network issues.");
    }
});

پس از ورود به بکتوری، کاربر شما تا دو ماه معتبر خواهد بود و پس از آن باید ورود مجدد انجام دهد. در این مدت در صورتی که شما خود او را خارج (با فراخوانی Logout) نکنید، در SDK به عنوان کاربر فعلی خواهد ماند.

همانطور که در کد بالا دیده می‌شود، در حالتی که مقدار Successful برابر با true باشد، عملیات ورود با موفقیت انجام شده است.در غیر این صورت مقدار loginResponse.Code نمایانگر نوع خطا است. مقادیر مختلفی که loginResponse.Code می‌تواند داشته باشد به صورت زیر است:

Tables Description
200-OK Login was successful
401-Unauthorized Username or password is incorrect
417-Expectation Failed InstanceId or ClientKey does not match
500-Internal Server Error Data access was unsuccessful
503-Service Unavailable Your service is disabled

گرفتن اطلاعات کاربر فعلی

بعد از انجام عملیات login شما میتوانید به اطلاعات کاربر وارد شده دسترسی داشته باشید. کافی است به ویژگی CurrentUser از کلاس BacktoryUser دست پیدا کنید.

// Get current user of system
BacktoryUser currentUser = BacktoryUser.CurrentUser;

string firstName = currentUser.FirstName;
string lastName = currentUser.LastName;
string username = currentUser.Username;
string userID = user.UserId;

هر بار که شما کاربر فعلی بکتوری را خروج کنید و یا اطلاعات او را به روزرسانی کنید مقدار CurrentUser نیز متناسب با تغییرات تغییر خواهد کرد.

ویرایش/به‌روزرسانی پروفایل کاربر

کاربر اپلیکیشن شما می‌تواند اطلاعات خود شامل نام کاربری، نام، نام خانوادگی، ایمیل و شماره تلفن خود را به دلخواه تغییر دهد. لازم به ذکر است که تغییر رمزعبور نیز به دلیل امنیتی در تابع مجزایی امکان‌پذیر است و در این تابع امکان تغییر آن نیست. برای تغییر پروفایل خود کافیست به سادگی موجود BacktoryUser را تغییر داده و فرمان update بدهید. تکه کد زیر یک نمونه ساده از انجام این کار است:

// Get current user of system
BacktoryUser currentUser = BacktoryUser.CurrentUser;

// Change his/her profile
currentUser.FirstName = "my new first-name";
currentUser.LastName = "my new last-name";
currentUser.UserName  = "my new user-name";

// Send update command to backtory servers
currentUser.UpdateUserInBackground(updatedUserResponse =>
{
	// Checking whether operation was OK or not.
	if (updatedUserResponse.Successful) {
	    // It was OK :)
	    Debug.Log("Your user updated successfully.");
	}
	else {
	    // It failed. :(
	    Debug.Log("Request failed.");
	}
});

در صورتی که خطایی ایجاد شود و یا مشکلی وجود داشته باشد، عبارت updatedUserResponse.code نوع خطا را مشخص خواهد کرد که یکی از مقادیر زیر خواهد بود:

Tables Description
200-OK Login was successfull
400-Bad Request Invalid email address. Or firstname, lastname, or username length is more than 40 characters.
401-Unauthorized Username or password is incorrect
417-Expectation Failed InstanceId or ClientKey does not match
500-Internal Server Error Data access was unsuccessful
503-Service Unavailable Your service is disabled

اطلاعات اضافی (Additional Fields)

می‌توان به یک کاربر اطلاعات دلخواه افزود و بازیابی کرد. به طور مثال، برای اضافه کردن آدرس کاربر کدی مانند زیر به کار می‌آید:

BacktoryUser user = BacktoryUser.CurrentUser;
user.Put("address", "Tehran, First Alley!, No 7");
// Save the user with user.UpdateUserInBackground

حال اگر بخواهیم این اطلاعات اضافه را بازیابی کنیم، به شیوه‌ی زیر عمل می‌کنیم:

string address = user.Get("address"); // Returns null when user doesn’t contain such key.

دقت کنید که این اطلاعات اضافی تنها باید از جنس رشته باشند. هم‌چنین، قابلیت جستار بر روی فیلدهایی که به کاربر اضافه می شوند، وجود ندارد. چنانچه نیاز به جستار با توجه به این فیلدها دارید، در سرویس پایگاه داده‌ی خود جدولی تعریف کنید که از طریق شناسه‌ی کاربری (userId) به جدول کاربران مرتبط باشد و فیلدهای اضافی کاربر را درون آن بریزید.

خروج کاربر از اپلیکیشن

در صورتی که می‌خواهید کاربر از اپلیکیشن خارج شود، باید به صورت زیر به SDK بکتوری اعلام کنید.

BacktoryUser.LogoutInBackground();

به این ترتیب ما توانستیم یک کاربر ثبت‌نام کنیم و ورود انجام دهیم. در مرحله بعد با نوع خاصی از کاربران به نام کاربر مهمان آشنا خواهیم شد.

گام بعدی