1 搭建开发环境
    1.1 在Facebook官网SDK中,下载4.0.0的SDK包。
    
    1.2 使用Eclipse导入SDK包中的Facebook工程,并添加android-support-v4.jar。
    
    1.3 代码中,有好多List的实例化没有类型,只要把JDK修改为1.7即可。(Facebook工程 -> 右键 -> properties -> Java Compiler -> Enable project specific settings选中 -> Compiler compliance level选择1.7)。
    
    1.4 导入android 的Bolts library(bolts-android-x.x.x.jar).
    
    1.5 将下面代码加入AndroidManiffest.xml中,并修改string.xml中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" />            
        <meta-data
            android:name="com.facebook.sdk.ApplicationId"
            android:value="@string/facebook_app_id" />
    1.6 获取签名的HashCode
        1.6.1 下载 openssl-0.9.8k_WIN32(http://download.csdn.net/detail/h7870181/5054864),解压到C盘根目录。
        1.6.2 cmd下执行下面命令,密码为android。
        keytool -export -alias myAlias -keystore C:\Users\derrick\.android\debug.keystore | C:\openssl-0.9.8k_WIN32\bin\openssl sha1 -binary | C:\openssl-0.9.8k_WIN32\bin\openssl enc -a -e

2 初始化
    
    FacebookSdk.sdkInitialize(getApplicationContext());
    CallbackManager callbackManager = CallbackManager.Factory.create();

3 分享
    此功能比较简单,
    
    2.1 在界面布局文件中,加入如下代码:
    
        <com.facebook.share.widget.ShareButton
            android:id="@+id/shared_button"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center_horizontal"
            android:layout_marginTop="30dp"
            android:layout_marginBottom="30dp" />
            
    2.2 在Activity中,实例化ShareButton,配置分享内容即可。        
        
        ShareButton shareButton = (ShareButton) findViewById(R.id.shared_button);
        //分享网址
        shareButton.setShareContent(new ShareLinkContent.Builder().setContentUrl(Uri.parse("https://developers.facebook.com")).build());
        //
        
3 授权登录

3.1 FaceBook默认登录
 
        3.1.1 添加登录按钮
        
        <com.facebook.login.widget.LoginButton
            android:id="@+id/login_button"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center_horizontal"
            android:layout_marginTop="30dp"
            android:layout_marginBottom="30dp" />
            
        3.1.2 响应功能,并添加回调
    
        LoginButton loginButton = (LoginButton) findViewById(R.id.login_button);
        loginButton.registerCallback(callbackManager, new FacebookCallback<LoginResult>() {
            @Override
            public void onSuccess(LoginResult loginResult) {
                println("onSuccess");
            }

@Override
            public void onCancel() {
                println("onCancel");
            }

@Override
            public void onError(FacebookException exception) {
                println("onError");
            }
        });

3.2 自定义登录
        首先在初始化(2 初始化)完成后,添加登录回调:
        
        LoginManager.getInstance().registerCallback(callbackManager, new FacebookCallback<LoginResult>() {
            @SuppressWarnings("deprecation")
            @Override
            public void onCancel() {
                CookieSyncManager.createInstance(MainActivity.this);
                CookieManager cookieManager = CookieManager.getInstance();
                cookieManager.removeAllCookie();
                CookieSyncManager.getInstance().sync();
            }

@Override
            public void onError(FacebookException arg0) {
            }

@Override
            public void onSuccess(LoginResult arg0) {
                getLoginInfo(loginResult.getAccessToken());
            }

});
                
        @Override
        protected void onActivityResult(final int requestCode, final int resultCode, final Intent data) {
            super.onActivityResult(requestCode, resultCode, data);
            callbackManager.onActivityResult(requestCode, resultCode, data);
        }
        
        3.2.1 添加登录按钮
            
            和普通的Button一样的样式,加入到布局文件中。
            
        3.2.2 实现功能
        
            在button的Onclick事件中,执行授权登录的功能代码:
            LoginManager.getInstance().logInWithReadPermissions(MainActivity.this, Arrays.asList("user_friends", "public_profile"));

3.3 启用Chrome自定义选项卡
    
        当未安装Facebook是,可以使用Chrome选项卡来授权登录(如果Chrome保存用户信息,可以直接登录)。
        
        3.3.1 在Androidmanifest.xml中以下(类似1.5中):
        
            <activity
                android:name="com.facebook.CustomTabActivity"
                android:exported="true">
                <intent-filter>
                    <action android:name="android.intent.action.VIEW" />
                    <category android:name="android.intent.category.DEFAULT" />
                    <category android:name="android.intent.category.BROWSABLE" />
                    <data android:scheme="@string/fb_login_protocol_scheme" />
                </intent-filter>
            </activity>
            
        3.3.2 在String.xml中添加 fb_login_protocol_scheme。
        
            <string name="fb_login_protocol_scheme">fbAPP_ID</string>
    
    3.4 登录状态
        
        通过检查AccessToken.getCurrentAccessToken()和Profile.getCurrentProfile()判断是否登录。
        
4 用户信息

在3.2中,回调onSuccess中执行如下方法:
    
    getLoginInfo(loginResult.getAccessToken());
    
    public void getLoginInfo( AccessToken accessToken ){
        GraphRequest request = GraphRequest.newMeRequest(accessToken, new GraphRequest.GraphJSONObjectCallback() {
            @Override
            public void onCompleted(JSONObject object, GraphResponse response) {
                if (object != null) {
                    String id = object.optString( "id" ) ;   //比如:1565455221565
                    String name = object.optString( "name" ) ;  //比如:Zhang San
                    String gender = object.optString("gender") ;  //性别:比如 male (男)  female (女)
                    String emali = object.optString("email") ;  //邮箱:比如:56236545@qq.com

//获取用户头像
                    JSONObject object_pic = object.optJSONObject( "picture" ) ;
                    JSONObject object_data = object_pic.optJSONObject( "data" ) ;
                    String photo = object_data.optString( "url" )  ;

//获取地域信息
                    String locale = object.optString( "locale" ) ;   //zh_CN 代表中文简体

Toast.makeText( MainActivity.this , "" + object.toString() , Toast.LENGTH_SHORT).show();
                }
            }
        }) ;

Bundle parameters = new Bundle();
        parameters.putString("fields", "id,name,link,gender,birthday,email,picture,locale,updated_time,timezone,age_range,first_name,last_name");
        request.setParameters(parameters);
        request.executeAsync() ;
    }

Android 开发 facebook分享,登陆,获取信息的更多相关文章

  1. 【Android开发资料分享】自己整理的Android开发资料,非常全面

    学习Android以来,不知不觉中收集了大量非常优秀的Android开发资料,一直没有系统的整理,最近抽时间把收藏夹中的资料做了一下整理,现在分享给大家,希望能够帮助到需要的人.这份资料我还会不断的更 ...

  2. Android开发之通过反射获取到挂断电话的API

    Android开发黑名单工具类,需要用到挂断电话的API,但是该API处于隐藏状态,需要通过反射得到该方法.. 步骤: 1.通过当前类获取到ServiceManager的字节码 Class< ? ...

  3. Android 开发 微信分享,登陆,获取信息

    1 获取appid和appsecret.        https://open.weixin.qq.com/cgi-bin/index?t=home/index&lang=zh_CN     ...

  4. php开发微信公众号获取信息LBS

    1.一般的公众号都可以在微信公众平台里面设置自定义菜单和自动回复消息,如果需要获取用户位置,则必须开启 服务器配置,当次功能开启后,微信公众平台的自定义菜单和自动回复则失效. 需要通过接口开发来实现微 ...

  5. 2)实现github自动登陆获取信息

    # -*- coding:utf-8 -*- # __author__ = 'lixiang' # 实现github自动登陆和获取数据 import requests from bs4 import ...

  6. Android开发之通过反射获取到Android隐藏的方法

    在PackageManger中,有些方法被隐藏了,无法直接调用,需要使用反射来获取到该方法. 比如方法:getPackageSizeInfo(),通过这个方法可以获取到apk的CacheSize,Co ...

  7. Android 开发笔记___登陆app

    package com.example.alimjan.hello_world; /** * Created by alimjan on 7/4/2017. */ import android.con ...

  8. Android 开发工具类 31_WebService 获取手机号码归属地

    AndroidInteractWithWebService.xml <?xml version="1.0" encoding="utf-8"?> & ...

  9. Android开发 sharesdk分享微信/朋友圈的时候只显示文字,不显示链接

    问题:分享的时候只将分享的content分享出去了,连标题及链接都没有分享出去. 原因:没有配置image导致. 解决办法: 在  showShare 方法里面添加配置: if(ImageUrlOrP ...

随机推荐

  1. scons自动化构建工具

    方式一 可以官方下载,安装使用 方式二 使用 RT-Thread env工具,其中集成了scons工具 env工具配置 打开设置 添加到右键菜单 使用scons生成mdk5工程 > scons ...

  2. pycharm中新建Vue项目时没有vue.js的解决办法

    可能很多小伙伴在使用pycharm 1,新建vue项目的时候并没有发现vue.js的名字, 2,新建.vue文件(即单文件组件)的时候没有 下面就来帮助大家一下,仅供参考 如图: 1.首先我们打开设置 ...

  3. VEH帮你定位程序崩溃地址

    之前朋友有一个服务端程序,总是受到一些人的恶意漏洞攻击,没有源代码,只好反汇编修复了漏洞,并且使用WinLicense加保护授权. 漏洞总不是一次可以修复完的,恶意攻击并没有停止,然后加了WL保护程序 ...

  4. 原创: idea 的maven 方式配置 开发javaWeb(idea+tomcat +maven

    通过idea 编辑器来配置基于maven创建站点,在tomcat上配置 在采用idea 配置之前,首先要确保maven和 tomcat 正确运行. maven 配置链接 tomcat 配置链接 实际你 ...

  5. 快速读写模板(int)

    一.快速读入模板(int) inline int read(int x){ char ch=getchar(); int x=0,f=1; while(ch>='9'||ch<='0'){ ...

  6. 论文阅读笔记(二十一)【CVPR2017】:Deep Spatial-Temporal Fusion Network for Video-Based Person Re-Identification

    Introduction (1)Motivation: 当前CNN无法提取图像序列的关系特征:RNN较为忽视视频序列前期的帧信息,也缺乏对于步态等具体信息的提取:Siamese损失和Triplet损失 ...

  7. 1-1.初始K8s

    术语及原理 Master(主节点:control plane) 集群中的神经中枢网关.负责整个集群的资源管理.Pod调度.弹性伸缩.安全控制.系统监控.纠错等管理功能. ApiServer 集群的网关 ...

  8. C# VS2017 WinForm 打包和升级

    C# WinFrom打包不怎么常用,但一年总有那么一两次,每次都记不全,为了方便自己回看,于是有了本篇文章. 本例使用<C#工具类LogHelper>的解决方案作为例子,实现WinForm ...

  9. Winform中怎样对窗体进行隐藏,再次打开时仍然保留上次的窗体

    场景 点击按钮后打开窗口,点击窗口的确定按钮后即使窗体返回了Ok,此时不关闭窗体,将窗体隐藏. 再次点击按钮后,仍然打开上次的窗体. 注: 博客主页: https://blog.csdn.net/ba ...

  10. 【WPF学习】第一章 XAML介绍

    XAML(Extensible Application Markup Language的简写,发音为“zammel”)是用于实例化.NET对象的标记语言.尽管XAML是一种应用于诸多不同问题领域的技术 ...