1、首先在Facebook 开发者平台注册一个账号

https://developers.facebook.com/

开发者后台  https://developers.facebook.com/apps

2、创建账号并且获得 APP ID

图一

图二

图三

图四

图五

3、获取app签名的Key Hashes 值(两种方式)

3.1方法1:

 1 package com.pegasus.map.presentation.utils;2 import android.content.Context;3 import android.content.pm.PackageInfo;4 import android.content.pm.PackageManager;5 import android.content.pm.Signature;6 import android.util.Base64;7 import android.widget.Toast;8 import java.security.MessageDigest;9 import java.security.NoSuchAlgorithmException;
10
11 /**
12  * Created by ${zyj} on 2016/3/29.
13  */
14 public class KeyHash {
15
16     /**
17      * 注意运行的时候,app需要正式的签名
18      * @param context
19      * @param packageName  app的包名
20      */
21     public static void getKeyHash( Context context , String packageName ){
22         try {
23             PackageInfo info = null;
24             info = context.getPackageManager().getPackageInfo( packageName , PackageManager.GET_SIGNATURES );
25             for ( Signature signature : info.signatures ) {
26                 MessageDigest messageDigest = null;
27                 messageDigest = MessageDigest.getInstance("SHA");
28                 messageDigest.update(signature.toByteArray());
29                 String hs = Base64.encodeToString(messageDigest.digest(), Base64.DEFAULT) ;
30                 Toast.makeText(context, "" + hs , Toast.LENGTH_SHORT).show();
31             }
32         } catch (PackageManager.NameNotFoundException e) {
33             e.printStackTrace();
34         } catch (NoSuchAlgorithmException e) {
35             e.printStackTrace();
36         }
37     }
38 }

3.2 命令行的方式获取 Key hash 值

3.2.1 :首选保证你的电脑上有 openSSl 的库文件

下载  http://gnuwin32.sourceforge.net/packages/openssl.htm

3.2.2 :解压下载的文件

3.2.3:cmd 命令行模式定位到 openssl 的 bin目录下

3.2.4:执行命令

keytool -exportcert -alias yiba -keystore C:\work\Key.jks | openssl sha1 -binary | openssl base64

注意: 1、这里的 yiba 代表app签名的别名,也就是 alias 

                          2、C:\work\Key.jks 代表签名的路径,需要换成你签名的路径

3.2.5 如果你的电脑上没有下载 openssl 那么你执行下面的代码会出现

4、设置应用的基本配置

图一

图二

图三

5、App开始集成 FacebookSDk

5.1 在项目的 build.gradle 添加

compile 'com.facebook.android:facebook-android-sdk:4.10.1'

查看最新的版本 : http://search.maven.org/#search%7Cga%7C1%7Ccom.facebook.android

5.2 在应用的 Application 里面初始化SDK

//facebook登录初始化

      FacebookSdk.sdkInitialize( getApplicationContext() );

5.3 在value文件夹下 strings.xml 中

<!-- facebook 登录 key-->

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

5.4 在 AndroidManifest.xml 中

<meta-dataandroid:name="com.facebook.sdk.ApplicationId"android:value="@string/facebook_app_id"/>
<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"    ></activity>  

5.5 在布局文件中定义登录按钮

1
2
3
4
5
6
7
<com.facebook.login.widget.LoginButton
           android:id="@+id/facebook_bt"
           android:layout_width="match_parent"
           android:layout_height="wrap_content"
           android:text="facebook login"
           >
</com.facebook.login.widget.LoginButton>

  

5.6 在代码中实现

 1 package com.pegasus.map.presentation.ui.activity;2 import android.content.Intent;3 import android.os.Bundle;4 import android.widget.Toast;5 import com.facebook.CallbackManager;6 import com.facebook.FacebookCallback;7 import com.facebook.FacebookException;8 import com.facebook.login.LoginResult;9 import com.facebook.login.widget.LoginButton;
