在本文中,将说明如何创建具有Facebook登录名的Android应用。
Android应用程序中使用了多种社交登录功能。在这里,我们将学习使用Facebook进行社交登录,因此需要将Facebook SDK集成到项目中以利用Facebook登录。
以下是如何执行此操作的各个步骤;
- 您需要做的第一件事是拥有Facebook开发者帐户,然后创建一个新应用。
- 安装Android Studio (> = 3.0),然后打开/创建要在其中添加Facebook登录名的项目。
- 在您的项目中,将以下代码添加到您的Gradle脚本-> build.gradle (项目)中。
buildscript{ repositories { jcenter() } }
- 现在,在您的项目中使用最新版本的Facebook Login SDK在Gradle Scripts-> build.gradle (Module:app)中添加以下代码。
dependencies { implementation 'com.facebook.android:facebook-android-sdk:5.0.0' }
- 同步您的项目
- 现在打开app-> res-> values- >字符串.xml文件以添加以下行,并将[APP_ID]替换为您的APP_ID,您可以从Facebook Developer控制台获取该名称。
[APP_ID] fb[APP_ID] - 打开app-> manifest-> AndroidManifest.xml文件,并将此行添加到application元素之外。
- 在AndroidManifest.xml文件的application元素内添加此meta-data元素:
- 现在您需要的第一件事是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) { } }
- 现在,在模拟器或连接的设备上运行您的应用程序。您将在logcat中看到Key Hash值,并将其保存以备后用。
- 转到Facebook Developers控制台,然后选择设置->基本->添加平台(在页面底部),将弹出一个弹出窗口以选择一个平台。选择Android作为平台。
- 在“ Google Play包名称”下添加您的项目包名称。添加类名在登录会像“LoginActivity”项目实施,也可以添加在“键哈希表”的密钥散列值。
- 现在回到android studio,在您的* .xml布局文件中添加以下自定义按钮:
- 在应用程序-> res-> styles.xml文件中添加以下代码:
- 您可以相应地自定义此按钮,或者代替上面的自定义按钮,也可以将Facebook默认按钮也用作Facebook LoginButton。
- 在应用程序-> res- > drawable文件夹中创建名为‘bg_button_facebook.xml’的可绘制文件,并粘贴以下代码:
- 现在,在*中初始化按钮。 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")); } }); ... } ...
- 在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()); } }); } - 现在,添加另一个必需的方法“ 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(); }
- 在同一活动的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); }
- 现在,您已经完成了编码。在设备或仿真器中运行您的应用程序。现在,您也可以在应用程序中使用Facebook登录。
- 如果您想将应用程序上传到Play商店,则必须在Facebook右上角为开发者启用“状态” ,为此首先请按照以下屏幕截图中的设置在设置->基本中添加隐私权政策网址。现在保存更改并从仪表板启用状态。