Account Kit لنظام التشغيل Android

لإعداد Account Kit في تطبيق Android الخاص بك، اتبع الخطوات التالية:

1. المتطلبات الأساسية

2. تكوين مجموعة SDK

3. التحقق من الجلسات الحالية

4. بدء دفق تسجيل دخول عبر رسالة SMS

5. بدء دفق تسجيل دخول عبر البريد الإلكتروني

6. تنفيذ عمليات تكوين إضافية

7. معالجة نتيجة النشاط

8. توفير زر تسجيل خروج

9. الوصول إلى معلومات الحساب على الجهاز


راجع كذلك الخطوات التالية لمعرفة عمليات التخصيص الإضافية التي يمكنك تنفيذها.

للاطلاع على نموذج مشروع يوضح كيفية دمج Account Kit، راجع نماذج Account Kit لنظام Android على GitHub.

1. المتطلبات الأساسية

قبل بدء دمج Account Kit في تطبيقك، تأكد من استيفاء المتطلبات الأساسية التالية.

أ. إنشاء حساب مطور

إذا لم يكن لديك حساب مطور، فبادر إلى إنشائه بالنقر على الزر التالي.

يمنحك حساب مطور فيسبوك صلاحية الوصول إلى أدوات المطور ويتيح لك إنشاء تطبيقات فيسبوك.

هل لديك بالفعل حساب مطور على فيسبوك؟ تخطى إلى الخطوة التالية.

إنشاء حساب مطور

ب. الحصول على معرف تطبيق فيسبوك

يتطلب Account Kit لنظام Android معرف تطبيق فيسبوك. اتبع الخطوات الواردة في بدء الاستخدام، أو انقر على الزر التالي لاستخدام "البدء السريع".

البدء السريع لنظام التشغيل Android

ج. اختيار إعدادات التطبيق

يمكنك اختيار ما إذا كنت تريد السماح بتسجيل الدخول من خلال البريد الإلكتروني أو رسالة SMS أم لا، واختيار إعدادات الأمان لتطبيقك. للحصول على المزيد من المعلومات عن اختيار إعداد رمز الوصول، يمكنك الرجوع إلى رموز الوصول وللحصول على معلومات عن اختيار إعداد المفتاح السري لتطبيقك، يمكنك الرجوع إلى استخدام واجهة Graph API.

اختيار إعدادات التطبيق

2. تكوين مجموعة SDK

أضف معرف تطبيق فيسبوك ورمز الوحدة العميلة لـ Account Kit إلى ملف AndroidManifest.xml. سوف تعثر على إصدار رمز الوحدة العميلة لـ Account Kit في قسم Account Kit من لوحة التحكم في التطبيق. علمًا بأنه يتم استخدام اسم التطبيق في واجهة المستخدم وشاشة تسجيل الدخول.

أضف تبعية التجميع مع أحدث إصدار من مجموعة Account Kit SDK في ملف build.gradle:

repositories {
  jcenter()
}

dependencies {
  compile 'com.facebook.android:account-kit-sdk:4.+'
}

أضف ما يلي إلى علامة application في AndroidManifest.xml

<meta-data android:name="com.facebook.accountkit.ApplicationName"
           android:value="@string/app_name" />
<meta-data android:name="com.facebook.sdk.ApplicationId"
           android:value="@string/FACEBOOK_APP_ID" />
<meta-data android:name="com.facebook.accountkit.ClientToken"
           android:value="@string/ACCOUNT_KIT_CLIENT_TOKEN" />

<activity
  android:name="com.facebook.accountkit.ui.AccountKitActivity"
  android:theme="@style/AppLoginTheme"
  tools:replace="android:theme"/>

يجب التأكد من أن @style/AppLoginTheme تحصل على قيمتها من Theme.AccountKit.

حدد قيمة FACEBOOK_APP_ID كقيمة معرف تطبيق فيسبوك التي تظهر أعلى لوحة التحكم في تطبيقك، وقيمة ACCOUNT_KIT_CLIENT_TOKEN باستخدام رمز الوحدة العميلة الموجود في علامة تبويب Account Kit من لوحة التحكم في التطبيق.