10 import com.pegasus.map.R;
11 import com.pegasus.map.presentation.ui.base.BaseActivity;
12 import butterknife.Bind;
13 import butterknife.ButterKnife;
14
15
16 /**
17  * Created by ${zyj} on 2016/3/24.
18  * 登录
19  */
20
21 public class LoginLoginActivity extends BaseActivity {
22
23     @Bind(R.id.facebook_bt)
24     public LoginButton facebook_bt;
25
26     private CallbackManager callbackManager ;
27
28     @Override
29     protected void onCreate(Bundle savedInstanceState) {
30         super.onCreate(savedInstanceState);
31         setContentView(R.layout.activity_login);
32
33         ButterKnife.bind(this);
34         callbackManager = CallbackManager.Factory.create() ;
35
36         init();
37     }
38
39     private void init() {
40
41         facebook_bt.registerCallback(callbackManager, new FacebookCallback<LoginResult>() {
42             @Override
43             public void onSuccess(LoginResult loginResult) {
44                 Toast.makeText(LoginLoginActivity.this, "facebook登录成功了", Toast.LENGTH_SHORT).show();
45                 log("facebook登录成功了" + loginResult.getAccessToken());                   //获取登录信息                   getLoginInfo( loginResult.getAccessToken() ) ;
46             }
47
48             @Override
49             public void onCancel() {
50                 Toast.makeText(LoginLoginActivity.this, "facebook登录取消了", Toast.LENGTH_SHORT).show();
51                 log("facebook登录取消了");
52             }
53
54             @Override
55             public void onError(FacebookException error) {
56                 Toast.makeText(LoginLoginActivity.this, "facebook登录失败了", Toast.LENGTH_SHORT).show();
57                 log("facebook登录失败了");
58             }
59         });
60
61     }
62
63     @Override
64     protected void onActivityResult(int requestCode, int resultCode, Intent data) {
65         super.onActivityResult(requestCode, resultCode, data);
66
67         //facebook回调
68         callbackManager.onActivityResult( requestCode , resultCode ,data ) ;
69     }
70 }

 1 /**2      * 获取登录信息3      * @param accessToken4      */5     public void getLoginInfo( AccessToken accessToken ){6         GraphRequest request = GraphRequest.newMeRequest(accessToken, new GraphRequest.GraphJSONObjectCallback() {7             @Override8             public void onCompleted(JSONObject object, GraphResponse response) {9                 if (object != null) {
10                     String id = object.optString( "id" ) ;   //比如:1565455221565
11                     String name = object.optString( "name" ) ;  //比如:Zhang San
12                     String gender = object.optString("gender") ;  //性别:比如 male (男)  female (女)
13                     String emali = object.optString("email") ;  //邮箱:比如:56236545@qq.com
14
15                     //获取用户头像
16                     JSONObject object_pic = object.optJSONObject( "picture" ) ;
17                     JSONObject object_data = object_pic.optJSONObject( "data" ) ;
18                     String photo = object_data.optString( "url" )  ;
19
20                     //获取地域信息
21                     String locale = object.optString( "locale" ) ;   //zh_CN 代表中文简体
22
23                     Toast.makeText( activity , "" + object.toString() , Toast.LENGTH_SHORT).show();
24                 }
25             }
26         }) ;
27
28         Bundle parameters = new Bundle();
29         parameters.putString("fields", "id,name,link,gender,birthday,email,picture,locale,updated_time,timezone,age_range,first_name,last_name");
30         request.setParameters(parameters);
31         request.executeAsync() ;
32     }

5.7 企业账号需要注意的事项,把发布按钮打开

