المصادقة على الأجهزة القابلة للارتداء

يمكن تشغيل تطبيقات Wear OS بشكل مستقل، بدون تطبيق مصاحب. هذا يعني أنّ يحتاج تطبيق Wear OS إلى إدارة المصادقة بنفسه عند الوصول إلى البيانات الواردة من الإنترنت. ولكن حجم شاشة الساعة الصغير وقدرات الإدخال المحدودِة تفرضان قيودًا على خيارات المصادقة التي يمكن لتطبيق Wear OS استخدامها.

يتناول هذا الدليل طرق المصادقة المقترَحة لتطبيقات Wear OS، بالإضافة إلى البدائل عندما لا تتوافق هذه الطرق مع حالة استخدام التطبيق.

للاطّلاع على مزيد من المعلومات عن كيفية تصميم تجربة تسجيل دخول جيدة، يمكنك الاطّلاع على دليل تجربة تسجيل الدخول .

وضع الضيف

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

إمكانية اكتشاف المستخدمين لتطبيق Wear وتثبيته بدون استخدام الهاتف الجوّال ولذلك قد لا يكون لديهم حساب وقد لا يعرفون الميزات التي على مستوى خدمات Google. تأكَّد من أنّ وظائف وضع الضيف تعرض ميزات تطبيقك بدقة.

قد تظل بعض الأجهزة مفتوحة لوقت أطول.

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

إذا كان تطبيقك يتطلب مستوى أمان أعلى، مثل عند عرض بيانات حسّاسة أو خاصة محتملة، تحقّق أولاً مما إذا كانت ميزة "رصد المعصم" مفعّلة:

val wristDetectionEnabled =
        isWristDetectionAutoLockingEnabled(applicationContext)

إذا كانت القيمة المعروضة لهذه الطريقة هي false، اطلب من المستخدم تسجيل الدخول إلى الحساب في تطبيقك قبل عرض محتوى خاص بالمستخدم.

طرق المصادقة المُقترَحة

استخدِم طرق المصادقة التالية لتفعيل تطبيقات Wear OS المستقلة من أجل الحصول على بيانات اعتماد مصادقة المستخدم.

تمرير الرموز المميّزة باستخدام طبقة البيانات

يمكن لتطبيق الهاتف المصاحب نقل بيانات المصادقة بأمان إلى تطبيق Wear OS باستخدام Wearable Data Layer. نقل بيانات الاعتماد كرسائل أو ملفات بيانات

لا يتطلب هذا النوع من المصادقة عادةً أي إجراء من المستخدم. ومع ذلك، تجنَّب إجراء المصادقة بدون إبلاغ المستخدم بأنّه يتم تسجيل دخوله. يمكنك إبلاغ المستخدم باستخدام شاشة بسيطة يمكن إغلاقها توضّح له أنّه يتم استخدام حسابه تم نقله من الهاتف المحمول.

ملاحظة مهمة: يجب أن يقدّم تطبيق Wear طريقة مصادقة أخرى واحدة على الأقل، لأنّ هذا الخيار لا يعمل إلا على الساعات المقترنة بأجهزة Android عند تثبيت التطبيق المتوافق مع الأجهزة الجوّالة. توفير بديل طريقة المصادقة للمستخدمين الذين ليس لديهم التطبيق المتوافق مع الأجهزة الجوّالة أو الذين ليس لديهم تطبيق Wear OS مقترنًا بجهاز iOS.

قم بتمرير الرموز المميزة باستخدام طبقة البيانات من تطبيق الأجهزة الجوّالة، كما هو موضح في المثال التالي:

val token = "..." // Auth token to transmit to the wearable device.
val dataClient: DataClient = Wearable.getDataClient(context)
val putDataReq: PutDataRequest = PutDataMapRequest.create("/auth").run {
    dataMap.putString("token", token)
    asPutDataRequest()
}
val putDataTask: Task<DataItem> = dataClient.putDataItem(putDataReq)