يجب تحديد AccountKitActivity هنا أيضًا، وذلك لتمكين بدء تشغيله في التطبيق. قم بتعيين السمة android:theme هنا لتخصيص مخطط الألوان لواجهة المستخدم.

إذا كنت تريد تعطيل "أحداث التطبيق" لتطبيقك الذي يستخدم Account Kit، فأضف السطر التالي إلى ملف AndroidManifest.xml:

<meta-data android:name="com.facebook.accountkit.FacebookAppEventsEnabled"
           android:value="false"/>

افتراضيًا، تكون هذه القيمة true. راجع أحداث التطبيق والتحليلات للحصول على مزيد من المعلومات.

لتقليل حجم مجموعة SDK، يمكنك تحديد اللغات المدعومة التي تريدها فقط. ويمكنك الرجوع إلى تحديد اللغات المدعومة للتعرف على طريقة القيام بذلك.

3. التحقق من الجلسات الحالية

إذا كان تطبيقك سيتلقى رمز وصول المستخدم مباشرة (أي عند تشغيل مفتاح تمكين دفق رموز الوصول للوحدات العميلة من لوحة التحكم في التطبيق)، عندها عليك البحث عن رمز صالح وموجود:

import com.facebook.accountkit.AccountKit;
import com.facebook.accountkit.AccessToken;

AccessToken accessToken = AccountKit.getCurrentAccessToken();

if (accessToken != null) {
  //Handle Returning User
} else {
  //Handle new or logged out user
}

إذا كان تطبيقك سيتلقى رمز تصريح ليقوم بتمريره إلى الخادم (أي عند إيقاف تشغيل مفتاح تمكين دفق رموز الوصول للوحدات العميلة من لوحة التحكم في التطبيق)، يمكنك اختيار جعل الخادم يرسل حالة تسجيل الدخول الصحيحة إلى تطبيق الوحدة العميلة.

4. بدء دفق تسجيل دخول عبر رسالة SMS

import com.facebook.accountkit.AccountKit;

public static int APP_REQUEST_CODE = 99;

public void phoneLogin(final View view) {
  final Intent intent = new Intent(getActivity(), AccountKitActivity.class);
  AccountKitConfiguration.AccountKitConfigurationBuilder configurationBuilder =
    new AccountKitConfiguration.AccountKitConfigurationBuilder(
      LoginType.PHONE,
      AccountKitActivity.ResponseType.CODE); // or .ResponseType.TOKEN
  // ... perform additional configuration ...
  intent.putExtra(
    AccountKitActivity.ACCOUNT_KIT_ACTIVITY_CONFIGURATION,
    configurationBuilder.build());
  startActivityForResult(intent, APP_REQUEST_CODE);
}

يكون APP_REQUEST_CODE هو الرمز المخصص لتتبع دفق تسجيل الدخول. ويمكن أن يكون أي عدد صحيح، ولكن يجب تعيينه بواسطة تطبيقك.

عند بدء تشغيل حزم محددة إضافية، تأكد من تحديد AccountKitActivity.ResponseType الذي يتوافق مع إعداد تصريح تطبيقك في لوحة تحكم بوابة مطوري فيسبوك: TOKEN عند تشغيل مفتاح تمكين دفق رموز الوصول للوحدات العميلة في لوحة معلومات التطبيق، وCODE عند إيقافه تشغيله.

إذا قام الأشخاص بتسجيل الدخول إلى حسابهم على فيسبوك باستخدام أجهزة Android، ولديهم أرقام هواتف تم التحقق منها، تقوم Account Kit بالتحقق من هويتهم دون أن تطلب منهم إدخال رمز رسالة SMS. لمزيد من المعلومات، يمكنك الرجوع إلى التحقق الفوري.

5. بدء دفق تسجيل دخول عبر البريد الإلكتروني

