Android--Facebook Login with LoginButton
2024-08-20 18:11:17
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
} }
最新文章
- volatile关键字 学习记录2
- mysql 触发器示例和注解
- Sql导出数据报错-->;SQL Server 阻止了对组件 &#39;Ad Hoc Distributed Queries&#39; 的 STATEMENT&#39;OpenRowset/OpenDatasource&#39; 的访问
- Gradle Cheat Sheet
- 浅谈mysql集群
- 0011 SDK测试方法&;ADB语法
- [转]Java多线程干货系列—(一)Java多线程基础
- Black Box 分类: POJ 栈和队列 2015-08-05 14:07 2人阅读 评论(0) 收藏
- Servlet复习1: 一个简单的Servlet的使用
- 如何将MVC Areas中的某一个页设为起始页
- Hessian介绍
- [C#][ASP.net] 透过WebBrowser 取得AJAX 后的网页
- ESFramework ——可堪重任的网络通信框架
- 第三章 霍夫变换(Hough Transform)
- HDFS的接口(命令行接口和Java接口)--笔记
- HDU--2015
- 试着简单易懂记录synchronized this object Class的区别,模拟ConcurrentHashMap
- 我和Python的Py交易》》》》》》 浮点数的身世字谜
- Spring Boot 入门(五):集成 AOP 进行日志管理
- kettle使用笔记1--基本安装和使用
热门文章
- terraform v0.12.0 发布了
- Python3菜鸟教程笔记
- Sybase数据库连接配置
- avalon用background-image不起作用,怎么来选取前几个的图片进行渲染
- samba-centos7
- kms windows激活
- 273道题目;更新到java题目里面 (已迁移到其他类目下面,存储)
- 2019软工实践_Alpha(6/6)
- windows如何查看jdk的安装目录
- python3.6安装 zipimport.ZipImportError: can&#39;t decompress data; zlib not available【转】