使用Azure应用服务本地验证安卓脸书
認(rèn)證是應(yīng)用成功的關(guān)鍵。看看你的應(yīng)用程序,我敢打賭,你的用戶首先要做的就是注冊或登錄到他們的帳戶。反過來,這可能會利用某種形式的社會認(rèn)證。每個社會身份驗證提供者都有點不同,一些像臉書網(wǎng)這樣的用戶提供了一個原生SDK來簡化登錄過程,并為他們的服務(wù)提供額外的功能。此前,我們研究了如何將臉書網(wǎng)SDK集成到iOS中,以提供原生登錄體驗,以及如何與Azure應(yīng)用程序的Azure應(yīng)用程序集成。今天,我將向你展示如何使用臉書網(wǎng)Android SDK在Android和xamarin.forms簡化登錄過程。
為什么使用原生軟件開發(fā)工具包?
Azure移動應(yīng)提供了一個簡單LoginAsync方法,在使用Chrome自定義標(biāo)準(zhǔn)執(zhí)行安裝登錄時會執(zhí)行。然而,這仍然要求用戶輸入他們現(xiàn)有的用戶名和密碼,即使他們已經(jīng)在他們的設(shè)備上安裝了提供者的應(yīng)用程序。利用本機SDK為臉書網(wǎng)、谷歌或微軟提供安全和精簡的經(jīng)驗,并提供本地用戶界面控制,使您的用戶在登錄時感到安全。
使用臉書誰登錄
在我們開始將臉書網(wǎng)認(rèn)證集成到我們的應(yīng)用程序之前,我們必須在臉書開發(fā)網(wǎng)站上注冊一個新應(yīng)用。
接著,我們要添加一個適當(dāng)?shù)腛Auth重定向,可以通過添加“臉書網(wǎng)登錄”產(chǎn)品來完成:
對于這個應(yīng)用程序,我們將使用Azure應(yīng)用程序服務(wù),這意味著我們可以指定一個重定向URL,例如:
https://[AppServiceApplicationURL]/.auth/login/facebook/callback
通過使用臉譜網(wǎng)文檔來閱讀Azure應(yīng)用程序服務(wù)認(rèn)證文檔,您可以了解更多關(guān)于配置的內(nèi)容。
入門
隨著我們的臉書網(wǎng)應(yīng)用程序的建立,我們現(xiàn)在可以開始集成臉譜網(wǎng)Android SDK,可以從NuGet安裝到我們的應(yīng)用。 這是由臉書網(wǎng)提供給Xamarin.Android綁定到離線離線SDK , which allows us to use all of the features available to Java and Kotlin developers.這使我們能夠使用所有可用的java和Kotlin開發(fā)的特點。
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.
配置我們的應(yīng)用
在實現(xiàn)登錄過程之前,必須執(zhí)行一些額外的設(shè)置。我們可以在我們的字符串資源中添加我們收到的臉書網(wǎng)應(yīng)用程序ID和應(yīng)用程序的名稱:
點擊(此處)折疊或打開
<string name="app_name">Coffee Cups</string>
<string name="app_id">605355546285789</string>
臉書網(wǎng)SDK將尋找可以使用裝配標(biāo)志公開的元數(shù)據(jù)。我傾向于把這些連同所需的權(quán)限放進(jìn)入我的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)]
在臉書注冊我們的安卓應(yīng)用
我們可以在臉書網(wǎng)開發(fā)者網(wǎng)站上添加安卓平臺,這樣臉書網(wǎng)就有了更多關(guān)于我們應(yīng)用程序的信息。這就要求我們的包名、類名、密鑰散列。
我們的包的名稱直接來自AndroidManifest.xml。MainActivity類名可以手動設(shè)置,如:
點擊(此處)折疊或打開
[Activity (Label = "Coffee Cups", Icon = "@drawable/icon",
????????Name = "com.refractored.coffeecups.MainActivity",
????????MainLauncher = true,
????????ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation)]
們關(guān)鍵的哈希值可以使用Android的密鑰庫簽名工具Visual Studio的發(fā)現(xiàn)。現(xiàn)在,我們可以使用默認(rèn)的密鑰庫的調(diào)試,但是,我們將要使用的密鑰庫,我們使用我們的應(yīng)用程序簽署發(fā)布App商店之前。
最后可以通過Visual Studio的Android Keystore Signature工具包.來查找關(guān)鍵的哈希值。 現(xiàn)在,我們可以使用默認(rèn)的密鑰庫的調(diào)試,但是,在發(fā)布到應(yīng)用商店之前,我們使用簽署發(fā)布應(yīng)用的KeyStore。
添加一個臉書登錄按鈕
現(xiàn)在,是我們最后添加一個登錄按鈕來啟動整個過程的時候了。如果你正在使用Android原生用戶接口開發(fā)一個Xamarin.Android應(yīng)用,你可以從臉書開發(fā)工具包來簡單插入一個登錄按鈕:
點擊(此處)折疊或打開
<?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,我們必須寫一個非常小的自定義控件。首先,在我們的共享代碼中,創(chuàng)建一個可以在XAML中訪問的臉書登錄按鈕:
點擊(此處)折疊或打開
public class FacebookLoginButton : Xamarin.Forms.View
{
}
然后能夠?qū)⑵涮砑拥轿覀兊膽?yīng)用中的任何界面:
點擊(此處)折疊或打開
</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,當(dāng)用戶登錄就可以看到彈出原生 臉書登錄,或者,如果他們已經(jīng)安裝了臉書應(yīng)用程序,他們可以使用一個按鈕點擊立即登錄應(yīng)用:
控制登錄過程
當(dāng)用戶登錄時,在登錄成功時,取消時,或者錯誤發(fā)生時我們必須處理實際的登錄事件。在我們的MainActivity中,或者其它顯示登錄按鈕的Activity中,我們實現(xiàn)一個簡單的接口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>());
????}
}
現(xiàn)在,我們可以初始化臉書SDK,注冊登錄回調(diào),妥善處理:
點擊(此處)折疊或打開
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);
}
注意,我們現(xiàn)在可以訪問臉書訪問令牌,它可以使我們登錄,并且讓我們附加調(diào)用臉書服務(wù)。
登錄應(yīng)用服務(wù)
使用令牌,我們可以使用MobileServiceClient登錄我們的Azure應(yīng)用服務(wù)。
點擊(此處)折疊或打開
var facebookToken = AccessToken.CurrentAccessToken.Token;
var token = new JObject();
token["access_token"] = facebookToken;
var user = await Client.LoginAsync(MobileServiceAuthenticationProvider.Facebook, token);
當(dāng)我們這樣做時,我們得到一個MobileServiceUser, 它包含一個包含我們后臺APP服務(wù)的新令牌。需要注意的是 , 該令牌是與 臉書令牌發(fā)送給我們 ,并且,在這個功能中,它將重新混合存儲到MobileServiceUser中。
了解更多
正如我們已經(jīng)看到這里,這是我們的優(yōu)勢,在使用本地認(rèn)證SDK時可以簡化用戶登錄過程應(yīng)用,這只需要幾行代碼。為了學(xué)習(xí)更多關(guān)于在你的移動應(yīng)用中的Azure移動應(yīng)用, 請確認(rèn)閱讀大文檔 ,它包含了怎樣通過自定義URL設(shè)計添加其它登錄行為到你的移動應(yīng)用中。? 此外,你可以找到一個我的簡單應(yīng)用Coffee Cup, 我用來證明該概念在這篇博文中 ,請訪問GitHub。
轉(zhuǎn)載于:https://blog.51cto.com/3353175/1967299
總結(jié)
以上是生活随笔為你收集整理的使用Azure应用服务本地验证安卓脸书的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 免费申请Firefly-RK3288开源
- 下一篇: 由旋转画廊,看自定义RecyclerVi