الاستماع إلى أحداث تغيُّر البيانات على تطبيق الساعة الذكية كما هو موضَّح في المثال التالي:

val dataClient: DataClient = Wearable.getDataClient(context)
dataClient.addListener{ dataEvents ->
    dataEvents.forEach { event ->
        if (event.type == DataEvent.TYPE_CHANGED) {
            val dataItemPath = event.dataItem.uri.path ?: ""
            if (dataItemPath.startsWith("/auth")) {
                val token = DataMapItem.fromDataItem(event.dataItem).dataMap.getString("token")
                // Display interstitial screen to notify the user they are being signed in.
                // Then, store the token and use it in network requests.
            }
        }
    }
}

لمزيد من المعلومات عن استخدام "طبقة بيانات الأجهزة القابلة للارتداء"، يُرجى الاطّلاع على مقالة إرسال البيانات ومزامنتها على نظام التشغيل Wear OS.

استخدام بروتوكول OAuth 2.0

يتيح نظام التشغيل Wear OS مسارَين مستندَين إلى OAuth 2.0، كما هو موضّح في الأقسام التالية:

  • منح رمز التفويض باستخدام مفتاح الحماية لتبادل الرموز (PKCE)، على النحو المحدّد في RFC 7636
  • منح تفويض الأجهزة، كما هو محدّد في RFC 8628

ملاحظة: للمساعدة في ضمان عدم إيقاف تطبيقك عندما تنتقل الساعة إلى وضع الإضاءة السينمائية، فعِّل ميزة "العرض دائمًا" باستخدام AmbientModeSupport.attach في النشاط الذي يُجري المصادقة. لمزيد من المعلومات حول أفضل الممارسات في "وضع الاستراحة"، يُرجى الاطّلاع على مقالة إبقاء تطبيقك مرئيًا على Wear.

مفتاح الحماية لتبادل الرموز (PKCE)

لاستخدام بروتوكول PKCE بفعالية، استخدِم RemoteAuthClient.

لتنفيذ طلب مصادقة من تطبيق Wear OS إلى موفِّر OAuth، أنشئ عنصر OAuthRequest . يتكوّن هذا العنصر من عنوان URL لنقطة نهاية OAuth للحصول على رمز مميّز وموضوع CodeChallenge . يعرض الرمز التالي مثالاً على إنشاء طلب مصادقة:

val request = OAuthRequest.Builder(this.applicationContext)
    .setAuthProviderUrl(Uri.parse("https://...."))
    .setClientId(clientId)
    .setCodeChallenge(codeChallenge)
    .build()

بعد إنشاء طلب المصادقة، أرسِله إلى التطبيق المصاحب باستخدام الطريقة sendAuthorizationRequest():

val client = RemoteAuthClient.create(this)
client.sendAuthorizationRequest(request,
    { command -> command?.run() },
    object : RemoteAuthClient.Callback() {
        override fun onAuthorizationResponse(
            request: OAuthRequest,
            response: OAuthResponse
        ) {
            // Extract the token from the response, store it and use it in network requests.
        }

        override fun onAuthorizationError(errorCode: Int) {
            // Handle error
        }
    }
)

يؤدي هذا الطلب إلى إجراء مكالمة مع التطبيق المصاحب، الذي يعرض بعد ذلك واجهة مستخدم الإذن في موقع إلكتروني. المتصفح على الهاتف المحمول للمستخدم. يُثبت موفِّر OAuth 2.0 هوية المستخدم ويحصل على موافقته على الأذونات المطلوبة. يتم إرسال الرد إلى أداة إنشاء عنوان URL لإعادة التوجيه.

بعد المصادقة الناجحة أو غير الناجحة، يعيد خادم OAuth 2.0 توجيهك إلى عنوان URL المحدّد في الطلب. إذا وافق المستخدم على طلب الوصول، سيتضمّن الردّ رمز التفويض . إذا لم يوافق المستخدم على الطلب، سيتضمّن الردّ رسالة خطأ .

