Android 开发 facebook分享,登陆,获取信息
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分享,登陆,获取信息的更多相关文章
- 【Android开发资料分享】自己整理的Android开发资料,非常全面
学习Android以来,不知不觉中收集了大量非常优秀的Android开发资料,一直没有系统的整理,最近抽时间把收藏夹中的资料做了一下整理,现在分享给大家,希望能够帮助到需要的人.这份资料我还会不断的更 ...
- Android开发之通过反射获取到挂断电话的API
Android开发黑名单工具类,需要用到挂断电话的API,但是该API处于隐藏状态,需要通过反射得到该方法.. 步骤: 1.通过当前类获取到ServiceManager的字节码 Class< ? ...
- Android 开发 微信分享,登陆,获取信息
1 获取appid和appsecret. https://open.weixin.qq.com/cgi-bin/index?t=home/index&lang=zh_CN ...
- php开发微信公众号获取信息LBS
1.一般的公众号都可以在微信公众平台里面设置自定义菜单和自动回复消息,如果需要获取用户位置,则必须开启 服务器配置,当次功能开启后,微信公众平台的自定义菜单和自动回复则失效. 需要通过接口开发来实现微 ...
- 2)实现github自动登陆获取信息
# -*- coding:utf-8 -*- # __author__ = 'lixiang' # 实现github自动登陆和获取数据 import requests from bs4 import ...
- Android开发之通过反射获取到Android隐藏的方法
在PackageManger中,有些方法被隐藏了,无法直接调用,需要使用反射来获取到该方法. 比如方法:getPackageSizeInfo(),通过这个方法可以获取到apk的CacheSize,Co ...
- Android 开发笔记___登陆app
package com.example.alimjan.hello_world; /** * Created by alimjan on 7/4/2017. */ import android.con ...
- Android 开发工具类 31_WebService 获取手机号码归属地
AndroidInteractWithWebService.xml <?xml version="1.0" encoding="utf-8"?> & ...
- Android开发 sharesdk分享微信/朋友圈的时候只显示文字,不显示链接
问题:分享的时候只将分享的content分享出去了,连标题及链接都没有分享出去. 原因:没有配置image导致. 解决办法: 在 showShare 方法里面添加配置: if(ImageUrlOrP ...
随机推荐
- macOS Catalina 10.15版本下anaconda安装后navigator无法正常打开的解决方法
我最近用闲置的money购置了一个ipad,想利用ipad作为mac的复屏,但是这需要将macos升级到catalina才能支持这个功能,但是catalina的更新会导致很多软件都发生无法启动或一些奇 ...
- java面向对象入门(3)-java构造方法
Java构造函数是特殊的方法(没有返回类型),使您可以在应用程序内部的其他类使用对象之前完全初始化对象状态.Java中的构造方法是使用new关键字调用的.下面让我们更深入地了解构造函数. 1.什么是j ...
- Node.js文档-os
获取操作系统相关信息 引用 const os = require('os') os.cpus() 获取当前机器的CPU信息 console.log(os.cpus()) 打印结果: [ { model ...
- 逆战:微信小程序开发(二)
一.常用组件 在上一个章节中讲解了封装请求数据的模块,在此处请求轮播图的数据 1.首页轮播图数据的请求以及渲染 1.1 轮播图数据的请求 pages/home/home.js import { req ...
- 使用SignalR从服务端主动推送警报日志到各种终端(桌面、移动、网页)
微信公众号:Dotnet9,网站:Dotnet9,问题或建议:请网站留言, 如果对您有所帮助:欢迎赞赏. 使用SignalR从服务端主动推送警报日志到各种终端(桌面.移动.网页) 阅读导航 本文背景 ...
- JavaScript自学笔记(2)---function a(){} 和 var a = function(){}的区别(javascript)
function a(){} 和 var a = function(){}的区别: 学习做浮窗,看到别人的代码里有: window.onresize = function(){ chroX = doc ...
- equals和==的使用
1.equals的使用: 引用数据类型的比较:通常情况下比较的是引用数据类型下的栈中的地址,但当你重写了equals方法后就不一定了 User user1=new User("tom&quo ...
- cf1242B
题意简述:给出一个n个点的完全图,边权要么是1要么是0,输入只给出权值的是1的那些边,求解最小生成树的权值 解答:边很多,我们考虑使用prim算法,prim算法的过程中维护了一个dis数组,这里我们可 ...
- ps调整图片指定区域的颜色,两种方法
参考链接:http://tech.wmzhe.com/article/12329.html
- 【笔记】机器学习 - 李宏毅 - 12 - CNN
Convolutional Neural Network CNN 卷积神经网络 1. 为什么要用CNN? CNN一般都是用来做图像识别的,当然其他的神经网络也可以做,也就是输入一张图的像素数组(pix ...