2016年11月2日 星期三

Android studio 利用 facebook SDK 登入

連接你的 facebook 開發者網頁
https://developers.facebook.com/docs/facebook-login/android#prerequisites
依照裡面內容開始

開啟android studio
在 buid.gradle(moudle) dependencies之前 加入
repositories {
    mavenCentral()
}
之後在 dependencies 裡面加入(依版本修改)
compile 'com.facebook.android:facebook-android-sdk:[4,5)'




<string name="facebook_app_id">1756827804568302</string>
加入strings.xml


<uses-permission android:name="android.permission.INTERNET"/>
加入 AndroidManifest.xml.



 <meta-data android:name="com.facebook.sdk.ApplicationId" android:value="@string/facebook_app_id"/>
加入AndroidManifest.xml. application 底下

利用程式碼抓出hashkey
  Code:
PackageInfo info;try{
    info = getPackageManager().getPackageInfo("com.you.name",PackageManager.GET_SIGNATURES); for(Signature signature : info.signatures) {      MessageDigest md;
        md =MessageDigest.getInstance("SHA");
        md.update(signature.toByteArray()); String KeyResult =new String(Base64.encode(md.digest(),0));//String something = new String(Base64.encodeBytes(md.digest())); Log.e("hash key", KeyResult);
 Toast.makeText(this,"My FB Key is \n"+ KeyResult , Toast.LENGTH_LONG ).show(); }}catch(NameNotFoundException e1){Log.e("name not found", e1.toString());}catch(NoSuchAlgorithmException e){Log.e("no such an algorithm", e.toString());}catch(Exception e){Log.e("exception", e.toString());}

抓到hashKey如圖

貼在您的https://developers.facebook.com/quickstarts/"專案號碼"/?platform=android#

將建立一個class 繼承 Application
@Override
public void onCreate() {
    super.onCreate();
    FacebookSdk.sdkInitialize(getApplicationContext());
    AppEventsLogger.activateApp(this);
}
寫入onCreat();
將 

<string name="fb_login_protocol_scheme">1756827804568302</string>
寫入string.xml
 AndroidManifest.xml. application 中加入 android:name=".class名稱"
<uses-permission android:name="android.permission.INTERNET" />
    <application        android:name=".Today"        android:allowBackup="true"        android:icon="@mipmap/ic_launcher"        android:label="@string/app_name"        android:supportsRtl="true"        android:theme="@style/AppTheme">        <meta-data            android:name="com.facebook.sdk.ApplicationId"            android:value="@string/facebook_app_id" />
        <activity android:name=".FacebookActivity">            <intent-filter>                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />            </intent-filter>        </activity>        <activity android:name=".LoginActivity">            <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>        <activity android:name=".MainActivity"></activity>    </application>
</manifest>

Layout activity_login.xml加入
<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" />   
登入程式
宣告區
public class LoginActivity extends AppCompatActivity {
    LoginButton loginButton;    CallbackManager callbackManager;    private AccessToken accessToken;

登陸程式
@Overrideprotected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);    setContentView(R.layout.activity_login);    FacebookSdk.sdkInitialize(getApplicationContext());    callbackManager = CallbackManager.Factory.create();    loginButton = (LoginButton) findViewById(R.id.login_button);    loginButton.registerCallback(callbackManager, new FacebookCallback<LoginResult>() {
        @Override        public void onSuccess(LoginResult loginResult) {
            Log.d("成功","成功");           accessToken = loginResult.getAccessToken();
            //進入下個頁面            Intent intent =new Intent(LoginActivity.this,MainActivity.class);
            Toast.makeText(LoginActivity.this,"登入成功", Toast.LENGTH_LONG).show();            startActivity(intent);        }

        @Override        public void onCancel() {

        }

        @Override        public void onError(FacebookException error) {

        }
    });
}
加入
@Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);    callbackManager.onActivityResult(requestCode, resultCode, data);}
可執行

沒有留言:

張貼留言