五陵年少金市东,银鞍白马渡春风。这篇文章主要讲述Android 应用程序集成FaceBook 登录及二次封装相关的知识,希望能为你提供帮助。
1、首先在Facebook 开发者平台注册一个账号
https://developers.facebook.com/
开发者后台
https://developers.facebook.com/apps
2、创建账号并且获得 APP ID
图一
![Android 应用程序集成FaceBook 登录及二次封装](http://img.readke.com/220412/01041H323-0.png)
文章图片
图二
![Android 应用程序集成FaceBook 登录及二次封装](http://img.readke.com/220412/01041HL7-1.png)
文章图片
图三
![Android 应用程序集成FaceBook 登录及二次封装](http://img.readke.com/220412/01041H4I-2.png)
文章图片
图四
![Android 应用程序集成FaceBook 登录及二次封装](http://img.readke.com/220412/01041G5V-3.png)
文章图片
图五
![Android 应用程序集成FaceBook 登录及二次封装](http://img.readke.com/220412/01041Ia6-4.png)
文章图片
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 packageNameapp的包名 20*/ 21public static void getKeyHash( Context context , String packageName ){ 22try { 23PackageInfo info = null; 24info = context.getPackageManager().getPackageInfo( packageName , PackageManager.GET_SIGNATURES ); 25for ( Signature signature : info.signatures ) { 26MessageDigest messageDigest = null; 27messageDigest = MessageDigest.getInstance("SHA"); 28messageDigest.update(signature.toByteArray()); 29String hs = Base64.encodeToString(messageDigest.digest(), Base64.DEFAULT) ; 30Toast.makeText(context, "" + hs , Toast.LENGTH_SHORT).show(); 31} 32} catch (PackageManager.NameNotFoundException e) { 33e.printStackTrace(); 34} catch (NoSuchAlgorithmException e) { 35e.printStackTrace(); 36} 37} 38 }
3.2 命令行的方式获取 Key hash 值
3.2.1 :首选保证你的电脑上有 openSSl 的库文件 下载 http://gnuwin32.sourceforge.net/packages/openssl.htm
![Android 应用程序集成FaceBook 登录及二次封装](http://img.readke.com/220412/01041G562-5.png)
文章图片
3.2.2 :解压下载的文件
![Android 应用程序集成FaceBook 登录及二次封装](http://img.readke.com/220412/01041L024-6.png)
文章图片
3.2.3:cmd 命令行模式定位到 openssl 的 bin目录下
![Android 应用程序集成FaceBook 登录及二次封装](http://img.readke.com/220412/01041MY8-7.png)
文章图片
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 代表签名的路径,需要换成你签名的路径
![Android 应用程序集成FaceBook 登录及二次封装](http://img.readke.com/220412/01041J232-8.png)
文章图片
![Android 应用程序集成FaceBook 登录及二次封装](http://img.readke.com/220412/01041K257-9.png)
文章图片
3.2.5 如果你的电脑上没有下载 openssl 那么你执行下面的代码会出现
![Android 应用程序集成FaceBook 登录及二次封装](http://img.readke.com/220412/01041H515-10.png)
文章图片
4、设置应用的基本配置 图一
![Android 应用程序集成FaceBook 登录及二次封装](http://img.readke.com/220412/01041GR0-11.png)
文章图片
图二
![Android 应用程序集成FaceBook 登录及二次封装](http://img.readke.com/220412/01041J118-12.png)
文章图片
图三
![Android 应用程序集成FaceBook 登录及二次封装](http://img.readke.com/220412/01041MX4-13.png)
文章图片
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-data android:name="com.facebook.sdk.ApplicationId" android:value="https://www.songbingjia.com/android/@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) 24public LoginButton facebook_bt; 25 26private CallbackManager callbackManager ; 27 28@Override 29protected void onCreate(Bundle savedInstanceState) { 30super.onCreate(savedInstanceState); 31setContentView(R.layout.activity_login); 32 33ButterKnife.bind(this); 34callbackManager = CallbackManager.Factory.create() ; 35 36init(); 37} 38 39private void init() { 40 41facebook_bt.registerCallback(callbackManager, new FacebookCallback< LoginResult> () { 42@Override 43public void onSuccess(LoginResult loginResult) { 44Toast.makeText(LoginLoginActivity.this, "facebook登录成功了", Toast.LENGTH_SHORT).show(); 45log("facebook登录成功了" + loginResult.getAccessToken());
//获取登录信息
getLoginInfo( loginResult.getAccessToken() ) ; 46} 47 48@Override 49public void onCancel() { 50Toast.makeText(LoginLoginActivity.this, "facebook登录取消了", Toast.LENGTH_SHORT).show(); 51log("facebook登录取消了"); 52} 53 54@Override 55public void onError(FacebookException error) { 56Toast.makeText(LoginLoginActivity.this, "facebook登录失败了", Toast.LENGTH_SHORT).show(); 57log("facebook登录失败了"); 58} 59}); 60 61} 62 63@Override 64protected void onActivityResult(int requestCode, int resultCode, Intent data) { 65super.onActivityResult(requestCode, resultCode, data); 66 67//facebook回调 68callbackManager.onActivityResult( requestCode , resultCode ,data ) ; 69} 70 }
1 /** 2* 获取登录信息 3* @param accessToken 4*/ 5public void getLoginInfo( AccessToken accessToken ){ 6GraphRequest request = GraphRequest.newMeRequest(accessToken, new GraphRequest.GraphJSONObjectCallback() { 7@Override 8public void onCompleted(JSONObject object, GraphResponse response) { 9if (object != null) { 10String id = object.optString( "id" ) ; //比如:1565455221565 11String name = object.optString( "name" ) ; //比如:Zhang San 12String gender = object.optString("gender") ; //性别:比如 male (男)female (女) 13String emali = object.optString("email") ; //邮箱:比如:[email protected] 14 15//获取用户头像 16JSONObject object_pic = object.optJSONObject( "picture" ) ; 17JSONObject object_data = https://www.songbingjia.com/android/object_pic.optJSONObject("data" ) ; 18String photo = object_data.optString( "url" ); 19 20//获取地域信息 21String locale = object.optString( "locale" ) ; //zh_CN 代表中文简体 22 23Toast.makeText( activity , "" + object.toString() , Toast.LENGTH_SHORT).show(); 24} 25} 26}) ; 27 28Bundle parameters = new Bundle(); 29parameters.putString("fields", "id,name,link,gender,birthday,email,picture,locale,updated_time,timezone,age_range,first_name,last_name"); 30request.setParameters(parameters); 31request.executeAsync() ; 32}
5.7 企业账号需要注意的事项,把发布按钮打开
![Android 应用程序集成FaceBook 登录及二次封装](http://img.readke.com/220412/01041I4R-14.png)
文章图片
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 30private Activity activity ; 31private CallbackManager callbackManager ; 32private FacebookListener facebookListener ; 33private List< String> permissions = Collections.< String> emptyList(); 34private LoginManager loginManager; 35 36public FaceBookLogin( Activity activity ){ 37this.activity = activity ; 38 39//初始化facebook登录服务 40callbackManager = CallbackManager.Factory.create() ; 41getLoginManager().registerCallback(callbackManager, new FacebookCallback< LoginResult> () { 42@Override 43public void onSuccess(LoginResult loginResult) { 44// login success 45AccessToken accessToken = loginResult.getAccessToken(); 46getLoginInfo(accessToken); 47} 48 49@Override 50public void onCancel() { 51//取消登录 52} 53 54@Override 55public void onError(FacebookException error) { 56//登录出错 57} 58}); 59 60permissions = Arrays 61.asList("email", "user_likes", "user_status", "user_photos", "user_birthday", "public_profile", "user_friends") ; 62} 63 64/** 65* 登录 66*/ 67public void login(){ 68getLoginManager().logInWithReadPermissions( 69activity, permissions); 70} 71 72/** 73* 退出 74*/ 75public void logout(){ 76String logout = activity.getResources().getString( 77com.facebook.R.string.com_facebook_loginview_log_out_action); 78String cancel = activity.getResources().getString( 79com.facebook.R.string.com_facebook_loginview_cancel_action); 80String message; 81Profile profile = Profile.getCurrentProfile(); 82if (profile != null & & profile.getName() != null) { 83message = String.format( 84activity.getResources().getString( 85com.facebook.R.string.com_facebook_loginview_logged_in_as), 86profile.getName()); 87} else { 88message = activity.getResources().getString( 89com.facebook.R.string.com_facebook_loginview_logged_in_using_facebook); 90} 91AlertDialog.Builder builder = new AlertDialog.Builder(activity); 92builder.setMessage(message) 93.setCancelable(true) 94.setPositiveButton(logout, new DialogInterface.OnClickListener() { 95public void onClick(DialogInterface dialog, int which) { 96getLoginManager().logOut(); 97} 98}) 99.setNegativeButton(cancel, null); 100builder.create().show(); 101} 102 103/** 104* 获取登录信息 105* @param accessToken 106*/ 107public void getLoginInfo( AccessToken accessToken ){ 108GraphRequest request = GraphRequest.newMeRequest(accessToken, new GraphRequest.GraphJSONObjectCallback() { 109@Override 110public void onCompleted(JSONObject object, GraphResponse response) { 111if (object != null) { 112String id = object.optString("id"); //比如:1565455221565 113String name = object.optString("name"); //比如:Zhang San 114String gender = object.optString("gender"); //性别:比如 male (男)female (女) 115String emali = object.optString("email"); //邮箱:比如:[email protected] 116 117//获取用户头像 118JSONObject object_pic = object.optJSONObject("picture"); 119JSONObject object_data = https://www.songbingjia.com/android/object_pic.optJSONObject("data"); 120String photo = object_data.optString("url"); 121 122//获取地域信息 123String locale = object.optString("locale"); //zh_CN 代表中文简体 124 125Toast.makeText(activity, "" + object.toString(), Toast.LENGTH_SHORT).show(); 126} 127} 128}) ; 129 130Bundle parameters = new Bundle(); 131parameters.putString("fields", "id,name,link,gender,birthday,email,picture,locale,updated_time,timezone,age_range,first_name,last_name"); 132request.setParameters(parameters); 133request.executeAsync() ; 134} 135 136/** 137* 获取loginMananger 138* @return 139*/ 140private LoginManager getLoginManager() { 141if (loginManager == null) { 142loginManager = LoginManager.getInstance(); 143} 144return loginManager; 145} 146 147public CallbackManager getCallbackManager(){ 148return callbackManager ; 149} 150 151/** 152* 设置登录简体器 153* @param facebookListener 154*/ 155public void setFacebookListener( FacebookListener facebookListener ){ 156this.facebookListener =facebookListener ; 157} 158 159public interface FacebookListener { 160void facebookLoginSuccess(); 161void facebookLoginFail() ; 162} 163 164 165 }
在 activity 使用
1//初始化Facebook登录服务 2FaceBookLoginfaceBookLogin = new FaceBookLogin( this ) ; 3 4//登录 5faceBookLogin.login(); 6 7//退出 8faceBookLogin.logout();
1 @Override 2protected void onActivityResult(int requestCode, int resultCode, Intent data) { 3super.onActivityResult(requestCode, resultCode, data); 4 5//facebook回调 6faceBookLogin.getCallbackManager().onActivityResult(requestCode, resultCode, data); 7 8}
【Android 应用程序集成FaceBook 登录及二次封装】
推荐阅读
- Android系统框架介绍
- 软件设计复杂度 – 软件工程教程
- 软件界面设计 – 软件工程教程
- 软件设计策略 – 软件工程教程
- 软件分析和设计工具 – 软件工程教程
- 软件设计基础 – 软件工程教程
- 软件需求 – 软件工程教程
- 软件项目管理 – 软件工程教程
- 软件开发生命周期 – 软件工程教程