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

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

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

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

وضع الضيف

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

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

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

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

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

val wristDetectionEnabled =
        isWristDetectionAutoLockingEnabled(applicationContext)

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

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

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

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

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

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

ملاحظات مهمّة: يجب أن يوفّر تطبيق Wear OS طريقة مصادقة واحدة أخرى على الأقل، وذلك لأنه هذا الخيار يعمل فقط على الساعات التي يتم إقرانها بنظام التشغيل 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 وإعداد مشروع استوديو Android. لمزيد من المعلومات عرض ابدأ دمج بيانات "تسجيل الدخول بحساب Google" في تطبيقك على Android.

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

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

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

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

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

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

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

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);
    

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

التعامل مع النقرات على زر تسجيل الدخول في 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 للمكالمات التي تمت مصادقتها من الآن فصاعدًا.

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

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