تكون الاستجابة في شكل سلسلة طلب وتبدو مثل أحد الأمثلة التالية:

  https://wear.googleapis.com/3p_auth/com.your.package.name?code=xyz
  https://wear.googleapis-cn.com/3p_auth/com.your.package.name?code=xyz

يؤدي هذا الإجراء إلى تحميل صفحة تُوجِّه المستخدم إلى التطبيق المصاحب. يتحقق التطبيق المصاحب من عنوان URL للاستجابة ويرسل الرد إلى تطبيق الساعة التابع لجهة خارجية باستخدام واجهة برمجة تطبيقات onAuthorizationResponse.

يمكن لتطبيق الساعة بعد ذلك استبدال رمز التفويض برمز الدخول.

ملاحظة: بعد إنشاء OAuthRequest، يمكنك العثور على عنوان URL لإعادة التوجيه من خلال الانتقال إلى redirectUrl.

منح تفويض الأجهزة

عند استخدام "منح الإذن بالوصول إلى الجهاز"، يفتح المستخدم معرّف الموارد المتسلسل (URI) لإثبات الملكية على جهاز آخر. بَعْدَ ذَلِكْ يطلب خادم التفويض الموافقة على الطلب أو رفضه.

لتسهيل هذه العملية، استخدِم رمز RemoteActivityHelper لفتح صفحة ويب على جهاز المستخدم الجوّال المقترن، كما هو موضّح في المثال التالي:

// Request access from the authorization server and receive Device Authorization Response.
val verificationUri = "..." // Extracted from the Device Authorization Response.
RemoteActivityHelper.startRemoteActivity(
    this,
    Intent(Intent.ACTION_VIEW)
        .addCategory(Intent.CATEGORY_BROWSABLE)
        .setData(Uri.parse(verificationUri)),
    null
)
// Poll the authorization server to find out if the user completed the user authorization
// step on their mobile device.

إذا كان لديك تطبيق iOS، استخدم الروابط العامة لاعتراض هذا الغرض في تطبيقك بدلاً من الاعتماد على المتصفّح لمنح الإذن بالرمز المميّز.

طرق المصادقة الأخرى

يتيح نظام التشغيل Wear OS طرق تسجيل دخول إضافية موضّحة في الأقسام التالية.

تسجيل الدخول باستخدام حساب Google

تتيح ميزة "تسجيل الدخول باستخدام حساب Google" للمستخدم تسجيل الدخول باستخدام حسابه الحالي على Google. ويقدّم هذا الإطار أفضل تجربة للمستخدمين، كما أنّه سهل الاستخدام، خاصةً إذا كنت تستخدمه في تطبيقات الأجهزة الجوّالة.

بعد طرق المصادقة المقترَحة الموضّحة سابقًا، ينطبق حلّ "تسجيل الدخول بحساب Google" التالي المفضّل لأنّه يعمل أيضًا بشكل جيد على أجهزة iOS. يوضّح القسم التالي كيفية إكمال عملية دمج أساسية لميزة "تسجيل الدخول باستخدام حساب Google".

المتطلّبات الأساسية

قبل أن تتمكّن من بدء دمج ميزة "تسجيل الدخول باستخدام حساب Google" في تطبيقك المتوافق مع نظام التشغيل Wear OS، عليك ضبط إعدادات مشروع في "وحدة تحكّم Google API" وإعداد مشروعك على Android Studio. لمزيد من المعلومات، راجِع المقالة البدء في دمج ميزة "تسجيل الدخول باستخدام حساب Google" في تطبيق Android.

