現在很多App登入都會讓使用者選擇透過Facebook這個選項來登入
我們可以透過Facebook來取得使用者在Facebook那邊所留下過的資料
Step 1:
https://developers.facebook.com/
Facebook給開發者的平台,建立一個新的應用程式
Step 2:
填入你想要的應用程式名稱以及你的Email
Step 3:
我的要透過這個應用程式來讓使用者透過Facebook登入
Step 4:
我們今天要使用是Android的平台
Step 5:
其實我也不知道為何要下載SDK,我並沒有將它放到android studio裡面就可行了
然後按照他講的把該加的加到你的Android Studio的專案裡面
填入applicationId還有在AndroidManifest裡面你的activity的name
因為是測試用得所以這個app沒有在Google Play Store上面,按使用此封裝名稱就可以繼續了
需要填入一組類似電腦的金鑰,官方的教學是需要下載OpenSsl來取得
我有利用OpenSsl來取得但是步驟實在是太麻煩了
其實只需要在隨便一支程式裡面跑下面這段程式就可以取得KeyHash
"test.app"就是你Gradle裡面的applicationId
try { PackageInfo info = getPackageManager().getPackageInfo("test.app", 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) { }
然後把你得到的KeyHash填到 密鑰雜湊 就好了
這裡我就讓它是預設的而已
到Android Studio 裡面
strings.xml
<resources> <string name="app_name">Facebook</string> <string name="facebook_app_id">1496911323685038</string> <string name="fb_login_protocol_scheme">1496911323685038</string> </resources>
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="test.app"> <uses-permission android:name="android.permission.INTERNET"/> <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/AppTheme"> <meta-data android:name="com.facebook.sdk.ApplicationId" android:value="@string/facebook_app_id"/> <activity android:name="test.app.MainActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest>
7~9的步驟就是在教你如何在城市裡面新增所需要的東西
其實簡單來說就是一個button跟取得Facebook的回應
MainActivity.java
public class MainActivity extends AppCompatActivity { private String TAG = "MainActivity"; CallbackManager callbackManager; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); FacebookSdk.sdkInitialize(getApplicationContext()); AppEventsLogger.activateApp(this); callbackManager = CallbackManager.Factory.create(); final LoginButton loginButton = (LoginButton) findViewById(R.id.login_button); LoginManager.getInstance().logOut(); loginButton.setReadPermissions("email", "public_profile", "public_profile"); loginButton.registerCallback(callbackManager, new FacebookCallback<LoginResult>() { @Override public void onSuccess(LoginResult loginResult) { Log.d(TAG,"onSuccess:"+loginResult.toString()); GraphRequest request = GraphRequest.newMeRequest( loginResult.getAccessToken(), new GraphRequest.GraphJSONObjectCallback() { @Override public void onCompleted(JSONObject object, GraphResponse response) { try{ String email = object.getString("email"); String name = object.getString("name"); Log.d(TAG,"email:"+email); Log.d(TAG,"name:"+name); }catch (JSONException e){ e.printStackTrace(); } } }); Bundle parameters = new Bundle(); parameters.putString("fields", "id,name,email,gender"); request.setParameters(parameters); request.executeAsync(); } @Override public void onCancel() { Log.d(TAG,"onCancel"); } @Override public void onError(FacebookException error) { Log.d(TAG,"onError:"+error.toString()); } }); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); callbackManager.onActivityResult(requestCode, resultCode, data); Log.d(TAG,"onActivityResult:"+data.getDataString()); } }
activity_main.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="test.app.MainActivity"> <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" /> </LinearLayout>
Step 6:
因為一開始他不會幫你預設你的應用程式再咖發階段
所以登入的時候必須要用測試帳號登入,然後要變更密碼來讓你自己知道密碼才可以做登入
登入之後就可以成功地拿到使用者的資料了啊~~
可以看到Logcat舊有資料了啊~~
其實步驟看起來很多
但是一步一步跟著做也沒有這麼難~~
留言列表