import com.facebook.accountkit.AccountKit;

public static int APP_REQUEST_CODE = 99;

public void emailLogin(final View view) {
  final Intent intent = new Intent(getActivity(), AccountKitActivity.class);
  AccountKitConfiguration.AccountKitConfigurationBuilder configurationBuilder =
    new AccountKitConfiguration.AccountKitConfigurationBuilder(
      LoginType.EMAIL,
      AccountKitActivity.ResponseType.CODE); // or .ResponseType.TOKEN
  // ... perform additional configuration ...
  intent.putExtra(
    AccountKitActivity.ACCOUNT_KIT_ACTIVITY_CONFIGURATION,
    configurationBuilder.build());
  startActivityForResult(intent, APP_REQUEST_CODE);
}

يكون APP_REQUEST_CODE هو الرمز المخصص لتتبع دفق تسجيل الدخول. ويمكن أن يكون أي عدد صحيح، ولكن يجب تعيينه بواسطة تطبيقك.

عند بدء تشغيل حزم محددة إضافية، تأكد من تحديد AccountKitActivity.ResponseType الذي يتوافق مع إعداد تصريح تطبيقك في لوحة تحكم بوابة مطوري فيسبوك: TOKEN عند تشغيل مفتاح تمكين دفق رموز الوصول للوحدات العميلة في لوحة معلومات التطبيق، وCODE عند إيقافه تشغيله.

مع تسجيل الدخول عبر البريد الإلكتروني في Account Kit، يتلقى الأشخاص بريدًا إلكترونيًا على حسابهم. وعندما ينقر الشخص على الرابط الموجود برسالة البريد الإلكتروني بنفس الجهاز الذي تم تثبيت تطبيقك عليه، تتم إعادته إلى تطبيقك لإكمال نشاط تسجيل الدخول.

لإعادة الأشخاص إلى تطبيقك، أضف نشاط AndroidManifest.xml بالفلتر المقصود التالي إلى ملف AccountKitEmailRedirectActivity:

 <activity android:name="com.facebook.accountkit.ui.AccountKitEmailRedirectActivity">
   <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="@string/ak_login_protocol_scheme" />
  </intent-filter>
</activity>

وأضف الرمز البرمجي التالي إلى ملف strings.xml:

// if your Facebook App ID is 1234567, you should use ak1234567
<string name="ak_login_protocol_scheme">akFACEBOOK_APP_ID</string>

6. تنفيذ عمليات تكوين إضافية

يوفر كائن AccountKitConfigurationBuilder واجهات مستخدم متعددة ونقاط تحسين سلوك لاستخدام Account Kit عبر الطرق التي تسمح لك بتجاوز الخصائص الافتراضية وقت التشغيل.

الطريقةالوصف

setInitialAuthState(String initialAuthState)

(اختياري) رقم عشوائي من إنشاء المطور يُستخدم للتحقق من تطابق الاستجابة المتلقاة مع الطلب. يتم ملء هذه الطريقة بقيمة عشوائية وقت التشغيل؛ وعند عودة استدعاء تسجيل الدخول، تأكد من أن المعلمة المقابلة في الاستجابة تتطابق مع نظيرتها التي تقوم بتعيينها في هذه الطريقة.

setInitialEmail(String initialEmail)

(اختياري) قم بملء عنوان البريد الإلكتروني للمستخدم بشكل مسبق في دفق تسجيل الدخول.

ملاحظة: افتراضيًا، يوفر حقل البريد الإلكتروني قائمة منسدلة بعناوين البريد الإلكتروني للمستخدمين في حالة الحصول على الإذن GET_ACCOUNTS.

setDefaultCountryCode(String defaultCountryCode)

(اختياري) قم بتعيين رمز البلد الافتراضي الظاهر في دفق تسجيل الدخول عبر رسالة SMS.

setInitialPhoneNumber(PhoneNumber initialPhoneNumber)

