{"id":278,"date":"2020-03-24T16:42:10","date_gmt":"2020-03-24T08:42:10","guid":{"rendered":"https:\/\/badgameshow.com\/fly\/?p=278"},"modified":"2020-05-19T14:23:08","modified_gmt":"2020-05-19T06:23:08","slug":"android-%e5%b0%8e%e5%85%a5fb-login","status":"publish","type":"post","link":"https:\/\/badgameshow.com\/fly\/android-%e5%b0%8e%e5%85%a5fb-login\/","title":{"rendered":"Android \u5c0e\u5165FB Login"},"content":{"rendered":"<h3>1.\u5148\u8a3b\u518aFB\u5f8c\u53f0\u5e33\u865f<\/h3>\n<p><a href=\"https:\/\/developers.facebook.com\/\" target=\"_blank\" rel=\"noopener\">https:\/\/developers.facebook.com\/<\/a><\/p>\n<h3>2.\u5efa\u7acb\u61c9\u7528\u7a0b\u5f0f<\/h3>\n<p>\u6211\u7684\u61c9\u7528\u7a0b\u5f0f > \u5efa\u7acb\u61c9\u7528\u7a0b\u5f0f > \u65b0\u589e\u7522\u54c1<\/p>\n<h3>3.\u9078\u64c7Facebook\u767b\u5165<\/h3>\n<p>\u532f\u5165FB SDK<br \/>\nGradle(Project)<\/p>\n<pre><code class=\"language-Gradle line-numbers\">buildscript {\n    repositories {\n        mavenCentral()\n    }\n}\n<\/code><\/pre>\n<p>Gradle(Module)<\/p>\n<pre><code class=\"language-Gradle line-numbers\">dependencies {\n    implementation 'com.facebook.android:facebook-android-sdk:[4,5)'\n}\n<\/code><\/pre>\n<h3>4.\u9078\u64c7\u81ea\u5df1\u5c08\u6848PackageName<\/h3>\n<p>\u5230AndroidManifest.xml<br \/>\n\u5957\u4ef6\u540d\u7a31 package<\/p>\n<pre><code class=\"language-XML line-numbers\">&lt;manifest xmlns:android=\"http:\/\/schemas.android.com\/apk\/res\/android\"\nxmlns:tools=\"http:\/\/schemas.android.com\/tools\"\npackage=\"com.doughpack\"&gt;\n<\/code><\/pre>\n<p>\u9810\u8a2d\u6d3b\u52d5\u985e\u5225\u540d\u7a31 package + .SplashAct<\/p>\n<pre><code class=\"language-XML line-numbers\">&lt;activity\n      android:name=\".module.home.ui.activity.SplashAct\"\n      android:screenOrientation=\"portrait\"\n      android:theme=\"@style\/AppTheme.Full\"&gt;\n      &lt;intent-filter&gt;\n          &lt;action android:name=\"android.intent.action.MAIN\" \/&gt;\n\n          &lt;category android:name=\"android.intent.category.LAUNCHER\" \/&gt;\n     &lt;\/intent-filter&gt;\n &lt;\/activity&gt;\n<\/code><\/pre>\n<h3>5.\u5bc6\u9470\u96dc\u6e4a<\/h3>\n<p>\u5230\u96fb\u8166\u74b0\u5883\u8b8a\u6578 > \u7cfb\u7d71\u8b8a\u6578\u65b0\u589e\u5230java\/bin\u4e0b\u7684\u8def\u5f91<br \/>\n\u958b\u555fgit bash<\/p>\n<pre><code class=\"line-numbers\">keytool -exportcert -alias androiddebugkey -keystore ~\/.android\/debug.keystore | openssl sha1 -binary | openssl base64\n<\/code><\/pre>\n<p>\u8f38\u5165\u5bc6\u78bcandroid \u5c31\u6703\u6709\u96dc\u6e4a\u78bc<\/p>\n<h3>6.\u6dfb\u52a0\u8cc7\u6e90\u5230AndroidManifest<\/h3>\n<p>\u958b\u555f \/app\/res\/values\/strings.xml \u6a94\u6848\u3002<\/p>\n<p><string name=\"facebook_app_id\">1161725410572948<\/string> <string name=\"fb_login_protocol_scheme\">fb1161725410572948<\/string><\/p>\n<p>\u5728 application \u5143\u7d20\u5f8c\u65b9\u52a0\u5165\u4e0b\u5217 uses-permission \u5143\u7d20\uff1a<\/p>\n<p><uses-permission android:name=\"android.permission.INTERNET\"\/><\/p>\n<p>\u5728 application \u5143\u7d20\u5167\u52a0\u5165\u4e0b\u5217 meta-data \u5143\u7d20\u3001Facebook \u6d3b\u52d5\uff0c\u4ee5\u53ca Chrome \u81ea\u8a02\u9801\u7c64\u7684\u6d3b\u52d5\u548c\u610f\u5716\u7be9\u9078\u5668<br \/>\n<meta-data android:name=\"com.facebook.sdk.ApplicationId\" android:value=\"@string\/facebook_app_id\"\/> <activity android:name=\"com.facebook.FacebookActivity\" android:configChanges= \"keyboard|keyboardHidden|screenLayout|screenSize|orientation\" android:label=\"@string\/app_name\" \/> <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><\/p>\n<h3>7.\u5728Application\u521d\u59cb\u5316FB<\/h3>\n<pre><code class=\"language-Java line-numbers\">@Override\npublic void onCreate() {\n   super.onCreate();\n   FacebookSdk.sdkInitialize(getApplicationContext());\n   AppEventsLogger.activateApp(this);\n}\n<\/code><\/pre>\n<h3>8.\u65b0\u589eFB\u767b\u5165\u6309\u9215<\/h3>\n<pre><code class=\"language-XML line-numbers\">&lt;com.facebook.login.widget.LoginButton\n  android:id=\"@+id\/login_button\"\n  android:layout_width=\"wrap_content\"\n  android:layout_height=\"wrap_content\"\n  android:layout_gravity=\"center_horizontal\"\n  android:layout_marginTop=\"30dp\"\n  android:layout_marginBottom=\"30dp\" \/&gt;\n<\/code><\/pre>\n<h3>9.\u8a3b\u518aCallBack<\/h3>\n<pre><code class=\"language-Java line-numbers\">callbackManager = CallbackManager.Factory.create();\nLoginManager instance = LoginManager.getInstance();\n\/\/\u5229\u7528\u7db2\u9801\u767b\u5165\ninstance.setLoginBehavior(LoginBehavior.WEB_ONLY);\n\n\/\/\u662f\u5426\u6709\u767b\u5165\u53d6\u5f97Token\ninstance.registerCallback(callbackManager, new FacebookCallback&lt;LoginResult&gt;() {\n        @Override\n        public void onSuccess(LoginResult loginResult) {\n           Profile currentProfile = Profile.getCurrentProfile();\n            if (currentProfile != null) {\n                Log.d(\"fblogin\", \"onSuccess: \" + currentProfile.getName());\n             Log.d(\"fblogin\", \"onSuccess: \" +   loginResult.getAccessToken().getToken());\n             Log.d(\"fblogin\", \"onSuccess: \" + currentProfile.getId());\n         } else {\n              Toast.makeText(SocialAuthAct.this, \"\u8acb\u5728\u8a8d\u8b49\u4e00\u6b21\",  Toast.LENGTH_SHORT).show();\n           }\n        }\n\n       @Override\n       public void onCancel() {\n         Log.d(\"fblogin\", \"onCancel: \");\n      }\n       @Override\n        public void onError(FacebookException error) {\n            Log.d(\"fblogin\", \"onError:\" + error.toString());\n      }\n   });\n   }\n     @Override\n     protected void onActivityResult(int requestCode, int resultCode, @Nullable     Intent data) {\n    callbackManager.onActivityResult(requestCode, resultCode, data);\n     super.onActivityResult(requestCode, resultCode, data);\n  }\n<\/code><\/pre>\n\n<div style=\"font-size: 0px; height: 0px; line-height: 0px; margin: 0; padding: 0; clear: both;\"><\/div>","protected":false},"excerpt":{"rendered":"<p>1.\u5148\u8a3b\u518aFB\u5f8c\u53f0\u5e33\u865f https:\/\/developers.facebook.com\/ 2.\u5efa\u7acb\u61c9\u7528\u7a0b\u5f0f \u6211 &hellip; <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"pgc_sgb_lightbox_settings":"","footnotes":""},"categories":[5],"tags":[13,45,14],"class_list":["post-278","post","type-post","status-publish","format-standard","hentry","category-android","tag-android","tag-fb","tag-java"],"_links":{"self":[{"href":"https:\/\/badgameshow.com\/fly\/wp-json\/wp\/v2\/posts\/278","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/badgameshow.com\/fly\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/badgameshow.com\/fly\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/badgameshow.com\/fly\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/badgameshow.com\/fly\/wp-json\/wp\/v2\/comments?post=278"}],"version-history":[{"count":9,"href":"https:\/\/badgameshow.com\/fly\/wp-json\/wp\/v2\/posts\/278\/revisions"}],"predecessor-version":[{"id":481,"href":"https:\/\/badgameshow.com\/fly\/wp-json\/wp\/v2\/posts\/278\/revisions\/481"}],"wp:attachment":[{"href":"https:\/\/badgameshow.com\/fly\/wp-json\/wp\/v2\/media?parent=278"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/badgameshow.com\/fly\/wp-json\/wp\/v2\/categories?post=278"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/badgameshow.com\/fly\/wp-json\/wp\/v2\/tags?post=278"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}