6、对facebookSDk 进行二次封装

  1 package com.pegasus.map.presentation.utils;2 3 import android.app.Activity;4 import android.content.DialogInterface;5 import android.os.Bundle;6 import android.support.v7.app.AlertDialog;7 import android.widget.Toast;8 9 import com.facebook.AccessToken;10 import com.facebook.CallbackManager;11 import com.facebook.FacebookCallback;12 import com.facebook.FacebookException;13 import com.facebook.GraphRequest;14 import com.facebook.GraphResponse;15 import com.facebook.Profile;16 import com.facebook.login.LoginManager;17 import com.facebook.login.LoginResult;18 19 import org.json.JSONObject;20 21 import java.util.Arrays;22 import java.util.Collections;23 import java.util.List;24 25 /**26  * Created by ${zyj} on 2016/3/30.27  */28 public class FaceBookLogin {29 30     private Activity activity ;31     private CallbackManager callbackManager ;32     private FacebookListener facebookListener ;33     private List<String> permissions = Collections.<String>emptyList();34     private LoginManager loginManager;35 36     public FaceBookLogin( Activity activity ){37         this.activity = activity ;38 39         //初始化facebook登录服务40         callbackManager = CallbackManager.Factory.create() ;41         getLoginManager().registerCallback(callbackManager, new FacebookCallback<LoginResult>() {42             @Override43             public void onSuccess(LoginResult loginResult) {44                 // login success45                 AccessToken accessToken = loginResult.getAccessToken();46                 getLoginInfo(accessToken);47             }48 49             @Override50             public void onCancel() {51                 //取消登录52             }53 54             @Override55             public void onError(FacebookException error) {56                 //登录出错57             }58         });59 60         permissions = Arrays61                 .asList("email", "user_likes", "user_status", "user_photos", "user_birthday", "public_profile", "user_friends") ;62     }63 64     /**65      * 登录66      */67     public void login(){68         getLoginManager().logInWithReadPermissions(69                 activity, permissions);70     }71 72     /**73      * 退出74      */75     public void logout(){76         String logout = activity.getResources().getString(77                 com.facebook.R.string.com_facebook_loginview_log_out_action);78         String cancel = activity.getResources().getString(79                 com.facebook.R.string.com_facebook_loginview_cancel_action);80         String message;81         Profile profile = Profile.getCurrentProfile();82         if (profile != null && profile.getName() != null) {83             message = String.format(84                     activity.getResources().getString(85                             com.facebook.R.string.com_facebook_loginview_logged_in_as),86                     profile.getName());87         } else {88             message = activity.getResources().getString(89                     com.facebook.R.string.com_facebook_loginview_logged_in_using_facebook);90         }91         AlertDialog.Builder builder = new AlertDialog.Builder(activity);92         builder.setMessage(message)93                 .setCancelable(true)94                 .setPositiveButton(logout, new DialogInterface.OnClickListener() {95                     public void onClick(DialogInterface dialog, int which) {96                         getLoginManager().logOut();97                     }98                 })99                 .setNegativeButton(cancel, null);
100         builder.create().show();
101     }
102
103     /**
104      * 获取登录信息
105      * @param accessToken
106      */
107     public void getLoginInfo( AccessToken accessToken ){
108         GraphRequest request = GraphRequest.newMeRequest(accessToken, new GraphRequest.GraphJSONObjectCallback() {
109             @Override
110             public void onCompleted(JSONObject object, GraphResponse response) {
111                 if (object != null) {
112                     String id = object.optString("id");   //比如:1565455221565
113                     String name = object.optString("name");  //比如:Zhang San
114                     String gender = object.optString("gender");  //性别:比如 male (男)  female (女)
115                     String emali = object.optString("email");  //邮箱:比如:56236545@qq.com
116
117                     //获取用户头像
118                     JSONObject object_pic = object.optJSONObject("picture");
119                     JSONObject object_data = object_pic.optJSONObject("data");
120                     String photo = object_data.optString("url");
121
122                     //获取地域信息
123                     String locale = object.optString("locale");   //zh_CN 代表中文简体
124
125                     Toast.makeText(activity, "" + object.toString(), Toast.LENGTH_SHORT).show();
126                 }
127             }
128         }) ;
129
130         Bundle parameters = new Bundle();
131         parameters.putString("fields", "id,name,link,gender,birthday,email,picture,locale,updated_time,timezone,age_range,first_name,last_name");
132         request.setParameters(parameters);
133         request.executeAsync() ;
134     }
135
136     /**
137      * 获取loginMananger
138      * @return
139      */
140     private LoginManager getLoginManager() {
141         if (loginManager == null) {
142             loginManager = LoginManager.getInstance();
143         }
144         return loginManager;
145     }
146
147     public CallbackManager getCallbackManager(){
148         return callbackManager ;
149     }
150
151     /**
152      * 设置登录简体器
153      * @param facebookListener
154      */
155     public void setFacebookListener( FacebookListener facebookListener ){
156         this.facebookListener =facebookListener ;
157     }
158
159     public interface FacebookListener {
160         void facebookLoginSuccess();
161         void facebookLoginFail() ;
162     }
163
164
165 }

在 activity 使用

1      //初始化Facebook登录服务
2      FaceBookLogin  faceBookLogin = new FaceBookLogin( this ) ;
3
4      //登录
5      faceBookLogin.login();
6
7      //退出
8      faceBookLogin.logout();

1 @Override
2     protected void onActivityResult(int requestCode, int resultCode, Intent data) {
3         super.onActivityResult(requestCode, resultCode, data);
4
5         //facebook回调
6         faceBookLogin.getCallbackManager().onActivityResult(requestCode, resultCode, data);
7
8     }