(اختياري) قم بملء رقم هاتف المستخدم بشكل مسبق في دفق تسجيل الدخول عبر رسالة SMS.

setFacebookNotificationsEnabled(boolean facebookNotificationsEnabled)

(اختياري) في حالة تعيين العلامة، يوفر Account Kit للمستخدم خيار تلقي رسالة التأكيد عبر إشعار فيسبوك في حالة فشل رسالة SMS، إذا كان رقم هاتفه مرتبط بحسابه على فيسبوك. يجب أن يكون رقم الهاتف المرتبط هو رقم الهاتف الأساسي لحساب فيسبوك.

القيمة الافتراضية:true

setTitleType(AccountKitActivity.TitleType titleType)

(اختياري) قم بالتعيين إلى AccountKitActivity.TitleType.APP_NAME لاستخدام اسم تطبيقك كعنوان لشاشة تسجيل الدخول، أو إلى AccountKitActivity.TitleType.LOGIN لاستخدام ترجمة مناسبة محليًا لكلمة "تسجيل الدخول" كعنوان للشاشة.

القيمة الافتراضية:AccountKitActivity.TitleType.LOGIN

setTheme(int theme)

(اختياري) قم بإدخال معرف موارد السمة لاستخدامها في شاشة تسجيل الدخول. راجع تخصيص واجهة المستخدم لنظام Android للحصول على مزيد من المعلومات.

ملاحظة: إذا حددت سمة وكائن مدير واجهة المستخدم المتقدمة (انظر أدناه)، فستكون الأولوية لمدير واجهة المستخدم المتقدمة وستحل محل عناصر السمة.

setAdvancedUIManager(AdvancedUIManager advancedUIManager)

(اختياري) قم بإدخال كائن يعمل على تنفيذ بروتوكول AdvancedUIManager. راجع تخصيص واجهة المستخدم لنظام Android للحصول على مزيد من المعلومات.

setReadPhoneStateEnabled(boolean readPhoneStateEnabled)

(اختياري) إذا تم منح الإذن READ_PHONE_STATE وتم تعيين هذه العلامة إلى true، فسوف يتم ملء رقم هاتف المستخدم بشكل مسبق في دفق تسجيل الدخول عبر رسالة SMS. قم بالتعيين إلى false إذا كنت تريد استخدام الإذن READ_PHONE_STATE بنفسك، ولا تريد ملء رقم هاتف المستخدم بشكل مسبق بواسطة Account Kit.

القيمة الافتراضية:true

setReceiveSMS(boolean receiveSMSEnabled)

(اختياري) إذا تم منح الإذن RECEIVE_SMS وتم تعيين هذه العلامة إلى true، فسوف يقرأ التطبيق رسالة SMS لتأكيد Account Kit تلقائيًا ويملأ رمز التأكيد بشكل مسبق في دفق تسجيل الدخول عبر رسالة SMS. قم بالتعيين إلى false إذا كنت تريد استخدام الإذن RECEIVE_SMS بنفسك، ولا تريد ملء رمز التأكيد مسبقًا بواسطة Account Kit.

القيمة الافتراضية:true

setSMSWhitelist(String[] smsWhitelist)

(اختياري) استخدم هذه الطريقة لتحديد قائمة بأكواد البلدان المسموح باستخدامها في دفق تسجيل الدخول عبر رسالة SMS. القيمة عبارة عن مصفوفة من رموز بلدان قصيرة تتوافق مع ISO 3166-1 Alpha 2. لتقييد التوفر وقصره على الولايات المتحدة (+1) وهولندا (+31)، أدخل ["US", "NL"].

setSMSBlacklist(String[] smsBlacklist)

