FaceBook登錄

今天剛做好了FaceBook登錄,覺得代碼很簡單,但是坑卻很多。

1.實現自定義登錄

? ?一.導入facebook Sdk

? ?(1).登錄注冊facebook(需翻墻);

? ?(2).創建應用,這一步步都很簡單,主要是這個地方要配置密鑰散列,于是我按照facebook文檔生成配置,不過最后不對,什么鬼。


會出現這樣的報錯,這是一個坑,我研究了一下午,其實很簡單直接把這個上面顯示的(紅線部分)直接配上就ok。但是有的小伙伴發現配上還是不行。不要急,我敢百分百肯定是里面的字母搞錯了比如小寫l(L)和大寫I(i)是不是一樣,這樣直接按照這打弄錯很正常。網上很多什么openssl版本不對,安裝openssl什么的,全是垃圾方法,寫的人都是腦子有坑,還方法炒雞復雜。我給大家最簡單的方法解決。

獲取方法:

1.代碼獲取

try {

PackageInfo info = getPackageManager().getPackageInfo(

"com.example.packagename",

? ? ? ? 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 (NameNotFoundException e) {

}catch (NoSuchAlgorithmException e) {

}

直接把這段代碼放在mainActivity的oncreate();顯示數據用TextView顯示,在做個復制功能。搞定,解決。

2.查詢base64

1>通過命令行獲取apk的 SHA1

2>http://tomeko.net/online_tools/hex_to_base64.php?點開這個網站(需要翻墻)。生成的數據ok就是我們需要的,直接粘貼上去。


注意:::::

如果你的包上傳goole play 你上傳后goole會改變你的簽名,這個秘鑰散列可以配置多個。

ok這個坑踩完完了,其他的就簡單了.

下面介紹自定義按鈕登錄 開始集成代碼

compile'com.facebook.android:facebook-login:[4,5)'

我是直接導入倉庫

//登錄工具類

public class FackBookLoginManager {

private static FackBookLoginManagerinstance;

? ? private? CallbackManagercallbackManager;

? ? private ProfileTrackerprofileTracker;

? ? private AccessTokenTrackeraccessTokenTracker;

? ? public void setLoginMonitor(LoginMonitor loginMonitor) {

this.loginMonitor = loginMonitor;

? ? }

private LoginMonitorloginMonitor;

? ? public static FackBookLoginManagergetInstance() {

if (instance ==null) {

instance =new FackBookLoginManager();

? ? ? ? }

return instance;

? ? }

public FackBookLoginManager(){

callbackManager = CallbackManager.Factory.create();

? ? }

public void create(final Activity coreActivity){

LoginManager.getInstance().registerCallback(callbackManager, new FacebookCallback() {

@Override

? ? ? ? ? ? public void onSuccess(LoginResult loginResult) {//登錄成功

// App code

? ? ? ? ? ? ? ? MLog.e("FackBook","loginResult.getAccessToken():"+loginResult.getAccessToken()+"===>loginResult.getRecentlyDeniedPermissions():"+loginResult.getRecentlyDeniedPermissions());

? ? ? ? ? ? ? ? MLog.e("FackBook","===>loginResult.getRecentlyGrantedPermissions():"+loginResult.getRecentlyGrantedPermissions());

? ? ? ? ? ? ? ? getFaceBookToken();

? ? ? ? ? ? }

@Override

? ? ? ? ? ? public void onCancel() {//取消登錄

// App code

? ? ? ? ? ? ? ? coreActivity.showToast(coreActivity.getString(R.string.cancel_the_login));

? ? ? ? ? ? ? ? MLog.e("FackBook","onCancel取消登錄");

? ? ? ? ? ? ? ? CookieSyncManager.createInstance(coreActivity);

? ? ? ? ? ? ? ? CookieManager cookieManager = CookieManager.getInstance();

? ? ? ? ? ? ? ? cookieManager.removeAllCookie();

? ? ? ? ? ? ? ? CookieSyncManager.getInstance().sync();

? ? ? ? ? ? }

@Override

? ? ? ? ? ? public void onError(FacebookException exception) {

// App code

? ? ? ? ? ? ? ? if (exceptioninstanceof FacebookAuthorizationException) {

if (AccessToken.getCurrentAccessToken() !=null) {

LoginManager.getInstance().logOut();

? ? ? ? ? ? ? ? ? ? }

}


? ? ? ? ? ?MLog.e("FackBook","onError:"+exception.toString());

? ? ? ? ? ? }

});

? ? }

public void onActivityResult(int requestCode, int resultCode, Intent data) {

if(callbackManager!=null){

callbackManager.onActivityResult(requestCode, resultCode, data);

? ? ? ? }

}

public void getFaceBookToken() {

AccessToken mAccessToken = AccessToken.getCurrentAccessToken();

? ? ? ? Profile profile = Profile.getCurrentProfile();

? ? ? ? if(mAccessToken!=null){

Log.e("FackBook", "token :" + mAccessToken.getToken() +"," +"user_id" + mAccessToken.getUserId());

? ? ? ? }else{

MLog.e("FackBook","token=null");

? ? ? ? }

if(profile ==null){

Log.e("FackBook","profile=null");

? ? ? ? }

if (mAccessToken!=null) {

//String id = profile.getId();

? ? ? ? ? ? String access_token = mAccessToken.getToken();

? ? ? ? ? ? String id= mAccessToken.getUserId();

? ? ? ? ? ? MLog.e("FackBook","id:"+id+"==>access_token"+access_token);

? ? ? ? ? ? if(loginMonitor!=null){

loginMonitor.loginSuccess("",access_token,id);

? ? ? ? ? ? }

}

if(profile !=null){

Log.e("FackBook","profile.getId():"+profile.getId());

? ? ? ? }

}

public interface? LoginMonitor{

void loginSuccess(String third_name,String access_token,String id);

? ? }

public void logInWithReadPermissions(CoreActivity coreActivity){

LoginManager.getInstance().logOut();

? ? ? ? LoginManager.getInstance().logInWithReadPermissions(coreActivity, Arrays.asList("public_profile", "user_friends"));

? ? }

public void onDestroy() {

accessTokenTracker.stopTracking();

? ? ? ? profileTracker.stopTracking();

? ? }

}

(2)在string里配上facebook里生成的appid和fb_login_protocol_scheme;一定要配在string

<string name="facebook_app_id">xxxxxxxxxxx</string>

<string name="fb_login_protocol_scheme">fbxxxxxxxxxxx</string>

(3)

? ??AndroidManifest.xml 里配上

? ? android:name="com.facebook.sdk.ApplicationId"

? ? android:value="@string/facebook_app_id" />

? ? android:name="com.facebook.FacebookActivity"

? ? android:configChanges="keyboard|keyboardHidden|screenLayout|screenSize|orientation"

? ? android:label="@string/app_name" />

? ? android:name="com.facebook.CustomTabActivity"

? ? android:exported="true">


? ? ? ?

(4). 工具類調用

?? ? ? @Override?

protected void onCreate(Bundle savedInstanceState) {

//初始化

?? ?FackBookLoginManager.getInstance().create(this);

}

//登錄按鈕

ivLoginWithFacebook.setOnClickListener(new View.OnClickListener() {? ? ? ?

@Override

? ? public void onClick(View v) {

FackBookLoginManager.getInstance().logInWithReadPermissions(Activity.this);

? ? }

});

//登錄成功回調

FackBookLoginManager.getInstance().setLoginMonitor(new FackBookLoginManager.LoginMonitor() {

@Override

? ? public void loginSuccess(String third_name, String access_token, String id) {

? ?}

});


ok寫好了,希望對大家有幫助,能夠縮短大家開發時間。原創,轉載請標明出處。

? ? ? ?

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容