Android 应用程序集成FaceBook 登录及二次封装相关推荐

  1. Android 应用程序集成Google 登录及二次封装

    谷歌登录API:  https://developers.google.com/identity/sign-in/android/ 1.注册并且登录google网站 https://accounts. ...

  2. Android集成Facebook登录时遇到的问题invalid key hash.the key hash

    一.Facebook:登录功能已停用,我们已停用通过嵌入式浏览器登录Facebook的功能 错误提示: 为保护账户安全,我们已停用通过嵌入式浏览器登录Facebook的功能.若要继续,请更新登录使用的 ...

  3. 在Android App中集成Google登录

    技术文章 来源:码农网 发布:2016-09-19 浏览:194 摘要:今天,几乎所有的web和移动app都自带谷歌和Facebook登录,这对app开发者和用户来说是一个非常有用的功能,因为几乎每个 ...

  4. Android平台上集成大华SDK(二)

    Android平台上集成大华SDK 以上是我之前写的一篇Android平台上集成大华SDK的文章,其中对于Android平台上集成大华SDK.基于大华SDK进行二次开发基本上进行了详细地介绍. 这篇文 ...

  5. Android安卓开发集成微信第三方扫描二维码登录-超级无敌具详细

    Android安卓开发中集成微信二维码登录的步骤: 写在前面的: 该教程使用AS作为演示,使用ecplise请参照微信官方文档下载相应jar等所需参考文档和资源.在最后,我会附上这个Activity的 ...

  6. Android 集成facebook 登录和分享

    ,开场白给大脸书 导入SDK dependencies { compile 'com.facebook.android:facebook-android-sdk:4.15.0' app_id在stri ...

  7. Android使用ShareSDK集成第三方登录和分享(v3.1.2)

    一.产品概述 ShareSDK是一种社会化分享组件,为iOS.Android.WP8 的APP提供社会化功能,集成了一些常用的类库和接口,缩短开发者的开发时间,还有社会化统计分析管理后台. 二.集成方 ...

  8. (unity)新手接入Facebook登录,分享以及google登录,Android,IOS,OC接入篇

    最近接Android,IOS的Facebook登录,分享 以及Google登录,分享流程以及遇到的问题整理. 一. Android接入 google登录 第一步,前往 [ firebase] http ...

  9. Android 版 Facebook 登录

    Android 版 Facebook SDK 让用户可以通过 Facebook 登录注册您的应用.通过 Facebook 登录您的应用时,用户可以向应用授予权限,以便您可以检索信息或以用户的身份在 F ...

最新文章

  1. 自学python后能干什么-学习python后能做哪方面的工作
  2. encodeURIComponent编码2次
  3. li变成行内块级元素之后,每一个li之间会有间隙,这是为什么?
  4. 【Android】多线程下载加断点续传
  5. 科大星云诗社动态20211108
  6. 【Python基础】Python 炫技操作:推导式的五种写法
  7. CentOS 5.3 已经发布!
  8. 【转载】JAVAEE之内置对象和属性范围
  9. linux 搭建任务队列集群,beanstalkd任务队列 linux平台安装测试
  10. 机器人踩滑板_不死神草、飞行滑板…超2000种创新发明在这里展出
  11. Python获取局域网内所有机器IP地址与网卡MAC地址
  12. 蓝牙 配对 android,Android蓝牙工具类:连接、配对、传输
  13. GDAL书籍中删除数据勘误(C#语言)
  14. Netty之Channel、NioEventLoopGroup、客户端connect方法总结
  15. 基于置信加权池的全卷积保证颜色恒常性
  16. c语言math库正弦余弦函数
  17. 超强合集:OCR 文本检测干货汇总(含论文、源码、demo 等资源)
  18. 【数据库实验一】基础操作
  19. 你PICK的球队可能没赢,但PICK以下拍摄技巧绝对稳赚不赔!
  20. vue滑杆_非常简单的Vue滑杆组件

热门文章

  1. linux下载哪个python版本-Linux升级python版本
  2. 廖雪峰python教程完整版-为什么看不懂廖雪峰的Python学习教程?
  3. Mint系统使用介绍,Mint系统安装,在Mint系统上搭建GPU环境,在Mint系统上安装Pycharm、Anaconda等软件,在Mint系统上安装cuda和cudnn
  4. 图像的评价指标之PSNR——峰值信噪比
  5. 调制优缺点_复合铝基润滑脂和普通润滑脂的区别,复合铝基脂有什么优缺点
  6. linux ubuntu 虚拟机中配置samba的实现文件共享的方法
  7. Java中的运行期类型鉴定
  8. 网络编程学习笔记(使用select函数的TCP和UDP回射服务器程序)
  9. Java 注解用法详解——@SuppressWarnings
  10. Linux中文件上传使用rz