📜  如何使用Android应用程序创建Facebook登录?

📅  最后修改于: 2021-05-13 15:59:28             🧑  作者: Mango

在本文中,将说明如何创建具有Facebook登录名的Android应用。

Android应用程序中使用了多种社交登录功能。在这里,我们将学习使用Facebook进行社交登录,因此需要将Facebook SDK集成到项目中以利用Facebook登录。

以下是如何执行此操作的各个步骤;

  1. 您需要做的第一件事是拥有Facebook开发者帐户,然后创建一个新应用。

    在Facebook控制台上创建应用

  2. 安装Android Studio (> = 3.0),然后打开/创建要在其中添加Facebook登录名的项目。
  3. 在您的项目中,将以下代码添加到您的Gradle脚本-> build.gradle (项目)中。
    buildscript{
        repositories {
            jcenter()
        }
    }
    
  4. 现在,在您的项目中使用最新版本的Facebook Login SDK在Gradle Scripts-> build.gradle (Module:app)中添加以下代码。
    dependencies {
         implementation 'com.facebook.android:facebook-android-sdk:5.0.0'
    }
    
  5. 同步您的项目
  6. 现在打开app-> res-> values- >字符串.xml文件以添加以下行,并将[APP_ID]替换为您的APP_ID,您可以从Facebook Developer控制台获取该名称。
    [APP_ID]
    fb[APP_ID]
    

  7. 打开app-> manifest-> AndroidManifest.xml文件,并将此行添加到application元素之外。
    
    
  8. AndroidManifest.xml文件的application元素内添加此meta-data元素:
    
    
    
  9. 现在您需要的第一件事是Key Hash ,因此在Facebook登录代码前的活动类中添加以下行:
    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_login);
      
        ... printHashKey();
        ...
    }
      
    ...
      
        public void
        printHashKey()
    {
      
        // Add code to print out the key hash
        try {
      
            PackageInfo info
                = getPackageManager().getPackageInfo(
                    "com.android.facebookloginsample",
                    PackageManager.GET_SIGNATURES);
      
            for (Signature signature : info.signatures) {
      
                MessageDigest md
                    = MessageDigest.getInstance("SHA");
                md.update(signature.toByteArray());
                Log.d("KeyHash:",
                      Base64.encodeToString(
                          md.digest(),
                          Base64.DEFAULT));
            }
        }
      
        catch (PackageManager.NameNotFoundException e) {
        }
      
        catch (NoSuchAlgorithmException e) {
        }
    }
    
  10. 现在,在模拟器或连接的设备上运行您的应用程序。您将在logcat中看到Key Hash值,并将其保存以备后用。
  11. 转到Facebook Developers控制台,然后选择设置->基本->添加平台(在页面底部),将弹出一个弹出窗口以选择一个平台。选择Android作为平台。
  12. 在“ Google Play包名称”下添加您的项目包名称。添加类名在登录会像“LoginActivity”项目实施,也可以添加在“键哈希表”的密钥散列值。

    Facebook android登录详细信息页面

  13. 现在回到android studio,在您的* .xml布局文件中添加以下自定义按钮:
  14. 应用程序-> res-> styles.xml文件中添加以下代码:
    
    
  15. 您可以相应地自定义此按钮,或者代替上面的自定义按钮,也可以将Facebook默认按钮也用作Facebook LoginButton。
  16. 应用程序-> res- > drawable文件夹中创建名为‘bg_button_facebook.xml’的可绘制文件,并粘贴以下代码:
    
    
        
        
    
    
  17. 现在,在*中初始化按钮。 Java文件和一些用于初始化Facebook SDK的代码:
    // Declare variables
    private Button mButtonFacebook;
      
    private CallbackManager callbackManager;
    private LoginManager loginManager;
      
    ...
      
        @Override
        protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_login);
      
        ...
      
            mButtonFacebook
            = findViewById(R.id.button_facebook);
        FacebookSdk.sdkInitialize(MainActivity.this);
        callbackManager = CallbackManager.Factory.create();
        facebookLogin();
      
        ...
      
            mButtonFacebook.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v)
                {
                    loginManager.logInWithReadPermissions(
                        MainActivity.this,
                        Arrays.asList(
                            "email",
                            "public_profile",
                            "user_birthday"));
                }
            });
        ...
    }
      
    ...
    
  18. 在Java文件的onCreate()外部添加“ facebookLogin”方法。这是Facebook登录响应的代码
    public void facebookLogin()
    {
      
        loginManager
            = LoginManager.getInstance();
        callbackManager
            = CallbackManager.Factory.create();
      
        loginManager
            .registerCallback(
                callbackManager,
                new FacebookCallback() {
      
                    @Override
                    public void onSuccess(LoginResult loginResult)
                    {
                        GraphRequest request = GraphRequest.newMeRequest(
      
                            loginResult.getAccessToken(),
      
                            new GraphRequest.GraphJSONObjectCallback() {
      
                                @Override
                                public void onCompleted(JSONObject object,
                                                        GraphResponse response)
                                {
      
                                    if (object != null) {
                                        try {
                                            String name = object.getString("name");
                                            String email = object.getString("email");
                                            String fbUserID = object.getString("id");
      
                                            disconnectFromFacebook();
      
                                            // do action after Facebook login success
                                            // or call your API
                                        }
                                        catch (JSONException | NullPointerException e) {
                                            e.printStackTrace();
                                        }
                                    }
                                }
                            });
      
                        Bundle parameters = new Bundle();
                        parameters.putString(
                            "fields",
                            "id, name, email, gender, birthday");
                        request.setParameters(parameters);
                        request.executeAsync();
                    }
      
                    @Override
                    public void onCancel()
                    {
                        Log.v("LoginScreen", "---onCancel");
                    }
      
                    @Override
                    public void onError(FacebookException error)
                    {
                        // here write code when get error
                        Log.v("LoginScreen", "----onError: "
                                                 + error.getMessage());
                    }
                });
    }
    
  19. 现在,添加另一个必需的方法“ disconnectFromFacebook”以进行登录集成,类似地,将其添加到onCreate外部。这用于断开应用程序与Facebook的连接,因为无需保持连接状态。
    public void disconnectFromFacebook()
    {
        if (AccessToken.getCurrentAccessToken() == null) {
            return; // already logged out
        }
      
        new GraphRequest(
            AccessToken.getCurrentAccessToken(),
            "/me/permissions/",
            null,
            HttpMethod.DELETE,
            new GraphRequest
                .Callback() {
                    @Override
                    public void onCompleted(GraphResponse graphResponse)
                    {
                        LoginManager.getInstance().logOut();
                    }
                })
            .executeAsync();
    }
    
  20. 在同一活动的onCreate外部添加“ onActivityResult”方法:
    @Override
    protected void onActivityResult(int requestCode,
                                    int resultCode,
                                    Intent data)
    {
      
        // add this line
        callbackManager.onActivityResult(
            requestCode,
            resultCode,
            data);
      
        super.onActivityResult(requestCode,
                               resultCode,
                               data);
    }
    
  21. 现在,您已经完成了编码。在设备或仿真器中运行您的应用程序。现在,您也可以在应用程序中使用Facebook登录
  22. 如果您想将应用程序上传到Play商店,则必须在Facebook右上角为开发者启用“状态” ,为此首先请按照以下屏幕截图中的设置设置->基本中添加隐私权政策网址。现在保存更改并从仪表板启用状态。

    Facebook登录隐私政策网址