(اختياري) استخدم هذه الطريقة لتحديد قائمة بأكواد البلدان التي يتم استبعادها في دفق تسجيل الدخول عبر رسالة SMS. وتكون أكواد البلدان المدرجة في قائمة الحظر هي الوحيدة غير المتاحة. ويظل بإمكان الأشخاص استخدام باقي أكواد البلدان المدعومة من Account Kit. وإذا ظهر رمز بلد في القائمة البيضاء وفي قائمة الحظر، تكون الأولوية لقائمة الحظر وبالتالي يصبح رمز البلد غير متاح. ومثل القائمة البيضاء، تكون القيمة عبارة عن مصفوفة من رموز بلدان قصيرة تتوافق مع ISO 3166-1 Alpha 2.

عندما تقوم بإضافة أكواد البلدان إلى القائمة البيضاء أو القائمة السوداء، يمكنك استخدام توليفات القوائم التالية مع النتائج الموصوفة.

القوائمالنتيجة

لا توجد قوائم بيضاء أو قوائم سوداء

تتوفر كل أكواد البلدان التي تدعمها Account Kit.

القائمة البيضاء

تتوفر أكواد البلدان المدرجة في القائمة البيضاء فقط.

القائمة السوداء

تتوفر كل أكواد البلدان التي تدعمها Account Kit باستثناء تلك المدرجة في القائمة السوداء.

القائمة البيضاء والقائمة السوداء

تتوفر فقط أكواد البلدان الموجودة بالقائمة البيضاء غير المدرجة في القائمة السوداء. يرجى ملاحظة أن القائمة السوداء يكون لها الأولوية بالنسبة للأكواد المدرجة بكلتا القائمتين.

7. معالجة نتيجة النشاط

سجل نتيجة نشاط Account Kit واستخلص AccountKitLoginResult من وسيطة Intent لتحديد حالة محاولة تسجيل الدخول.

@Override
protected void onActivityResult(
        final int requestCode,
        final int resultCode,
        final Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == APP_REQUEST_CODE) { // confirm that this response matches your request
        AccountKitLoginResult loginResult = data.getParcelableExtra(AccountKitLoginResult.RESULT_KEY);
        String toastMessage;
        if (loginResult.getError() != null) {
            toastMessage = loginResult.getError().getErrorType().getMessage();
            showErrorActivity(loginResult.getError());
        } else if (loginResult.wasCancelled()) {
            toastMessage = "Login Cancelled";
        } else {
            if (loginResult.getAccessToken() != null) {
                toastMessage = "Success:" + loginResult.getAccessToken().getAccountId();
            } else {
                toastMessage = String.format(
                        "Success:%s...",
                        loginResult.getAuthorizationCode().substring(0,10));
            }

            // If you have an authorization code, retrieve it from
            // loginResult.getAuthorizationCode()
            // and pass it to your server and exchange it for an access token.

            // Success! Start your next activity...
            goToMyLoggedInActivity();
        }

        // Surface the result to your user in an appropriate way.
        Toast.makeText(
                this,
                toastMessage,
                Toast.LENGTH_LONG)
                .show();
    }
}

8. توفير زر تسجيل خروج

إذا بدأت جلسة تسجيل الدخول باستخدام AccountKitActivity.ResponseType.TOKEN، فسيتوفر خيار تسجيل الخروج لإزالة AccessToken المُخزَن بالجهاز.

import com.facebook.accountkit.AccountKit;

AccountKit.logOut();

9. الوصول إلى معلومات الحساب على الجهاز

إذا بدأت جلسة تسجيل الدخول باستخدام AccountKitActivity.ResponseType.TOKEN، فسيكون بإمكانك الوصول إلى معرف Account Kit، ورقم الهاتف والبريد الإلكتروني للحساب الحالي عبر استدعاء getCurrentAccount().

AccountKit.getCurrentAccount(new AccountKitCallback<Account>() {
  @Override
  public void onSuccess(final Account account) {
    // Get Account Kit ID
    String accountKitId = account.getId();

    // Get phone number
    PhoneNumber phoneNumber = account.getPhoneNumber();
    String phoneNumberString = phoneNumber.toString();

    // Get email
    String email = account.getEmail();
  }
  
  @Override
  public void onError(final AccountKitError error) {
    // Handle Error
  }
});