前一篇我们学习了集成FacebookSDK到我们项目工程中,这篇来学习一下如何使用facebook来登录!

1、打开 res/layout/activity_main.xml,在布局中添加一个facebook登录按钮

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"tools:context=".MainActivity" ><com.facebook.widget.LoginButtonandroid:id="@+id/login_button"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_gravity="center_horizontal"android:layout_marginBottom="30dp"android:layout_marginTop="30dp" />
</LinearLayout>

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

重写onCreateView()方法

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

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

package com.thirdfacebook;import java.util.Arrays;import android.content.Intent;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;import com.facebook.Session;
import com.facebook.SessionState;
import com.facebook.UiLifecycleHelper;
import com.facebook.widget.LoginButton;public class MainFragment extends Fragment {private static final String TAG = "MainFragment";private UiLifecycleHelper uiHelper;private Session.StatusCallback callback = new Session.StatusCallback() {@Overridepublic void call(Session session, SessionState state,Exception exception) {onSessionStateChange(session, state, exception);}};@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);uiHelper = new UiLifecycleHelper(getActivity(), callback);uiHelper.onCreate(savedInstanceState);}@Overridepublic View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {View view = inflater.inflate(R.layout.activity_main, container, false);LoginButton authButton = (LoginButton) view.findViewById(R.id.login_button);authButton.setFragment(this);authButton.setReadPermissions(Arrays.asList("email","user_likes", "user_status"));return view;}private void onSessionStateChange(Session session, SessionState state,Exception exception) {if (state.isOpened()) {Log.i(TAG, "Logged in...");} else if (state.isClosed()) {Log.i(TAG, "Logged out...");}}@Overridepublic void onResume() {super.onResume();// For scenarios where the main activity is launched and user// session is not null, the session state change notification// may not be triggered. Trigger it if it's open/closed.Session session = Session.getActiveSession();if (session != null && (session.isOpened() || session.isClosed())) {onSessionStateChange(session, session.getState(), null);}uiHelper.onResume();}@Overridepublic void onActivityResult(int requestCode, int resultCode, Intent data) {super.onActivityResult(requestCode, resultCode, data);uiHelper.onActivityResult(requestCode, resultCode, data);}@Overridepublic void onPause() {super.onPause();uiHelper.onPause();}@Overridepublic void onDestroy() {super.onDestroy();uiHelper.onDestroy();}@Overridepublic void onSaveInstanceState(Bundle outState) {super.onSaveInstanceState(outState);uiHelper.onSaveInstanceState(outState);}
}

3、MainActivity 类 ,继承FragmentActivity类  ,初始化 添加MainFragment 类,打印哈希值可写可不写

package com.thirdfacebook;import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.content.pm.PackageManager.NameNotFoundException;
import android.content.pm.Signature;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.util.Base64;
import android.util.Log;
import android.view.Menu;public class MainActivity extends FragmentActivity {private MainFragment mainFragment;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);if (savedInstanceState == null) {// Add the fragment on initial activity setupmainFragment = new MainFragment();getSupportFragmentManager().beginTransaction().add(android.R.id.content, mainFragment).commit();} else {// Or set the fragment from restored state infomainFragment = (MainFragment) getSupportFragmentManager().findFragmentById(android.R.id.content);}/*** 打印哈希值*/try {PackageInfo info = getPackageManager().getPackageInfo("com.firstfacebook", PackageManager.GET_SIGNATURES);for (Signature signature : info.signatures) {MessageDigest md = MessageDigest.getInstance("SHA");md.update(signature.toByteArray());Log.i("KeyHash:", Base64.encodeToString(md.digest(), Base64.DEFAULT));}} catch (NameNotFoundException e) {} catch (NoSuchAlgorithmException e) {}}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {// Inflate the menu; this adds items to the action bar if it is present.getMenuInflater().inflate(R.menu.activity_main, menu);return true;}
}

4、AndroidMainfest.xml 添加 facebook LoginActivity(登录activity)

<activity android:name="com.facebook.LoginActivity"/>

5、运行项目 成功运行后登录按钮变成Log Out, 点击Log Out则注销

参考自:http://developers.facebook.com/docs/howtos/androidsdk/3.0/login-with-facebook/

如果错误,望大牛多多指出!