في حال استخدام "تسجيل الدخول بحساب Google" مع تطبيق أو موقع إلكتروني يتصل بخادم خلفية، فهناك متطلبان أساسيان إضافيان:

  • إنشاء معرِّف عميل لتطبيق الويب OAuth 2.0 للنطاق خادم الخلفية. يختلف معرّف العميل هذا عن معرّف العميل لتطبيقك. لمزيد من المعلومات، المعلومات، راجع تفعيل الوصول من جهة الخادم
  • تحديد المستخدم الذي سجّل الدخول حاليًا بشكل آمن على الخادم من خلال إرسال رمز تعريف المستخدم باستخدام بروتوكول HTTPS للتعرّف على كيفية مصادقة المستخدم على خادم الخلفية، يُرجى الاطّلاع على عليك المصادقة باستخدام خادم خلفية.

دمج "تسجيل الدخول بحساب Google" في تطبيقك

راجِع الخطوات التالية، الموضّحة بالتفصيل في الأقسام التالية، ونفذها لدمج ميزة "تسجيل الدخول باستخدام حساب Google" في تطبيق Wear OS:

  1. ضبط ميزة "تسجيل الدخول باستخدام حساب Google"
  2. إضافة زر "تسجيل الدخول باستخدام حساب Google"
  3. ابدأ إجراءات تسجيل الدخول عندما يكون زر تسجيل الدخول انقر عليه.

ضبط ميزة "تسجيل الدخول باستخدام حساب Google" وإنشاء عنصر GoogleApiClient

في طريقة onCreate() لنشاط تسجيل الدخول، عليك ضبط ميزة "تسجيل الدخول باستخدام حساب Google" لطلب بيانات المستخدم التي يتطلبها تطبيقك. بعد ذلك، أنشئ عنصرًا من النوع GoogleApiClient يمكنه الوصول إلى Google Sign-In API والخيارات التي حدّدتها. يتم عرض هذه الخطوات في المثال التالي:

public class MyNewActivity extends AppCompatActivity {

    private static final int RC_SIGN_IN = 9001;

    private GoogleSignInClient mSignInClient;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        GoogleSignInOptions options =
                new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
                        .build();

        mSignInClient = GoogleSignIn.getClient(this, options);
    }
}

إضافة زر "تسجيل الدخول باستخدام حساب Google" إلى تطبيقك

أكمِل الخطوات التالية لإضافة زر "تسجيل الدخول باستخدام حساب Google":

  1. أضف SignInButton إلى تنسيق التطبيق:
  2.  <com.google.android.gms.common.SignInButton
     android:id="@+id/sign_in_button"
     android:layout_width="wrap_content"
     android:layout_height="wrap_content" />
    
  3. في طريقة onCreate() الخاصة بتطبيقك، سجِّل OnClickListener لتسجيل دخول المستخدم عند النقر عليه:
  4. Kotlin

    findViewById<View>(R.id.sign_in_button).setOnClickListener(this)
    

    Java

    findViewById(R.id.sign_in_button).setOnClickListener(this);
    

إنشاء intent لتسجيل الدخول وبدء إجراءات تسجيل الدخول

يمكنك معالجة النقرات على زر تسجيل الدخول في طريقة onCLick() من خلال إنشاء نية تسجيل دخول باستخدام الطريقة getSignInIntent(). ثم ابدأ المقصد startActivityForResult().

Intent intent = mSignInClient.getSignInIntent();
startActivityForResult(intent, RC_SIGN_IN);

سيُطلَب من المستخدم اختيار حساب Google لتسجيل الدخول باستخدامه. إذا طلبت نطاقات تتعدى الملف الشخصي والبريد الإلكتروني ورقم التعريف المفتوح، سيُطلب من المستخدم أيضًا منح إذن الوصول إلى هذه الموارد.

أخيرًا، في النشاط onActivityResult، يمكنك استرداد نتيجة تسجيل الدخول باستخدام getSignInResultFromIntent بعد استرداد نتيجة تسجيل الدخول، يمكنك التحقق مما إذا تم تسجيل الدخول بنجاح باستخدام isSuccess. إذا نجح تسجيل الدخول، يمكنك الاتصال getSignInAccount للحصول على عنصر GoogleSignInAccount يحتوي على معلومات حول المستخدم الذي تم تسجيل الدخول إليه المستخدم، مثل اسم المستخدم. يتم عرض هذه الخطوات في المثال التالي:

