使用Azure应用服务本地验证安卓脸书
認證是應用成功的關鍵。看看你的應用程序,我敢打賭,你的用戶首先要做的就是注冊或登錄到他們的帳戶。反過來,這可能會利用某種形式的社會認證。每個社會身份驗證提供者都有點不同,一些像臉書網這樣的用戶提供了一個原生SDK來簡化登錄過程,并為他們的服務提供額外的功能。此前,我們研究了如何將臉書網SDK集成到iOS中,以提供原生登錄體驗,以及如何與Azure應用程序的Azure應用程序集成。今天,我將向你展示如何使用臉書網Android SDK在Android和xamarin.forms簡化登錄過程。
為什么使用原生軟件開發工具包?
Azure移動應提供了一個簡單LoginAsync方法,在使用Chrome自定義標準執行安裝登錄時會執行。然而,這仍然要求用戶輸入他們現有的用戶名和密碼,即使他們已經在他們的設備上安裝了提供者的應用程序。利用本機SDK為臉書網、谷歌或微軟提供安全和精簡的經驗,并提供本地用戶界面控制,使您的用戶在登錄時感到安全。
使用臉書誰登錄
在我們開始將臉書網認證集成到我們的應用程序之前,我們必須在臉書開發網站上注冊一個新應用。
接著,我們要添加一個適當的OAuth重定向,可以通過添加“臉書網登錄”產品來完成:
對于這個應用程序,我們將使用Azure應用程序服務,這意味著我們可以指定一個重定向URL,例如:
https://[AppServiceApplicationURL]/.auth/login/facebook/callback
通過使用臉譜網文檔來閱讀Azure應用程序服務認證文檔,您可以了解更多關于配置的內容。
入門
隨著我們的臉書網應用程序的建立,我們現在可以開始集成臉譜網Android SDK,可以從NuGet安裝到我們的應用。 這是由臉書網提供給Xamarin.Android綁定到離線離線SDK , which allows us to use all of the features available to Java and Kotlin developers.這使我們能夠使用所有可用的java和Kotlin開發的特點。
When installing this NuGet, it’s important for us to ensure that we have installed the latest Android Support Libraries as well, as they are a dependency.
配置我們的應用
在實現登錄過程之前,必須執行一些額外的設置。我們可以在我們的字符串資源中添加我們收到的臉書網應用程序ID和應用程序的名稱:
點擊(此處)折疊或打開
<string name="app_name">Coffee Cups</string>
<string name="app_id">605355546285789</string>
臉書網SDK將尋找可以使用裝配標志公開的元數據。我傾向于把這些連同所需的權限放進入我的AssemblyInfo.cs文件:
點擊(此處)折疊或打開
[assembly: MetaData("com.facebook.sdk.ApplicationId", Value = "@string/app_id")]
[assembly: MetaData("com.facebook.sdk.ApplicationName", Value = "@string/app_name")]
?
[assembly: Permission(Name = Android.Manifest.Permission.Internet)]
[assembly: Permission(Name = Android.Manifest.Permission.WriteExternalStorage)]
在臉書注冊我們的安卓應用
我們可以在臉書網開發者網站上添加安卓平臺,這樣臉書網就有了更多關于我們應用程序的信息。這就要求我們的包名、類名、密鑰散列。
我們的包的名稱直接來自AndroidManifest.xml。MainActivity類名可以手動設置,如:
點擊(此處)折疊或打開
[Activity (Label = "Coffee Cups", Icon = "@drawable/icon",
????????Name = "com.refractored.coffeecups.MainActivity",
????????MainLauncher = true,
????????ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation)]
們關鍵的哈希值可以使用Android的密鑰庫簽名工具Visual Studio的發現。現在,我們可以使用默認的密鑰庫的調試,但是,我們將要使用的密鑰庫,我們使用我們的應用程序簽署發布App商店之前。
最后可以通過Visual Studio的Android Keystore Signature工具包.來查找關鍵的哈希值。 現在,我們可以使用默認的密鑰庫的調試,但是,在發布到應用商店之前,我們使用簽署發布應用的KeyStore。
添加一個臉書登錄按鈕
現在,是我們最后添加一個登錄按鈕來啟動整個過程的時候了。如果你正在使用Android原生用戶接口開發一個Xamarin.Android應用,你可以從臉書開發工具包來簡單插入一個登錄按鈕:
點擊(此處)折疊或打開
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
????xmlns:facebook="http://schemas.android.com/apk/res-auto"
????android:orientation="vertical"
????android:layout_width="fill_parent"
????android:layout_height="fill_parent"
????android:background="#FFF">
????????<com.facebook.login.widget.LoginButton
????????????android:layout_width="wrap_content"
????????????android:layout_height="wrap_content"
????????????android:layout_marginTop="5dp"
????????????android:layout_gravity="center_horizontal"
????????????facebook:com_facebook_confirm_logout="false"
????????????facebook:com_facebook_tooltip_mode="never_display" />
</LinearLayout>
Xamarin.Forms 自定義控件
如果你使用Xamarin.Forms,我們必須寫一個非常小的自定義控件。首先,在我們的共享代碼中,創建一個可以在XAML中訪問的臉書登錄按鈕:
點擊(此處)折疊或打開
public class FacebookLoginButton : Xamarin.Forms.View
{
}
然后能夠將其添加到我們的應用中的任何界面:
點擊(此處)折疊或打開
</code><?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
?????????????xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
?????????????xmlns:controls="clr-namespace:CoffeeCups.View;assembly:CoffeeCups"
?????????????x:Class="CoffeeCups.View.LoginPage">
????<ContentPage.Content>
????????<StackLayout HorizontalOptions="CenterAndExpand"
?????????????????????VerticalOptions="CenterAndExpand"
?????????????????????Padding="8">
????????????<Label Text="Login for Coffee!"
???????????????????VerticalOptions="Center"/>
????????????<controls:FacebookLoginButton/>
????????</StackLayout>
????</ContentPage.Content>
</ContentPage>
然后我們可以寫個小的定制渲染器 , 該渲染器將顯示本地登錄按鈕:
點擊(此處)折疊或打開
using CoffeeCups.View;
using Xamarin.Forms;
using CoffeeCups.Droid;
using Xamarin.Forms.Platform.Android;
using Xamarin.Facebook.Login.Widget;
?
[assembly: ExportRenderer(typeof(FacebookLoginButton), typeof(FacebookLoginButtonRenderer))]
namespace CoffeeCups.Droid
{
????public class FacebookLoginButtonRenderer : ViewRenderer<FacebookLoginButton, LoginButton>
????{
????????LoginButton facebookLoginButton;
????????protected override void OnElementChanged(ElementChangedEventArgs<FacebookLoginButton> e)
????????{
????????????base.OnElementChanged(e);
????????????if(Control == null || facebookLoginButton == null)
????????????{
????????????????facebookLoginButton = new LoginButton(Forms.Context);
????????????????SetNativeControl(facebookLoginButton);
????????????}
????????}
????????
????}
}
因為我們使用了原生臉書SDK,當用戶登錄就可以看到彈出原生 臉書登錄,或者,如果他們已經安裝了臉書應用程序,他們可以使用一個按鈕點擊立即登錄應用:
控制登錄過程
當用戶登錄時,在登錄成功時,取消時,或者錯誤發生時我們必須處理實際的登錄事件。在我們的MainActivity中,或者其它顯示登錄按鈕的Activity中,我們實現一個簡單的接口IFacebookCallback來處理這些事件。
點擊(此處)折疊或打開
class FacebookCallback<TResult> : Java.Lang.Object, IFacebookCallback where TResult : Java.Lang.Object
{
????public Action HandleCancel { get; set; }
????public Action<FacebookException> HandleError { get; set; }
????public Action<TResult> HandleSuccess { get; set; }
?
????public void OnCancel()
????{
????????HandleCancel?.Invoke();
????}
?
????public void OnError(FacebookException error)
????{
????????HandleError?.Invoke(error);
????}
?
????public void OnSuccess(Java.Lang.Object result)
????{
????????HandleSuccess?.Invoke(result.JavaCast<TResult>());
????}
}
現在,我們可以初始化臉書SDK,注冊登錄回調,妥善處理:
點擊(此處)折疊或打開
ICallbackManager callbackManager;
?
protected override void OnCreate (Bundle bundle)
{
?
???//Standard OnCreate Intialization
?
????FacebookSdk.SdkInitialize(ApplicationContext);
????callbackManager = CallbackManagerFactory.Create();
?
????var loginCallback = new FacebookCallback<LoginResult>
????{
????????HandleSuccess = loginResult =>
????????{
?
????????????var facebookToken = AccessToken.CurrentAccessToken.Token;
????????????//Login here
????????},
????????HandleCancel = () =>
????????{
????????????//Handle Cancel
????????},
????????HandleError = loginError =>
????????{
????????????//Handle Error
????????}
????};
?
????LoginManager.Instance.RegisterCallback(callbackManager, loginCallback);
?
????//Finish or load Xamarin.Forms app here
}
?
protected override void OnActivityResult(int requestCode, Result resultCode, Intent data)
{
????base.OnActivityResult(requestCode, resultCode, data);
?
????callbackManager.OnActivityResult(requestCode, (int)resultCode, data);
}
注意,我們現在可以訪問臉書訪問令牌,它可以使我們登錄,并且讓我們附加調用臉書服務。
登錄應用服務
使用令牌,我們可以使用MobileServiceClient登錄我們的Azure應用服務。
點擊(此處)折疊或打開
var facebookToken = AccessToken.CurrentAccessToken.Token;
var token = new JObject();
token["access_token"] = facebookToken;
var user = await Client.LoginAsync(MobileServiceAuthenticationProvider.Facebook, token);
當我們這樣做時,我們得到一個MobileServiceUser, 它包含一個包含我們后臺APP服務的新令牌。需要注意的是 , 該令牌是與 臉書令牌發送給我們 ,并且,在這個功能中,它將重新混合存儲到MobileServiceUser中。
了解更多
正如我們已經看到這里,這是我們的優勢,在使用本地認證SDK時可以簡化用戶登錄過程應用,這只需要幾行代碼。為了學習更多關于在你的移動應用中的Azure移動應用, 請確認閱讀大文檔 ,它包含了怎樣通過自定義URL設計添加其它登錄行為到你的移動應用中。? 此外,你可以找到一個我的簡單應用Coffee Cup, 我用來證明該概念在這篇博文中 ,請訪問GitHub。
轉載于:https://blog.51cto.com/3353175/1967299
總結
以上是生活随笔為你收集整理的使用Azure应用服务本地验证安卓脸书的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 免费申请Firefly-RK3288开源
- 下一篇: 由旋转画廊,看自定义RecyclerVi