万博安卓客户端怎么用FB客户端?求具体方法。

用FB怎么翻墙
全部***(共2个回答)
妹子手机无法上推特FB关注大萌萌的问题,在此就和大家分享一下安卓手机翻墙的简单方法。
用***。在我的百度空间有一款,你看看,个人一直在用,速度不错,有6个IP可选,建议先不买,免费用用先,好的再买。包年的话会比包月划算好多
下一个叫翻墙路由器的软件就可以了,很好用
自行下载了,免费的.
安卓手机版翻Q_...大小:1.17M
已经过百度安全检测,放心下载
什么爬墙阿,往路边的高坡上顺过去就可以了,比如刷火,左边的顺上去就可以了(第二路口后右边那个岔道),在上面休整,末端跳下去,再顺上左边的第二道坡就行了,然后在休...
翻墙,用Facebook加好友
Hay day 卡通农场 安卓版 交流群,进群我们一起研究,一起讨论,一起游戏。
雅典LEMONOKIPOS值得去吗?
答: 美国苹果公司的新款手机,全触屏的智能机,在中国卖的很贵。
答: 手机购买还是找正规卖家
天猫等网站
答: 可能被设置了禁言你IP接入吧
大家还关注
确定举报此问题
举报原因(必选):
广告或垃圾信息
激进时政或意识形态话题
不雅词句或人身攻击
侵犯他人隐私
其它违法和不良信息
报告,这不是个问题
报告原因(必选):
这不是个问题
这个问题分类似乎错了
这个不是我熟悉的地区Facebook Android SDK 4.14使用详解_Linux编程_Linux公社-Linux系统门户网站
你好,游客
Facebook Android SDK 4.14使用详解
来源:Linux社区&
作者:lvshaorong
作为一名东南亚APP开发者,Facebook登录和分享是绕不过去的一个功能,最近将APP里的Facebook登录和分享SDK升级到2016年8月的版本,代码改动挺大,现在把具体的代码贴出来供后来者升级SDK方便
首先看一下实现效果:
Facebook SDK 的部署方法:
首先,你需要去注册一个开发账号,然后用app的包名和SHA1获得一个app_id
好了现在可以开始正式部署了,首先引用官网的初始化方案:(以下内容来自)
Studio 设置
要在项目中使用 Facebook SDK,请将其添加为构建依赖项,然后导入。
1.前往 Android Studio | New Project(新项目)| Minimum SDK(最低 SDK)
2.选择&API 15: Android 4.0.3&或更高版本,然后创建新项目。
3.创建新项目后,打开&your_app | build.gradle(您的应用 | build.gradle)
4.将以下字串添加至模块级&/app/build.gradle&的&dependencies&之前:(注:这里可以不写)
repositories {
mavenCentral()}
5.将配置最新版本 Facebook SDK 的 compile 依赖项添加到&build.gradle&文件(注:这里我用的是4.14.1 日新版):
dependencies {
compile 'com.facebook.android:facebook-android-sdk:4.+'}
6.构建项目,然后即可将&com.facebook.FacebookSdk&导入应用。
使用 Facebook SDK 之前,需要先进行初始化。添加调用&FacebookSdk.sdkInitialize&或onCreate&内&Activity&中的&Application:
// Add this to the header of your file:import com.facebook.FacebookSdk;// Updated your class body:@Overridepublicvoid onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);FacebookSdk.sdkInitialize(getApplicationContext());// Initialize the SDK before executing any other operations,// especially, if you're using Facebook UI elements.}
添加 Facebook 应用编号(注:这个编号一般为15位左右)
然后向项目的 strings 文件添加您的 Facebook 应用编号,并更新 Android 清单:
1.打开&strings.xml&文件。示例路径:/app/src/main/res/values/strings.xml。
2.添加新的字符串(名称为&facebook_app_id,值为 Facebook 应用编号)
3.打开&AndroidManifest.xml
4.将&uses-permission&元素添加到清单:
android:name="android.permission.INTERNET"
5.将&meta-data&元素添加到&application&元素内:
android:label="@string/app_name" ...
android:name="com.facebook.sdk.ApplicationId"android:value="@string/facebook_app_id"
使用登录或分享功能
要使用 Facebook 登录或分享功能,还需要将&FacebookActivity&添加到清单:
android:name="com.facebook.FacebookActivity"android:configChanges="keyboard|keyboardHidden|screenLayout|screenSize|orientation"android:theme="@android:style/Theme.Translucent.NoTitleBar"android:label="@string/app_name"
发送图片或视频
如果要通过 Android 版 Facebook 应用分享链接、图片或视频,还需要在清单文件中声明FacebookContentProvider。
在&authorities&值的末尾添加您的应用编号。例如,如果 Facebook 应用编号是&1234(注:实际为15位左右的数字),则声明应如下图所示:
android:authorities="com.facebook.app.FacebookContentProvider1234"android:name="com.facebook.FacebookContentProvider"android:exported="true"
好了,基本的环境现在已经配置好了,可以开始着手做登录功能了。
首先需要在xml布局中添加一个facebook按钮
注:这个facebook按钮不一定要放在xml里,我一般都自定义一个带有点击事件的控件,然后再点击事件中 new一个facebook按钮,然后调用它的callonClick()方法,实现出来和点击原生按钮一样,但是自定义按钮可以实现更多的点击事件和设置背景图片等。
* 初始化facebook的SDK自带按钮
* 这里会把点击事件拦住,不会向下层的facebook button传递,然后先执行自定义的点击事件,再执行facebook button的原生点击事件
* 可以在自定义点击事件里写一些记录追踪或者动画的代码
* @param clickView 用来代替原生facebook按钮的自定义View,用来拦截点击事件,可以传null
* @param lbFacebook facebook原生登录按钮
* @param addtionalClickEvent
拦截facebook原生按钮点击事件,并附加一个点击事件,可以传null
public void initFBLoginButton(View clickView, final LoginButton lbFacebook, Fragment fragment,FacebookCallback&LoginResult& facebookCallback,final Runnable addtionalClickEvent){
initFBLoginButton(lbFacebook,fragment,facebookCallback);
if(clickView == null)
clickView.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
JLogUtils.i("AlexFB","点击了facebook上面的按钮");
signOut();//点击登录按钮先登出
if(addtionalClickEvent != null)addtionalClickEvent.run();//先执行自定义点击事件
lbFacebook.callOnClick();//再执行facebook登录按钮原生点击事件
* 初始化facebook登录按钮,需要自己写一个登录回调传进来
* @param lbFacebook
* @param fragment 可以传null
* @param facebookCallback
public void initFBLoginButton(LoginButton lbFacebook, Fragment fragment, FacebookCallback&LoginResult& facebookCallback){
lbFacebook.setReadPermissions("public_profile", "email", "user_birthday", "user_status");
// 如果你把登陆按钮放在一个fragment里面,就用这个方法,用来使用fragment启动facebook的activity并调用fragment的onActivityResult
if(fragment != null)lbFacebook.setFragment(fragment);
// Other app specific specialization
facebookCallbackManager = CallbackManager.Factory.create();
// z注册登录回调
lbFacebook.registerCallback(facebookCallbackManager,facebookCallback);
布局文件可以这么设置
&RelativeLayout
android:id="@+id/ll_facebook"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="41dp"
android:layout_marginRight="41dp"
android:layout_below="@id/llHeader"
android:layout_marginTop="20dp"
android:id="@+id/tv_facebook"
android:layout_width="match_parent"
android:textColor="@color/white"
android:background="@drawable/sign_up_facebook"
android:textSize="50dp"
android:layout_height="52dp" /&
&/RelativeLayout&
这里并没有像官网说的那样使用原生com.facebook.login.widget.LoginButton按钮,而是用了一个TextView代替,好处是TextView可以自由设定大小,背景图片,点击事件,而原生按钮不行。java中这样部署:
lbFacebook = new LoginButton(getContext());
facebookHelper.initFBLoginButton(tv_facebook, lbFacebook, this, new FacebookCallback&LoginResult&() {
public void onSuccess(LoginResult loginResult) {
JLogUtils.i("AlexFB","facebook登录成功");
if(loginResult == null)
JLogUtils.i("AlexFB","token是"+loginResult.getAccessToken());
JViewUtils.showProgressBar(loginRegisterActivity);
for(String s:loginResult.getRecentlyGrantedPermissions()){
JLogUtils.i("AlexFB","被授予的权限是::"+s);
getUserFacebookBasicInfo();//获取facebook登录用户的基本信息的方法
public void onCancel() {
// App code
JLogUtils.i("AlexFB","facebook登录被取消");
public void onError(FacebookException exception) {
// App code
JLogUtils.i("AlexFB","facebook登录出现异常",exception);
}, new Runnable() {
public void run() {
JLogUtils.i("Alex","点击了tv");
//写一些其他的点击事件,比如动画,事件追踪等
此时用户点击了我的TextView之后会获得和点击原生登录按钮一样的效果,如果用户手机上装了Facebook的客户端,那么就会开启客户端,然后马上返回此页面,用facebook APP上的登录用户进行登录;如果用户没有***Facebook APP,那么就开启一个WebView 的Activity让用户通过网页登陆,并在登录完成后返回此页面。
因为两种方式最后都会返回点击登录按钮的页面,会调用该页面的onActivityResult的方法,所以要在onActivityResult()中使用SDK提供的CallbackManager这个类接收facebook的登录回调,代码如下:
if(facebookHelper != null && facebookHelper.facebookCallbackManager!= null)facebookHelper.facebookCallbackManager.onActivityResult(requestCode, resultCode, data);
这里的facebookHelper是我自己写的一个管理类,是fragment的一个成员,facebookHelper把CallbackManager作为自己的成员进行调用
注意只有接收了onActivityResult()的回调才会登录调用登录回调的方法。
好了登录步骤结束了,我们可以获得一个和用户有关的token字段,但是有这个还不够啊,我们还需要一些基本的用户信息,比如用户的名字,性别,年龄,头像等等,才能完成一套登录注册流程。
下面就需要使用刚刚获得的token去联网异步的获取用户的基本信息了,这里我们拿着上一步的token,开启异步网络线程,从facebook那里拿到一个json字符串,然后用json解析得到我们想要的数据,通过接口回调将获得数据回调给UI界面,方法如下
获取用户的基本信息,比如姓名,年龄,userId,性别等等
* @param callback
public static void getUserFacebookBasicInfo(final FacebookUserInfoCallback callback) {
// 获取基本文本信息
JLogUtils.i("AlexFB", "准备获取facebook用户基本信息");
if(callback == null)
GraphRequest request = GraphRequest.newMeRequest(AccessToken.getCurrentAccessToken(), new GraphRequest.GraphJSONObjectCallback() {
public void onCompleted(JSONObject object, GraphResponse response) {
if (response == null) {
callback.onFailed("无法获取用户基本信息");
JLogUtils.i("AlexFB", "获取用户基本信息完毕,object是" + object);
JSONObject responseJsonObject = response.getJSONObject();
JLogUtils.i("AlexFB", "而response 的object是" + responseJsonObject);//这两个jsonObject是一样的
if (responseJsonObject == null) {
callback.onFailed("无法获取用户基本信息2" + response.getError().getErrorType() + "
" + response.getError().getErrorMessage());
FaceBookUserInfo userInfo = new FaceBookUserInfo();
userInfo.id = getFacebookGraphResponseString(responseJsonObject, "id");
userInfo.firstName = getFacebookGraphResponseString(responseJsonObject, "first_name");
userInfo.lastName = getFacebookGraphResponseString(responseJsonObject, "last_name");
userInfo.userName = getFacebookGraphResponseString(responseJsonObject, "name");
userInfo.birthday = getFacebookGraphResponseString(responseJsonObject, "birthday");
userInfo.updateTime = getFacebookGraphResponseString(responseJsonObject, "updated_time");
userInfo.email = getFacebookGraphResponseString(responseJsonObject, "email");
userInfo.gender = getFacebookGraphResponseString(responseJsonObject, "gender");
callback.onCompleted(userInfo);
Bundle parameters = new Bundle();
parameters.putString("fields", "id,name,link,email,first_name,last_name,gender,locale,timezone,updated_time,verified");
request.setParameters(parameters);
request.executeAsync();
* 获取用户的token之后,根据此token联网获取该用户详细信息的回调函数
public interface FacebookUserInfoCallback{
void onCompleted(FaceBookUserInfo userInfo);//成功回调
void onFailed(String reason);//失败回调
public interface FacebookUserImageCallback{
void onCompleted(String imageUrl);//成功回调
void onFailed(String reason);//失败回调
* 用于存储Facebook用户基本信息的类
public static class FaceBookUserInfo {
public String firstN
public String lastN
public String userN
public String updateT
public S//头像url
private static String getFacebookGraphResponseString(JSONObject graphResponse, String flag) {
String value = "";
value = graphResponse.getString(flag);
} catch (JSONException e) {
e.printStackTrace();
JLogUtils.i("AlexFB","获取用户信息 flag="+flag+"
结果是"+value);
在UI界面调用方法:
AlxFacebookHelper.getUserFacebookBasicInfo(new AlxFacebookHelper.FacebookUserInfoCallback() {
public void onCompleted(AlxFacebookHelper.FaceBookUserInfo userInfo) {
if (loginRegisterActivity.facebookUser == null) loginRegisterActivity.facebookUser = new ThirdPartyFacebookUserInfoEntity();&span style="white-space:pre"&
&/span&//下面是一些执行登录记录的代码
loginRegisterActivity.facebookUser.setId(userInfo.id);
loginRegisterActivity.facebookUser.setFirstName(userInfo.firstName);
loginRegisterActivity.facebookUser.setLastName(userInfo.lastName);
loginRegisterActivity.facebookUser.setUserName(userInfo.userName);
loginRegisterActivity.facebookUser.setBirthday(userInfo.birthday);
loginRegisterActivity.facebookUser.setUpdateTime(userInfo.updateTime);
loginRegisterActivity.facebookUser.setEmail(userInfo.email);
loginRegisterActivity.facebookUser.setGender(userInfo.gender);
//用户基本信息获取完毕,准备根据用户id获取用户头像
fbGetFacebookUserPictureInfoFromFB(loginRegisterActivity.facebookUser.getId());
public void onFailed(String reason) {
JLogUtils.i("AlexFB","获取facebook用户信息失败::"+reason);
AlxFacebookHelper.signOut();
获取用户头像的url在刚才步骤拿不到,必须再开一个异步请求向facebook请求用户头像的url,在这个过程中我们还可以指定我们想要的头像的分辨率,保证拿到的头像清晰,这一步需要用到上一步得到的userId,然后异步获得一个json串,解析出我们想要的头像url,并通过接口将获得结果回调给ui界面,代码如下
* 通过facebook的userId,联网异步获取用户的头像url
* @param facebookUserId
public static void getFacebookUserPictureAsync(String facebookUserId, final FacebookUserImageCallback callback) {
JLogUtils.i("AlexFB","准备获取用户头像");
if(callback == null || facebookUserId == null || facebookUserId.length()==0)
Bundle parameters = new Bundle();
parameters.putBoolean("redirect", false);
parameters.putString("height", "200");
parameters.putString("type", "normal");
parameters.putString("width", "200");
GraphRequest graphRequest= new GraphRequest(AccessToken.getCurrentAccessToken(), "/" + facebookUserId + "/picture", parameters, HttpMethod.GET, new GraphRequest.Callback() {
public void onCompleted(GraphResponse response) {
if (response == null) {
callback.onFailed("获取用户facebook头像失败");
if (response.getError() != null) {
FacebookRequestError facebookRequestError = response.getError();
callback.onFailed("获取用户facebook头像失败2::" + facebookRequestError.getErrorMessage());
JSONObject responseJsonObject = response.getJSONObject();
if (responseJsonObject == null) {
callback.onFailed("获取用户facebook头像失败3");
JLogUtils.i("AlexFB", "facebook直接返回的头像信息是" + responseJsonObject.toString());
String avatarUrl = "";
JSONObject dataJsonObject = responseJsonObject.getJSONObject("data");
avatarUrl = dataJsonObject.getString("url");
avatarUrl = URLEncoder.encode(avatarUrl, "UTF-8");
JLogUtils.i("AlexFB", "用户头像获取完毕 avatarUrl:" + avatarUrl);
} catch (Exception e) {
callback.onFailed("获取用户facebook头像失败4"+e.getStackTrace().toString());
callback.onCompleted(avatarUrl);
JLogUtils.i("AlexFB","version:"+graphRequest.getVersion()+"");
graphRequest.executeAsync();
UI界面调用代码:
AlxFacebookHelper.getFacebookUserPictureAsync(facebookUserId,new AlxFacebookHelper.FacebookUserImageCallback() {
public void onCompleted(String imageUrl) {
//成功获取到了头像之后
loginRegisterActivity.facebookUser.setAvatar(imageUrl);
//用户的头像和基本信息都获取完毕,现在可以向我们自己的服务器注册facebook用户了
public void onFailed(String reason) {
AlxFacebookHelper.signOut();//如果获取失败了,别忘了将整个登录结果回滚
JLogUtils.i("AlexFB",reason);
好了,基本的登录过程现在就完成了,下面说一下分享的代码:
因为有了SDK,在使用分享功能呢的时候会在自己的APP上面压一个cardView,相对于旧版SDK将一个Activity直接压在自己APP上来说,这样的用户体验更好一点
下面说一下具体的代码实现:
* 通过facebook sdk的默认弹出框进行分享
* @param activity
public static void showFacebookShareDialog(Activity activity,String link,String description,String caption,String imageUrl,ShareFacebookCallback callback) {
if (activity == null) {
if(callback!=null)callback.onFailure("activity 为空");
if (!ShareDialog.canShow(ShareLinkContent.class)) {
if(callback!=null)callback.onFailure("现在不能分享");
ShareDialog shareDialog = new ShareDialog(activity);
ShareLinkContent.Builder builder = new ShareLinkContent.Builder();
if(!TextUtils.isEmpty(caption)) builder.setContentTitle(caption);
if(!TextUtils.isEmpty(description)) builder.setContentDescription(description);
if(!TextUtils.isEmpty(link))builder.setContentUrl(Uri.parse(link));
if(!TextUtils.isEmpty(imageUrl)) builder.setImageUrl(Uri.parse(imageUrl));
ShareLinkContent linkContent= builder.build();
shareDialog.show(linkContent);
if(callback!=null)callback.onSuccess();
} catch (Exception ex) {
if(callback!=null)callback.onFailure(ex.getStackTrace().toString());
UI界面调用方法
public static void publishFacebookStoryByNativeApp(Activity activity, FacebookStoryEntity entity, final Handler handler) {
//将要飞翔的数据传过来,发送到工具类的方法里
String link = entity.getLink();
String applicationname = entity.getApplicationName();
String description = entity.getDescription();
String name = entity.getName();
String caption = entity.getCaption();
String picture = entity.getPicture();
AlxFacebookHelper.showFacebookShareDialog(activity, link, description, caption, picture, new AlxFacebookHelper.ShareFacebookCallback() {
public void onSuccess() {
JLogUtils.i("AlexFB","share fb弹窗框建立成功");
public void onFailure(String reason) {
JLogUtils.i("AlexFB",reason);
//执行一些分享失败的动作
这样一个分享就ok了。
最后把我自己写的工具类的全部代码都贴出来,里面设置了很多回调用的接口,不要和facebook SDK中的接口搞混了
import android.app.A
import android.net.U
import android.os.B
import android.support.v4.app.F
import android.text.TextU
import android.view.V
import com.facebook.AccessT
import com.facebook.CallbackM
import com.facebook.FacebookC
import com.facebook.FacebookRequestE
import com.facebook.GraphR
import com.facebook.GraphR
import com.facebook.HttpM
import com.facebook.login.LoginM
import com.facebook.login.LoginR
import com.facebook.login.widget.LoginB
import com.facebook.share.model.ShareLinkC
import com.facebook.share.widget.ShareD
import com.imaginato.qravedconsumer.utils.JLogU
import org.json.JSONE
import org.json.JSONO
import java.net.URLE
* Created by Administrator on .
public class AlxFacebookHelper {
public CallbackManager facebookCallbackM
* 初始化facebook的SDK自带按钮
* 这里会把点击事件拦住,不会向下层的facebook button传递,然后先执行自定义的点击事件,再执行facebook button的原生点击事件
* 可以在自定义点击事件里写一些记录追踪或者动画的代码
* @param clickView 压在facebook原生登录按钮上面的View,用来拦截点击事件,可以传null
* @param lbFacebook facebook原生登录按钮
* @param addtionalClickEvent
拦截facebook原生按钮点击事件,并附加一个点击事件,可以传null
public void initFBLoginButton(View clickView, final LoginButton lbFacebook, Fragment fragment,FacebookCallback&LoginResult& facebookCallback,final Runnable addtionalClickEvent){
initFBLoginButton(lbFacebook,fragment,facebookCallback);
if(clickView == null)
clickView.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
JLogUtils.i("AlexFB","点击了facebook上面的按钮");
signOut();//点击登录按钮先登出
if(addtionalClickEvent != null)addtionalClickEvent.run();//先执行自定义点击事件
lbFacebook.callOnClick();//再执行facebook登录按钮原生点击事件
* 初始化facebook登录按钮,需要自己写一个登录回调传进来
* @param lbFacebook
* @param fragment 可以传null
* @param facebookCallback
public void initFBLoginButton(LoginButton lbFacebook, Fragment fragment, FacebookCallback&LoginResult& facebookCallback){
lbFacebook.setReadPermissions("public_profile", "email", "user_birthday", "user_status");
// 如果你把登陆按钮放在一个fragment里面,就用这个方法,用来使用fragment启动facebook的activity并调用fragment的onActivityResult
if(fragment != null)lbFacebook.setFragment(fragment);
// Other app specific specialization
facebookCallbackManager = CallbackManager.Factory.create();
// z注册登录回调
lbFacebook.registerCallback(facebookCallbackManager,facebookCallback);
获取用户的基本信息,比如姓名,年龄,userId,性别等等
* @param callback
public static void getUserFacebookBasicInfo(final FacebookUserInfoCallback callback) {
// 获取基本文本信息
JLogUtils.i("AlexFB", "准备获取facebook用户基本信息");
if(callback == null)
GraphRequest request = GraphRequest.newMeRequest(AccessToken.getCurrentAccessToken(), new GraphRequest.GraphJSONObjectCallback() {
public void onCompleted(JSONObject object, GraphResponse response) {
if (response == null) {
callback.onFailed("无法获取用户基本信息");
JLogUtils.i("AlexFB", "获取用户基本信息完毕,object是" + object);
JSONObject responseJsonObject = response.getJSONObject();
JLogUtils.i("AlexFB", "而response 的object是" + responseJsonObject);//这两个jsonObject是一样的
if (responseJsonObject == null) {
callback.onFailed("无法获取用户基本信息2" + response.getError().getErrorType() + "
" + response.getError().getErrorMessage());
FaceBookUserInfo userInfo = new FaceBookUserInfo();
userInfo.id = getFacebookGraphResponseString(responseJsonObject, "id");
userInfo.firstName = getFacebookGraphResponseString(responseJsonObject, "first_name");
userInfo.lastName = getFacebookGraphResponseString(responseJsonObject, "last_name");
userInfo.userName = getFacebookGraphResponseString(responseJsonObject, "name");
userInfo.birthday = getFacebookGraphResponseString(responseJsonObject, "birthday");
userInfo.updateTime = getFacebookGraphResponseString(responseJsonObject, "updated_time");
userInfo.email = getFacebookGraphResponseString(responseJsonObject, "email");
userInfo.gender = getFacebookGraphResponseString(responseJsonObject, "gender");
callback.onCompleted(userInfo);
Bundle parameters = new Bundle();
parameters.putString("fields", "id,name,link,email,first_name,last_name,gender,locale,timezone,updated_time,verified");
request.setParameters(parameters);
request.executeAsync();
* 获取用户的token之后,根据此token联网获取该用户详细信息的回调函数
public interface FacebookUserInfoCallback{
void onCompleted(FaceBookUserInfo userInfo);//成功回调
void onFailed(String reason);//失败回调
public interface FacebookUserImageCallback{
void onCompleted(String imageUrl);//成功回调
void onFailed(String reason);//失败回调
* 用于存储Facebook用户基本信息的类
public static class FaceBookUserInfo {
public String firstN
public String lastN
public String userN
public String updateT
public S//头像url
private static String getFacebookGraphResponseString(JSONObject graphResponse, String flag) {
String value = "";
value = graphResponse.getString(flag);
} catch (JSONException e) {
e.printStackTrace();
JLogUtils.i("AlexFB","获取用户信息 flag="+flag+"
结果是"+value);
* 通过facebook的userId,联网异步获取用户的头像url
* @param facebookUserId
public static void getFacebookUserPictureAsync(String facebookUserId, final FacebookUserImageCallback callback) {
JLogUtils.i("AlexFB","准备获取用户头像");
if(callback == null || facebookUserId == null || facebookUserId.length()==0)
Bundle parameters = new Bundle();
parameters.putBoolean("redirect", false);
parameters.putString("height", "200");
parameters.putString("type", "normal");
parameters.putString("width", "200");
GraphRequest graphRequest= new GraphRequest(AccessToken.getCurrentAccessToken(), "/" + facebookUserId + "/picture", parameters, HttpMethod.GET, new GraphRequest.Callback() {
public void onCompleted(GraphResponse response) {
if (response == null) {
callback.onFailed("获取用户facebook头像失败");
if (response.getError() != null) {
FacebookRequestError facebookRequestError = response.getError();
callback.onFailed("获取用户facebook头像失败2::" + facebookRequestError.getErrorMessage());
JSONObject responseJsonObject = response.getJSONObject();
if (responseJsonObject == null) {
callback.onFailed("获取用户facebook头像失败3");
JLogUtils.i("AlexFB", "facebook直接返回的头像信息是" + responseJsonObject.toString());
String avatarUrl = "";
JSONObject dataJsonObject = responseJsonObject.getJSONObject("data");
avatarUrl = dataJsonObject.getString("url");
avatarUrl = URLEncoder.encode(avatarUrl, "UTF-8");
JLogUtils.i("AlexFB", "用户头像获取完毕 avatarUrl:" + avatarUrl);
} catch (Exception e) {
callback.onFailed("获取用户facebook头像失败4"+e.getStackTrace().toString());
callback.onCompleted(avatarUrl);
JLogUtils.i("AlexFB","version:"+graphRequest.getVersion()+"");
graphRequest.executeAsync();
* 解绑facebook
public static void signOut(){
JLogUtils.i("AlexFB","准备正式解绑本地的facebook登录信息");
if (AccessToken.getCurrentAccessToken() != null) LoginManager.getInstance().logOut();//登出facebook
}catch(Exception ex){
JLogUtils.i("AlexFB","登出出现异常");
* 使用facebook弹出框进行分享的代码
public interface ShareFacebookCallback{
void onSuccess();
void onFailure(String reason);
* 通过facebook sdk的默认弹出框进行分享
* @param activity
public static void showFacebookShareDialog(Activity activity,String link,String description,String caption,String imageUrl,ShareFacebookCallback callback) {
if (activity == null) {
if(callback!=null)callback.onFailure("activity 为空");
if (!ShareDialog.canShow(ShareLinkContent.class)) {
if(callback!=null)callback.onFailure("现在不能分享");
ShareDialog shareDialog = new ShareDialog(activity);
ShareLinkContent.Builder builder = new ShareLinkContent.Builder();
if(!TextUtils.isEmpty(caption)) builder.setContentTitle(caption);
if(!TextUtils.isEmpty(description)) builder.setContentDescription(description);
if(!TextUtils.isEmpty(link))builder.setContentUrl(Uri.parse(link));
if(!TextUtils.isEmpty(imageUrl)) builder.setImageUrl(Uri.parse(imageUrl));
ShareLinkContent linkContent= builder.build();
shareDialog.show(linkContent);
if(callback!=null)callback.onSuccess();
} catch (Exception ex) {
if(callback!=null)callback.onFailure(ex.getStackTrace().toString());
更多Android相关信息见 专题页面
本文永久更新链接地址:
相关资讯 & & &
   同意评论声明
   发表
尊重网上道德,遵守中华人民共和国的各项有关法律法规
承担一切因您的行为而直接或间接导致的民事或刑事法律责任
本站管理人员有权保留或删除其管辖留言中的任意内容
本站有权在网站内转载或引用您的评论
参与本评论即表明您已经阅读并接受上述条款

参考资料

 

随机推荐