Kotlin

override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent) {
    super.onActivityResult(requestCode, resultCode, data)

    // Result returned from launching the Intent from GoogleSignInApi.getSignInIntent(...).
    if (requestCode == RC_SIGN_IN) {
        Auth.GoogleSignInApi.getSignInResultFromIntent(data)?.apply {
            if (isSuccess) {
                // Get account information.
                fullName = signInAccount?.displayName
                mGivenName = signInAccount?.givenName
                mFamilyName = signInAccount?.familyName
                mEmail = signInAccount?.email
            }
        }
    }
}

Java

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    // Result returned from launching the Intent from GoogleSignInApi.getSignInIntent(...).
    if (requestCode == RC_SIGN_IN) {
        GoogleSignInResult signInResult = Auth.GoogleSignInApi.getSignInResultFromIntent(data);
        if (signInResult.isSuccess()) {
            GoogleSignInAccount acct = signInResult.getSignInAccount();

            // Get account information.
            fullName = acct.getDisplayName();
            givenName = acct.getGivenName();
            familyName = acct.getFamilyName();
            email = acct.getEmail();
        }
    }
}

للاطّلاع على نموذج تطبيق يتيح ميزة "تسجيل الدخول باستخدام حساب Google"، يُرجى مراجعة نموذج تسجيل الدخول إلى حساب Google من اختصاصي الأحياء على GitHub.

مصادقة الرموز المخصّصة

كبديل لطرق المصادقة الموضّحة سابقًا، يمكنك أن تطلب من المستخدم المصادقة من جهاز آخر، مثل هاتف جوّال أو جهاز لوحي، والحصول على رمز رقمي صالح لفترة قصيرة. بعد ذلك، يُدخِل المستخدم رمز المصادقة على جهاز Wear OS لتأكيد هويته ويتلقّى رمزًا مميّزًا للمصادقة.

أمّا مسار المصادقة هذا، فيستخدم وحدة تسجيل الدخول في تطبيقك. يُدمَج يدويًا طريقة تسجيل الدخول لمقدّم خدمة مصادقة تابع لجهة خارجية في رمز تطبيقك. وعلى الرغم من أن طريقة المصادقة هذه تتطلب عملاً يدويًا وجهدًا إضافيًا أنه أكثر أمانًا، يمكنك استخدام هذه الطريقة إذا كنت بحاجة إلى المصادقة في وقت سابق في تطبيقات Wear OS المستقلة.

تعمل عملية المصادقة لهذا الإعداد على النحو التالي:

  1. ينفِّذ المستخدم إجراءً باستخدام تطبيق Wear OS يتطلّب الحصول على إذن.
  2. يعرض تطبيق Wear OS شاشة مصادقة للمستخدم ويطلب منه إدخال رمز من عنوان URL محدّد.
  3. ينتقل المستخدم إلى جهاز محمول أو جهاز لوحي أو كمبيوتر، ثم يبدأ تشغيل متصفح، وينتقل إلى عنوان URL المحدّد في تطبيق Wear OS ويسجِّل الدخول.
  4. يتلقّى المستخدم رمزًا رقميًا صالحًا لفترة قصيرة ويُدخله في شاشة مصادقة تطبيق Wear OS باستخدام لوحة المفاتيح المدمجة في Wear OS:

  5. من الآن فصاعدًا، يمكنك استخدام الرمز الذي أدخلته كدليل على صحّة المستخدم وتبديل الرمز برمز مميز للمصادقة يتم تخزينه وتأمينه على جهاز Wear OS للمكالمات التي تمت مصادقتها من الآن فصاعدًا.

ملاحظة: يجب أن يكون الرمز الذي ينشئه المستخدم رقميًا فقط ولا يمكن أن يحتوي على أي أحرف alfabetic .

يمكن توضيح مسار المصادقة في الرسم البياني التالي: