Android 应用程序集成FaceBook 登录及二次封装
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 登录及二次封装相关推荐
- Android 应用程序集成Google 登录及二次封装
谷歌登录API: https://developers.google.com/identity/sign-in/android/ 1.注册并且登录google网站 https://accounts. ...
- Android集成Facebook登录时遇到的问题invalid key hash.the key hash
一.Facebook:登录功能已停用,我们已停用通过嵌入式浏览器登录Facebook的功能 错误提示: 为保护账户安全,我们已停用通过嵌入式浏览器登录Facebook的功能.若要继续,请更新登录使用的 ...
- 在Android App中集成Google登录
技术文章 来源:码农网 发布:2016-09-19 浏览:194 摘要:今天,几乎所有的web和移动app都自带谷歌和Facebook登录,这对app开发者和用户来说是一个非常有用的功能,因为几乎每个 ...
- Android平台上集成大华SDK(二)
Android平台上集成大华SDK 以上是我之前写的一篇Android平台上集成大华SDK的文章,其中对于Android平台上集成大华SDK.基于大华SDK进行二次开发基本上进行了详细地介绍. 这篇文 ...
- Android安卓开发集成微信第三方扫描二维码登录-超级无敌具详细
Android安卓开发中集成微信二维码登录的步骤: 写在前面的: 该教程使用AS作为演示,使用ecplise请参照微信官方文档下载相应jar等所需参考文档和资源.在最后,我会附上这个Activity的 ...
- Android 集成facebook 登录和分享
,开场白给大脸书 导入SDK dependencies { compile 'com.facebook.android:facebook-android-sdk:4.15.0' app_id在stri ...
- Android使用ShareSDK集成第三方登录和分享(v3.1.2)
一.产品概述 ShareSDK是一种社会化分享组件,为iOS.Android.WP8 的APP提供社会化功能,集成了一些常用的类库和接口,缩短开发者的开发时间,还有社会化统计分析管理后台. 二.集成方 ...
- (unity)新手接入Facebook登录,分享以及google登录,Android,IOS,OC接入篇
最近接Android,IOS的Facebook登录,分享 以及Google登录,分享流程以及遇到的问题整理. 一. Android接入 google登录 第一步,前往 [ firebase] http ...
- Android 版 Facebook 登录
Android 版 Facebook SDK 让用户可以通过 Facebook 登录注册您的应用.通过 Facebook 登录您的应用时,用户可以向应用授予权限,以便您可以检索信息或以用户的身份在 F ...
最新文章
- 自学python后能干什么-学习python后能做哪方面的工作
- encodeURIComponent编码2次
- li变成行内块级元素之后,每一个li之间会有间隙,这是为什么?
- 【Android】多线程下载加断点续传
- 科大星云诗社动态20211108
- 【Python基础】Python 炫技操作:推导式的五种写法
- CentOS 5.3 已经发布!
- 【转载】JAVAEE之内置对象和属性范围
- linux 搭建任务队列集群,beanstalkd任务队列 linux平台安装测试
- 机器人踩滑板_不死神草、飞行滑板…超2000种创新发明在这里展出
- Python获取局域网内所有机器IP地址与网卡MAC地址
- 蓝牙 配对 android,Android蓝牙工具类:连接、配对、传输
- GDAL书籍中删除数据勘误(C#语言)
- Netty之Channel、NioEventLoopGroup、客户端connect方法总结
- 基于置信加权池的全卷积保证颜色恒常性
- c语言math库正弦余弦函数
- 超强合集:OCR 文本检测干货汇总(含论文、源码、demo 等资源)
- 【数据库实验一】基础操作
- 你PICK的球队可能没赢,但PICK以下拍摄技巧绝对稳赚不赔!
- vue滑杆_非常简单的Vue滑杆组件
热门文章
- linux下载哪个python版本-Linux升级python版本
- 廖雪峰python教程完整版-为什么看不懂廖雪峰的Python学习教程?
- Mint系统使用介绍,Mint系统安装,在Mint系统上搭建GPU环境,在Mint系统上安装Pycharm、Anaconda等软件,在Mint系统上安装cuda和cudnn
- 图像的评价指标之PSNR——峰值信噪比
- 调制优缺点_复合铝基润滑脂和普通润滑脂的区别,复合铝基脂有什么优缺点
- linux ubuntu 虚拟机中配置samba的实现文件共享的方法
- Java中的运行期类型鉴定
- 网络编程学习笔记(使用select函数的TCP和UDP回射服务器程序)
- Java 注解用法详解——@SuppressWarnings
- Linux中文件上传使用rz