美文网首页
FaceBook登录

FaceBook登录

作者: huomenghui | 来源:发表于2018-05-23 17:49 被阅读64次

今天刚做好了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写好了,希望对大家有帮助,能够缩短大家开发时间。原创,转载请标明出处。

       

相关文章

网友评论

      本文标题:FaceBook登录

      本文链接:https://www.haomeiwen.com/subject/gkeazxtx.html