zoukankan      html  css  js  c++  java
  • Android 版 Facebook 登录

    Android 版 Facebook SDK 让用户可以通过 Facebook 登录注册您的应用。通过 Facebook 登录您的应用时,用户可以向应用授予权限,以便您可以检索信息或以用户的身份在 Facebook 执行操作。

    如 果使用 Android 版 Facebook SDK 4.14.0 开发应用,Facebook 登录功能就会自动与 Facebook Lite 集成。如果用户未安装 Android 版 Facebook 应用,Facebook 登录就会使用 Facebook Lite,展示登录界面并获得登录凭证。旧版 SDK 要求用户必须安装 Facebook 应用。

    要详细了解 Facebook 登录,请参阅登录门户。要详细了解使用案例和功能,请参阅概览。如需获取关于权限的信息,请参阅 Android 权限管理Facebook 登录相关的权限

    按照以下步骤部署 Facebook 登录:

    1.前提条件

    2.添加 Facebook“登录”按钮

    3.注册回调,处理登录结果

    4.启用 Chrome 自定义选项卡

    5.检查登录状态


    另请参阅后续步骤了解进阶主题。

    1.前提条件

    开始实施 Facebook 登录之前,请确保已完成下列设置。

    A. 下载 Facebook 应用

    点击下方的按钮,下载 Facebook 应用。

    下载 Android 版 Facebook

    B. 创建开发者帐户

    如果没有 Facebook 开发者帐户,请点击下面的按钮创建。您可以通过 Facebook 开发者帐户使用开发者工具和创建 Facebook 应用。

    创建开发者帐户

    C. 下载 Android SDK

    下载最新的 Android 版 Facebook SDK。

    下载 Android SDK

    D. 获得 Facebook 应用编号、添加 SDK、以及向资料页添加密钥散列

    点击下方的按钮,按照快速入门操作,也可以按照新手入门中的步骤操作。

    Android 快速入门

    E. 为应用启用单点登录

    为应用启用单点登录的方法是:在 Facebook 开发者网站的我的应用中选择您的应用,然后选择应用的设置,并将单点登录设置为

    F. 将 FacebookActivity 添加到 AndroidManifest.xml 中。

    <activity android:name="com.facebook.FacebookActivity"
              android:configChanges=
                     "keyboard|keyboardHidden|screenLayout|screenSize|orientation"
              android:theme="@android:style/Theme.Translucent.NoTitleBar"
              android:label="@string/app_name" />

    2.添加 Facebook“登录”按钮

    将 Facebook 登录添加到应用的最简单方法是从 SDK 添加 LoginButton。这是 Button 的自定义视图实施。您可以在应用中使用该按钮实施 Facebook 登录。

    您可以结合 LoginButton 使用 SDK 提供的以下类:

    • LoginManager — 使用请求的读取或发布权限开始登录流程。
    • CallbackManager — 用于将调用按指定路径发送回 Facebook SDK 及您注册的回调。您应从开始活动或 onActivityResult 片段调用它。
    • AccessToken:— 使用该类图谱 API 请求。它会显示用户编号以及用户接受和拒绝的权限。
    • Profile — 该类包含关于已登录用户的基本信息。

    LoginButton 是一个界面元素,其中包含 LoginManager 具备的功能。因此,当用户点击此按钮时,就会以 LoginManager 中设置的权限开始登录。按钮随登录状态变化,并根据用户的身份验证状态显示正确文本。

    要添加 Facebook 登录按钮,请先将其添加到布局 XML 文件中,并使用完整的类名称 com.facebook.widget.LoginButton

    <com.facebook.login.widget.LoginButton
        android:id="@+id/login_button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"
        android:layout_marginTop="30dp"
        android:layout_marginBottom="30dp" />   
         

    然后在界面中设置按钮:将按钮添加到片段中,并更新活动以使用片段。

    您可以自定义 Login button 的属性,并在 onCreateView() 方法中注册一个回调。

    您可以自定义的属性包括 LoginBehaviorDefaultAudienceToolTipPopup.Style 以及 LoginButton 的相关权限。例如:

    @Override
    public View onCreateView(
            LayoutInflater inflater,
            ViewGroup container,
            Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.splash, container, false);
    
        loginButton = (LoginButton) view.findViewById(R.id.login_button);
        loginButton.setReadPermissions("email");
        // If using in a fragment
        loginButton.setFragment(this);    
        // Other app specific specialization
    
        // Callback registration
        loginButton.registerCallback(callbackManager, new FacebookCallback<LoginResult>() {
            @Override
            public void onSuccess(LoginResult loginResult) {
                // App code
            }
    
            @Override
            public void onCancel() {
                // App code
            }
    
            @Override
            public void onError(FacebookException exception) {
                // App code
            }
        });    
    }
    

    如果您在片段中使用 LoginButton,需要通过调用 setFragment 来设置按钮上的片段,如图所示。

    之后您需要调用 FacebookSdk.sdkInitialize 来初始化 SDK,然后调用 CallbackManager.Factory.create 来创建回调管理器,以便处理登录响应。以下是在片段中添加回调的示例:

    public class MainActivity extends FragmentActivity {
        CallbackManager callbackManager;
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            FacebookSdk.sdkInitialize(getApplicationContext());
            callbackManager = CallbackManager.Factory.create();
            LoginButton loginButton = (LoginButton) view.findViewById(R.id.usersettings_fragment_login_button);
            loginButton.registerCallback(callbackManager, new FacebookCallback<LoginResult>() { ... });
        }

    最后您应调用 callbackManager.onActivityResult,以便通过 callbackManager 将登录结果传递至 LoginManager

    3.注册回调

    为了响应登录结果,您需要使用 LoginManagerLoginButton 注册回调。如果您使用 LoginButton 注册回调,就不需要在登录管理器中注册回调。

    将回调添加到活动或片段的 onCreate() 方法:

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        FacebookSdk.sdkInitialize(this.getApplicationContext());
    
        callbackManager = CallbackManager.Factory.create();
    
        LoginManager.getInstance().registerCallback(callbackManager,
                new FacebookCallback<LoginResult>() {
                    @Override
                    public void onSuccess(LoginResult loginResult) {
                        // App code
                    }
    
                    @Override
                    public void onCancel() {
                         // App code
                    }
    
                    @Override
                    public void onError(FacebookException exception) {
                         // App code   
                    }
        });
    }
    

    如果登录成功,LoginResult 参数将拥有新的 AccessToken 及最新授予或拒绝的权限。

    您不需要 registerCallback 来保证登录成功,可以选择使用下述 AccessTokenTracker 类跟踪当前访问口令的更改。

    之后在 onActivityResult() 中,将登录结果转发到在 onCreate() 中创建的 callbackManager

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

    您集成到 FacebookSDK 登录或分享的所有活动和片段都应将 onActivityResult 转发给 callbackManager

    4.启用 Chrome 自定义选项卡

    将意图筛选条件添加到 manifest 文件,将 fb_login_protocol_scheme 添加到 strings.xml 文件,启用 Chrome 自定义选项卡。启用 Chrome 自定义选项卡时,如果未安装 Facebook 应用,SDK 会在 Chrome 自定义选项卡中展示“登录”对话框,而不是网页视图中。因此,如果用户已在 Chrome 浏览器中登录 Facebook,则无需再次输入凭证。

    AndroidManifest.xml 文件添加以下意图筛选条件:

    <activity
        android:name="com.facebook.CustomTabActivity"
        android:exported="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="@string/fb_login_protocol_scheme" />
        </intent-filter>
    </activity>
    

    strings.xml 文件中添加以下代码:

    // if your App ID is 1234567, you should use fb1234567
    <string name="fb_login_protocol_scheme">fbAPP_ID</string>
    

    5.检查登录状态

    您的应用一次只能登录一个用户,LoginManager 会为该用户设置当前的 AccessTokenProfile。FacebookSDK 会将该数据保存在共享首选项中,并在 SDK 初始化过程中进行设置。您可以通过检查 AccessToken.getCurrentAccessToken() 和 Profile.getCurrentProfile() 来查看用户是否已登录。

    获取当前口令

    您可以通过 SDK 从缓存或应用书签中(如果应用冷启动)加载 AccessToken.getCurrentAccessToken。您应在 ActivityonCreate 方法中检查它的有效性:

    public class MainActivity extends FragmentActivity {
        CallbackManager callbackManager;
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            FacebookSdk.sdkInitialize(getApplicationContext());
            callbackManager = CallbackManager.Factory.create();
            LoginManager.getInstance().registerCallback(callbackManager, new FacebookCallback<LoginResult>() {...});
        }

    稍后您可以执行实际登录,例如在自定义按钮的 OnClickListener 中:

     LoginManager.getInstance().logInWithReadPermissions(this, Arrays.asList("public_profile"));

    最后,在 ActivityonActivityResult 中,将结果传递到 CallbackManager

    @Override
     protected void onActivityResult(final int requestCode, final int resultCode, final Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        callbackManager.onActivityResult(requestCode, resultCode, data);
    }
  • 相关阅读:
    nginx
    httprunner(8)用例调用-RunTestCase
    httprunner(7)测试用例RunRequest
    jmespath(2)投影Projections
    jmespath(1)基础语法
    httprunner(6)配置信息config
    httprunner(5)编写测试用例
    Pytest(18)pytest接口自动化完整框架思维导图
    charles(3)charles防止30分钟自动重启
    charles(2)MAC Charles关闭后无法上网
  • 原文地址:https://www.cnblogs.com/android-blogs/p/5896654.html
Copyright © 2011-2022 走看看