Android下使用最新FaceBook SDK 3.0(二)使用facebook实现登录注销相关推荐

  1. Deepin15.8系统下安装QorIQ Linux SDK v2.0 yocto成功完美运行的随笔

    2019.2.17日:最终安装成功,完美解决! 2019.2.16日:最终安装未成功,但是过程中排除 了几个bug,前进了几步,仅供参考. 写在最前面,yocto安装是有系统要求的,Deepin 15 ...

  2. 魅族新系统android o,魅族最新系统 Flyme 1.0 for M9 正式版 基于Android 4.0

    M9固件(版本:Flyme 1.0.1)版本:Flyme 1.0.1 更新时间:2012-07-12 适用机型:M9 软件大小:104M MD5:2a24f3c1f4bd7bb987eceed1dfb ...

  3. java 基于虹软离线人脸识别SDK 2.0 最新版

    虹软人脸识别SDK之Java版,支持SDK 1.1+,以及当前最新版本2.0,滴滴,抓紧上车! JDK SDK Win release license status 前言 由于业务需求,最近跟人脸识别 ...

  4. Android下USB Accessory的实现分析 (三)--- Android Open AccessoryProtocol

    本文 接着前面的文章 <Android下USB Accessory的实现分析 (二)- 底层驱动设计实现> 2.1.4 Android Open AccessoryProtocol 为了支 ...

  5. Android下USB Accessory的实现分析 (一)--- AOA背景介绍

    摘要 本文介绍了USB Accessory的一些背景知识,并从Linux驱动到Android Framework层,阐述了USB accessory的整个实现过程. 关键词: Android,USB, ...

  6. Android系统在超级终端下必会的命令大全(二)

    Android系统在超级终端下必会的命令大全(二) 安装和登录命令 reboot1.作用 reboot命令的作用是重新启动计算机,它的使用权限是系统管理者. 2.格式 reboot [-n] [-w] ...

  7. android sdk 8.1.0,OneAPM版本更新:Android SDK 1.0.8

    [导读]OneAPM推出新一代移动端性能监控产品Mobile Insight, 能够帮助企业实时监测移动应用的真实用户体验,实现端到端的应用性能分析.并且Mi可以深入到代码级进行应用性能问题剖析,通过 ...

  8. Android O(SDK 8.0)新特性,刘海屏

    > Android刘海屏 Android 屏幕,16:9,17:9,19:10,18:9,18.5:9所谓全面屏.挖孔屏.凹凸屏等. android 全面屏/刘海屏有效适配- https://b ...

  9. Android下进行 Facebook 分享

    1.  下载 Facebook SDK 2.  在facebook下设置app的相关信息 3.  示例代码: package com.example.testshare;import com.exam ...

最新文章

  1. java qq音乐接口 api,QQ音乐解析API接口更新:支持HQ,ape,flac无损音质,缓存功能
  2. 如何在Mac下显示Finder中的所有文件
  3. RailsCasts中文版,#16 Virtual Attributes 虚拟属性
  4. mysql 添加表索引_如何向MySQL表中添加索引?
  5. 自动爬取中国大学mooc的pdf文档
  6. mysql信息函数和加密函数_MYSQL 常用函数(数学、字符串、日期时间、系统信息、加密)...
  7. linux下nginx的基本使用
  8. 学习笔记 ---- 设计模式之观察者模式
  9. axure下载及汉化
  10. python调用activateMQ进行数据传输
  11. 201632位matlab下载_Matlab R2016a x32|matlab 2016a 32位版下载 完全免费版 - 121下载站
  12. 【从零开始学架构-李运华】10|架构设计流程:识别复杂度
  13. 2017中国银行业发展趋势报告
  14. plsql误删除数据,怎么恢复?
  15. SpringBoot - Lombok的使用
  16. python代码如何加密
  17. Powell算法、Powell修正算法_matlab仿真
  18. 能吃的东西还有多少!!!!
  19. eDiary 个人日记本使用技巧
  20. 轻巧的jQuery提示框插件Tipso

热门文章

  1. rem、em、px的区别,详细介绍rem与px的转换
  2. spring使用JavaConfig进行配置
  3. you-get库、you-get 下载视频失败
  4. B站发布《毕业季大数据报告》,最让年轻人头秃的原来是?
  5. android+深度文件恢复工具,深度恢复大师app下载-深度恢复大师 安卓版v8.3-PC6安卓网...
  6. classes.dex汉化
  7. python计算机视觉pdf百度云下载_Python计算机视觉编程pdf
  8. 青岛啤酒香飘紫禁城 邀你“进宫”过年
  9. 3dsMax显示运动路径却没有显示的一种情况
  10. 精华游戏算法整理_整理游戏