Facebook sdk嵌入,登陆与注销

来源:互联网 发布:美化图片的软件 编辑:程序博客网 时间:2024/05/16 15:34

最近项目需要使用Facebook登陆。在做完之后于是就像总结下,方便后来人使用。Facebook需要翻墙才能登陆。网上有好多翻墙软件和教程,大家可以先去看看。
使用Facebook登陆首需要去https://developers.facebook.com Facebook开发者平台上去注册一个开发者账号,可以使用Facebook账号登陆。
注册完成之后点击My Apps菜单选项下Add a New App 创建一个新的项目。
这里写图片描述
选择你需要的接入的类型:
这里写图片描述
这里以选择Android教程为例。选择Android以后根据Facebook提供的步骤填写资料就可以完成初期准备,完成之后的结果。
这里写图片描述
在这里值得注意点是Hashes值,这里稍微有点坑,
这里写图片描述
这里描述下Development key Hashes值就是Debug模式下哈希值,下面Release Key Hash就是正式签名打包以后的哈希值。
在onCreate方面里面打印当前哈希值

    /**     * 获取hash值     */    private void getKeyHash() {        try {            PackageInfo info = getPackageManager().getPackageInfo("你的包名",PackageManager.GET_SIGNATURES);            for (Signature signature : info.signatures) {                MessageDigest md = MessageDigest.getInstance("SHA");                md.update(signature.toByteArray());                DebugLogs.e("KeyHash:" + Base64.encodeToString(md.digest(), Base64.DEFAULT));            }        } catch (PackageManager.NameNotFoundException e) {            //something        } catch (NoSuchAlgorithmException e) {            //something        }    }

Development key Hashes生成方式。
Development key Hashes生成方式相对简单直接 将下面命令复制到命令里面运行就可以了。Mac开打终端 输入下面命令行,这时会要求输入密钥库口令。就是默认口令‘Android’就好了。Window同理。

for mac生成方式:keytool -exportcert -alias androiddebugkey -keystore ~/.android/debug.keystore | openssl sha1 -binary | openssl base64

for windows :keytool -exportcert -alias androiddebugkey -keystore %HOMEPATH%\.android\debug.keystore | openssl sha1 -binary | openssl base64
以上就是生成dubug模式下的哈希值。

Release Key Hash正式:
需要生成签名密钥debug.keystore。密钥生成完毕以后打开终端输入:keytool -exportcert -alias 名称 -keystore C:\Users\Tom\.android\debug.keystore | openssl sha1 -binary | openssl base64
-alias 后面紧接着就是名称
-keystore 存放keystore路径,
直接运行,输入debug.keystore的密钥口令就可以获得正式签名包得hash值,到这里算是完成了一半。

接下来就是接入SDK的过程,在上面申请Appid 的流程里面第一步就是需要你下载一个SDK这个时候,就可以使用了。我们新建自己的项目。然后将sdk作为lib项目导入自己项目中只需要Facebook这个项目就可以了。
首先我们看 androidMainfest.xml文件

<uses-permission android:name="android.permission.INTERNET"/>    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>...<activity android:name="com.facebook.FacebookActivity"            android:configChanges="keyboard|keyboardHidden|screenLayout|screenSize|orientation"            android:theme="@android:style/Theme.Translucent.NoTitleBar"            android:label="@string/app_name" />        <meta-data android:name="com.facebook.sdk.ApplicationId" android:value="@string/app_id"/>        <meta-data android:name="com.facebook.sdk.ApplicationName"            android:value="@string/facebook_app_name" />        <provider android:authorities="com.facebook.app.FacebookContentProvider这里填写app_id"            android:name="com.facebook.FacebookContentProvider"            android:exported="true"/>

这里注意两个地方就好了。app_id填写, app_id最好在String.xml文件里。
登陆按钮。

<com.facebook.login.widget.LoginButton        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_marginTop="5dp"        android:layout_gravity="center_horizontal"        facebook:com_facebook_confirm_logout="false"     facebook:com_facebook_tooltip_mode="never_display" />

activity_main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    xmlns:facebook="http://schemas.android.com/apk/res-auto"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:paddingLeft="@dimen/activity_horizontal_margin"    android:paddingRight="@dimen/activity_horizontal_margin"    android:paddingTop="@dimen/activity_vertical_margin"    android:paddingBottom="@dimen/activity_vertical_margin"    tools:context=".MainActivity"    android:orientation="vertical">    <com.facebook.login.widget.LoginButton        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_marginTop="5dp"        android:layout_gravity="center_horizontal"        facebook:com_facebook_confirm_logout="false"        facebook:com_facebook_tooltip_mode="never_display" />    <TextView        android:id="@+id/info_text"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:textSize="20dp"        android:textColor="@android:color/black"        android:gravity="center" />    <com.facebook.login.widget.ProfilePictureView        android:id="@+id/profilePicture"        android:layout_height="wrap_content"        android:layout_width="wrap_content"        android:gravity="center_horizontal"        android:layout_marginBottom="10dp"        facebook:com_facebook_preset_size="normal" /></LinearLayout>

MainActivity.java

import android.app.Activity;import android.content.Intent;import android.content.pm.PackageInfo;import android.content.pm.PackageManager;import android.content.pm.Signature;import android.os.Bundle;import android.util.Base64;import android.widget.TextView;import com.facebook.AccessToken;import com.facebook.CallbackManager;import com.facebook.FacebookCallback;import com.facebook.FacebookException;import com.facebook.FacebookSdk;import com.facebook.Profile;import com.facebook.ProfileTracker;import com.facebook.appevents.AppEventsLogger;import com.facebook.login.LoginManager;import com.facebook.login.LoginResult;import com.facebook.login.widget.ProfilePictureView;import net.dev.mylib.DebugLogs;import java.security.MessageDigest;import java.security.NoSuchAlgorithmException;public class MainActivity extends Activity {    private CallbackManager callbackManager;    private ProfileTracker profileTracker;    private TextView info = null;    private ProfilePictureView profilePictureView;//图片控件    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        FacebookSdk.sdkInitialize(this.getApplicationContext());        getKeyHash();        callbackManager = CallbackManager.Factory.create();//创建回调工厂        //登陆成功以后回调        LoginManager.getInstance().registerCallback(callbackManager,                new FacebookCallback<LoginResult>() {                    @Override                    public void onSuccess(LoginResult loginResult) {                        updateUI();                    }                    @Override                    public void onCancel() {                        updateUI();                    }                    @Override                    public void onError(FacebookException exception) {                        DebugLogs.e("-----onError----->" + exception);                        updateUI();                    }                });        setContentView(R.layout.activity_main);        profilePictureView = (ProfilePictureView)findViewById(R.id.profilePicture);        info = (TextView)findViewById(R.id.info_text);        //刷新获取个人用户资料        profileTracker = new ProfileTracker() {            @Override            protected void onCurrentProfileChanged(Profile oldProfile, Profile currentProfile) {                updateUI();                //It`s possible that we were waiting for Profile to be populated in order to post a status update.            }        };        DebugLogs.e(getResources().getConfiguration().locale.getCountry());    }    /**     * 获取hash值     */    private void getKeyHash() {        try {            PackageInfo info = getPackageManager().getPackageInfo("com.anykey.balala",PackageManager.GET_SIGNATURES);            for (Signature signature : info.signatures) {                MessageDigest md = MessageDigest.getInstance("SHA");                md.update(signature.toByteArray());                DebugLogs.e("KeyHash:" + Base64.encodeToString(md.digest(), Base64.DEFAULT));            }        } catch (PackageManager.NameNotFoundException e) {            //something        } catch (NoSuchAlgorithmException e) {            //something        }    }    //UpdateUi()    private void updateUI(){        boolean enableButton = AccessToken.getCurrentAccessToken() != null;        Profile profile = Profile.getCurrentProfile();//获取登陆成功以后的数据        if (enableButton && profile != null) {            info.setText(profile.toString()+"\n"+"成功以后的获取ID---->:"+profile.getId()+"\n"+"成功后的获取信息:" +profile.getLastName() + profile.getFirstName()+"\n头像"+ profile.getProfilePictureUri(50,50));            profilePictureView.setProfileId(profile.getId());            DebugLogs.e("成功以后的获取ID---->:" + profile.getId());            DebugLogs.e("成功后的获取信息getFirstName:" + profile.getFirstName());            DebugLogs.e("成功后的获取信息getMiddleName:" + profile.getMiddleName());            DebugLogs.e("成功后的获取信息getName:" + profile.getName());            DebugLogs.e("成功后的获取信息getLinkUri:" + profile.getLinkUri());        } else {            DebugLogs.e("获取信息失败");        }    }    //接受回调    @Override    protected void onActivityResult(int requestCode, int resultCode, Intent data) {        super.onActivityResult(requestCode, resultCode, data);        callbackManager.onActivityResult(requestCode, resultCode, data);    }    @Override    protected void onResume() {        super.onResume();        // Logs 'install' and 'app activate' App Events.        AppEventsLogger.activateApp(this);    }    @Override    protected void onPause() {        super.onPause();        // Logs 'app deactivate' App Event.        AppEventsLogger.deactivateApp(this);    }    @Override    protected void onDestroy() {        super.onDestroy();        profileTracker.stopTracking();    }}

完成以上步骤基本可以实现Facebook登陆与注销。祝大家写代码愉快

0 0