1、Layout文件添加Facebook的LoginBurtton

 <com.facebook.widget.LoginButton
android:id="@+id/authButton"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginLeft="45dp"
android:layout_marginRight="45dp"
android:layout_marginTop="10dp"
android:background="#FF3B5790" />

2、 创建MainFragment 类,并且继承Fragment 类,

重写onCreateView()方法  ;通过LoginButton设置权限 setReadPermissions()    更多权限访问 http://developers.facebook.com/docs/reference/login/#permissions

重写 onSessionStateChange()方法  ,作用:当session状态改变时调用该方法,state.isOpened() 为 true 时,则证明登录成功

private UiLifecycleHelper uiHelper;
private LoginButton authButton; @Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
uiHelper = new UiLifecycleHelper(getActivity(), callback);
uiHelper.onCreate(savedInstanceState);
   authButton = (LoginButton) view.findViewById(R.id.authButton);
authButton.setFragment(this);
authButton.setLoginBehavior(SessionLoginBehavior.SUPPRESS_SSO);
authButton.setReadPermissions(Arrays.asList("email", "user_likes", "user_status"));
} @Override
public void onResume()
{
super.onResume();
Session session = Session.getActiveSession();
if (session != null && (session.isOpened() || session.isClosed()))
{
onSessionStateChange(session, session.getState(), null);
}
uiHelper.onResume();
} @Override
public void onActivityResult(int requestCode, int resultCode, Intent data)
{
super.onActivityResult(requestCode, resultCode, data);
uiHelper.onActivityResult(requestCode, resultCode, data); } @Override
public void onPause()
{
super.onPause();
uiHelper.onPause();
} @Override
public void onDestroy()
{
super.onDestroy();
uiHelper.onDestroy();
} @Override
public void onSaveInstanceState(Bundle outState)
{
super.onSaveInstanceState(outState);
uiHelper.onSaveInstanceState(outState);
} private Session.StatusCallback callback = new Session.StatusCallback()
{
@Override
public void call(Session session, SessionState state, Exception exception)
{
onSessionStateChange(session, state, exception);
}
};
private void onSessionStateChange(Session session, SessionState state, Exception exception)
{
if (state.isOpened())
{ loginByFacebookFinished(session); }
else if (state.isClosed())
{
}
} /**
*登陆成功
**/
private void loginByFacebookFinished(final Session session)
{
Request request = Request.newMeRequest(session, new GraphUserCallback()
{ @Override
public void onCompleted(GraphUser user, Response response)
{
dismissLoadingDlg();
try
{
AccountInfo accountInfo = null;
accountInfo = new AccountInfo();
accountInfo.setVip(false);
accountInfo.setHasLogin(true);
accountInfo.setToken(session.getAccessToken());
//用户信息
if (user != null)
{
accountInfo.setShowUserName(user.getName());
accountInfo.setPassword(user.getLink());
accountInfo.setLoginType(LoginType.FACEBOOK);
accountInfo.setEmail(user.getProperty("email") + "");
accountInfo.setLoginName(user.getProperty("name") + "");
}
}
catch (Exception e)
{
// TODO Auto-generated catch block
e.printStackTrace();
} } });
request.executeAsync(); }

3、退出登录

 /**
* Logout From Facebook
*/
public void callFacebookLogout(Context context) {
Session session = Session.getActiveSession();
if (session != null) { if (!session.isClosed()) {
session.closeAndClearTokenInformation();
//clear your preferences if saved
}
} else { session = new Session(context);
Session.setActiveSession(session); session.closeAndClearTokenInformation();
//clear your preferences if saved
} }

最新文章

  1. volatile关键字 学习记录2
  2. mysql 触发器示例和注解
  3. Sql导出数据报错--&gt;SQL Server 阻止了对组件 &#39;Ad Hoc Distributed Queries&#39; 的 STATEMENT&#39;OpenRowset/OpenDatasource&#39; 的访问
  4. Gradle Cheat Sheet
  5. 浅谈mysql集群
  6. 0011 SDK测试方法&amp;ADB语法
  7. [转]Java多线程干货系列—(一)Java多线程基础
  8. Black Box 分类: POJ 栈和队列 2015-08-05 14:07 2人阅读 评论(0) 收藏
  9. Servlet复习1: 一个简单的Servlet的使用
  10. 如何将MVC Areas中的某一个页设为起始页
  11. Hessian介绍
  12. [C#][ASP.net] 透过WebBrowser 取得AJAX 后的网页
  13. ESFramework ——可堪重任的网络通信框架
  14. 第三章 霍夫变换(Hough Transform)
  15. HDFS的接口(命令行接口和Java接口)--笔记
  16. HDU--2015
  17. 试着简单易懂记录synchronized this object Class的区别,模拟ConcurrentHashMap
  18. 我和Python的Py交易》》》》》》 浮点数的身世字谜
  19. Spring Boot 入门(五):集成 AOP 进行日志管理
  20. kettle使用笔记1--基本安装和使用

热门文章

  1. terraform v0.12.0 发布了
  2. Python3菜鸟教程笔记
  3. Sybase数据库连接配置
  4. avalon用background-image不起作用,怎么来选取前几个的图片进行渲染
  5. samba-centos7
  6. kms windows激活
  7. 273道题目;更新到java题目里面 (已迁移到其他类目下面,存储)
  8. 2019软工实践_Alpha(6/6)
  9. windows如何查看jdk的安装目录
  10. python3.6安装 zipimport.ZipImportError: can&#39;t decompress data; zlib not available【转】