إضافة مصادقة إلى تطبيق Xamarin.Android
نظرة عامة
يوضح لك هذا الموضوع كيفية مصادقة مستخدمي تطبيق جوال من تطبيق العميل. في هذا البرنامج التعليمي، يمكنك إضافة مصادقة إلى مشروع التشغيل السريع باستخدام موفر هوية مدعوم من Azure Mobile Apps. بعد المصادقة والتصريح بنجاح في تطبيق الجوال، يتم عرض قيمة معرف المستخدم.
يعتمد هذا البرنامج التعليمي على التشغيل السريع لتطبيق الجوال. يجب عليك أيضا أولا إكمال البرنامج التعليمي إنشاء تطبيق Xamarin.Android. إذا لم تستخدم مشروع خادم البدء السريع الذي تم تنزيله، فيجب إضافة حزمة ملحق المصادقة إلى مشروعك. لمزيد من المعلومات حول حزم ملحقات الخادم، راجع العمل مع حزمة SDK لخادم الواجهة الخلفية .NET لتطبيقات Azure للأجهزة المحمولة.
تسجيل تطبيقك للمصادقة وتكوين خدمات التطبيق
أولا، تحتاج إلى تسجيل تطبيقك في موقع موفر الهوية، وبعد ذلك ستقوم بتعيين بيانات الاعتماد التي ينشئها الموفر في الواجهة الخلفية لتطبيقات الجوال.
قم بتكوين موفر الهوية المفضل لديك باتباع الإرشادات الخاصة بالموفر:
كرر الخطوات السابقة لكل موفر تريد دعمه في تطبيقك.
إضافة تطبيقك إلى عناوين URL المسموح بها لإعادة التوجيه الخارجي
تتطلب المصادقة الآمنة تحديد نظام عنوان URL جديد لتطبيقك. يسمح ذلك لنظام المصادقة بإعادة التوجيه مرة أخرى إلى تطبيقك بمجرد اكتمال عملية المصادقة. في هذا البرنامج التعليمي ، نستخدم اسم تطبيق مخطط عنوان URL طوال الوقت. ومع ذلك، يمكنك استخدام أي نظام عناوين URL تختاره. يجب أن تكون فريدة من نوعها لتطبيق الهاتف المحمول الخاص بك. لتمكين إعادة التوجيه على جانب الخادم:
في [مدخل Azure]، حدد خدمة التطبيق.
انقر على خيار قائمة المصادقة / التفويض .
في عناوين URL لإعادة التوجيه الخارجي المسموح بها، أدخل
url_scheme_of_your_app://easyauth.callback
. url_scheme_of_your_app في هذه السلسلة هو مخطط عنوان URL لتطبيق الهاتف المحمول الخاص بك. يجب أن يتبع مواصفات عنوان URL العادية للبروتوكول (استخدم الأحرف والأرقام فقط ، وابدأ بحرف). يجب عليك تدوين السلسلة التي تختارها حيث ستحتاج إلى ضبط رمز تطبيق الهاتف المحمول الخاص بك باستخدام مخطط عنوان URL في عدة أماكن.انقر فوق موافق.
اضغط على حفظ .
تقييد الأذونات للمستخدمين المصادق عليهم
بشكل افتراضي، يمكن استدعاء واجهات برمجة التطبيقات في الواجهة الخلفية لتطبيقات الجوال بشكل مجهول. بعد ذلك ، تحتاج إلى تقييد الوصول إلى العملاء المصادق عليهم فقط.
Node.js الخلفية (عبر بوابة Azure):
في إعدادات تطبيقات الجوال، انقر فوق جداول سهلة وحدد الجدول. انقر فوق تغيير الأذونات، وحدد الوصول المصادق عليه لكافة الأذونات فقط، ثم انقر فوق حفظ.
نهاية خلفية .NET (C #):
في مشروع الخادم، انتقل إلى ControllersTodoItemController>.cs. إضافة السمة
[Authorize]
إلى فئة TodoItemController كما يلي. لتقييد الوصول إلى طرق محددة فقط، يمكنك أيضا تطبيق هذه السمة فقط على هذه الطرق بدلا من الفصل. إعادة نشر مشروع الخادم.[Authorize] public class TodoItemController : TableController<TodoItem>
Node.js الخلفية (عبر رمز Node.js):
لطلب المصادقة للوصول إلى الجدول، أضف السطر التالي إلى البرنامج النصي لخادم Node.js:
table.access = 'authenticated';
لمزيد من التفاصيل، راجع كيفية: طلب المصادقة للوصول إلى الجداول. لمعرفة كيفية تنزيل مشروع رمز التشغيل السريع من موقعك، راجع كيفية: تنزيل مشروع شفرة التشغيل السريع للواجهة الخلفية Node.js باستخدام Git.
في Visual Studio أو Xamarin Studio ، قم بتشغيل مشروع العميل على جهاز أو محاكي. تحقق من رفع استثناء غير معالج برمز حالة 401 (غير مصرح به) بعد بدء تشغيل التطبيق. يحدث هذا لأن التطبيق يحاول الوصول إلى الواجهة الخلفية لتطبيق الجوال كمستخدم غير مصادق عليه. يتطلب جدول TodoItem الآن المصادقة.
بعد ذلك ، ستقوم بتحديث تطبيق العميل لطلب موارد من الواجهة الخلفية لتطبيق الجوال مع مستخدم مصادق عليه.
إضافة مصادقة إلى التطبيق
يتم تحديث التطبيق لمطالبة المستخدمين بالنقر فوق زر تسجيل الدخول والمصادقة قبل عرض البيانات.
قم بإضافة التعليمة البرمجية التالية إلى فئة TodoActivity :
// Define an authenticated user. private MobileServiceUser user; private async Task<bool> Authenticate() { var success = false; try { // Sign in with Facebook login using a server-managed flow. user = await client.LoginAsync(this, MobileServiceAuthenticationProvider.Facebook, "{url_scheme_of_your_app}"); CreateAndShowDialog(string.Format("you are now logged in - {0}", user.UserId), "Logged in!"); success = true; } catch (Exception ex) { CreateAndShowDialog(ex, "Authentication failed"); } return success; } [Java.Interop.Export()] public async void LoginUser(View view) { // Load data only after authentication succeeds. if (await Authenticate()) { //Hide the button after authentication succeeds. FindViewById<Button>(Resource.Id.buttonLoginUser).Visibility = ViewStates.Gone; // Load the data. OnRefreshItemsSelected(); } } public override void OnResume() { base.OnResume(); Xamarin.Essentials.Platform.OnResume(); }
يؤدي ذلك إلى إنشاء طريقة جديدة لمصادقة مستخدم ومعالج أسلوب لزر تسجيل دخول جديد. تتم مصادقة المستخدم في رمز المثال أعلاه باستخدام تسجيل الدخول إلى Facebook. يتم استخدام مربع حوار لعرض معرف المستخدم بمجرد مصادقته.
ملاحظة
إذا كنت تستخدم موفر هوية آخر غير فيسبوك، فقم بتغيير القيمة التي تم تمريرها إلى LoginAsync أعلاه إلى أحد الخيارات التالية: حساب MicrosoftAccount أو Twitter أو Google أو WindowsAzureActiveDirectory.
في الأسلوب OnCreate حذف أو التعليق على السطر التالي من التعليمات البرمجية:
OnRefreshItemsSelected ();
في الملف Activity_To_Do.axml إضافة تعريف زر تسجيل الدخول المستخدم التالي قبل الزر AddItem الموجود:
<Button android:id="@+id/buttonLoginUser" android:layout_width="wrap_content" android:layout_height="wrap_content" android:onClick="LoginUser" android:text="@string/login_button_text" />
إضافة العنصر التالي إلى ملف موارد Strings.xml:
<string name="login_button_text">Sign in</string>
افتح ملف AndroidManifest.xml ثم أضف التعليمة البرمجية التالية داخل
<application>
عنصر XML:<activity android:name="com.microsoft.windowsazure.mobileservices.authentication.RedirectUrlActivity" android:launchMode="singleTop" 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="{url_scheme_of_your_app}" android:host="easyauth.callback" /> </intent-filter> </activity>
في Visual Studio أو Xamarin Studio ، قم بتشغيل مشروع العميل على جهاز أو محاكي وقم بتسجيل الدخول باستخدام موفر الهوية الذي اخترته. عند تسجيل الدخول بنجاح، سيعرض التطبيق معرف تسجيل الدخول الخاص بك وقائمة عناصر المهام، ويمكنك إجراء تحديثات على البيانات.
استكشاف الأخطاء وإصلاحها
تعطل التطبيق مع Java.Lang.NoSuchMethodError: No static method startActivity
في بعض الحالات، يتم عرض التعارضات في حزم الدعم كمجرد تحذير في Visual studio، ولكن تعطل التطبيق مع هذا الاستثناء في وقت التشغيل. في هذه الحالة ، تحتاج إلى التأكد من أن جميع حزم الدعم المشار إليها في مشروعك لها نفس الإصدار. تعتمد Xamarin.Android.Support.CustomTabs
حزمة NuGet لتطبيقات Azure Mobile Apps على النظام الأساسي لنظام Android، لذلك إذا كان مشروعك يستخدم حزم دعم أحدث، فأنت بحاجة إلى تثبيت هذه الحزمة بالإصدار المطلوب مباشرة لتجنب التعارضات.