,开场白给大脸书
导入SDK
dependencies {
compile 'com.facebook.android:facebook-android-sdk:4.15.0'
app_id在string文件中定义好
<string name="facebook_app_id">[APP_ID]</string>
<string name="fb_login_protocol_scheme">fb[APP_ID]</string>
在清单文件的配置:
<application android:label="@string/app_name" ...>;
...
<meta-data android:name="com.facebook.sdk.ApplicationId"
android:value="@string/facebook_app_id"/>
...
<activity android:name="com.facebook.FacebookActivity"
android:configChanges=
"keyboard|keyboardHidden|screenLayout|screenSize|orientation"
android:label="@string/app_name" />
<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>
</application>
接下来就可以写了
登录按钮 fb 中的sdk里自带了一个按钮,如下:
<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" />
它的样式是下面这种
当然你也可以自己定义,但是还是要调用原按钮的回调,你可以像我这样写(当然可以选择无视,跳过):
//这是自定义的点击框,
bindFacebook = ((RelativeLayout) findViewById(R.id.bindFacebook));
callbackManager = CallbackManager.Factory.create();
//这是new了一个facebook原带的按钮(没有写在xml中)
fcLogin = new LoginButton(MyInfoActivity.this);
fcLogin.setReadPermissions(Arrays.asList("public_profile", "email"));
//自定义控件的点击事件
bindFacebook.setOnClickListener(new OnClickListener() {
@TargetApi(Build.VERSION_CODES.ICE_CREAM_SANDWICH_MR1)
@Override
public void onClick(View v) {
if (!isBind){
//调用faceb原按钮的点击事件(要求api 最低15(应该是4.0.3吧,差不多)),这样你就可以为所欲为的把按钮调成你喜欢的样子,
fcLogin.callOnClick();
}
}
});
为按钮注册回调:
CallbackManager callbackManager;
//
callbackManager = CallbackManager.Factory.create();
LoginButton fcLogin = (LoginButton) findViewById(R.id.login_button);
//申请读取用户facebook账户一些信息,
fcLogin.setReadPermissions(Arrays.asList("public_profile", "email"));
fcLogin.registerCallback(callbackManager, new FacebookCallback<LoginResult>() {
@Override
public void onSuccess(LoginResult loginResult) {
//成功登录
// UIHelper.shoToastMessage(MyInfoActivity.this, "SUCCESS");
final AccessToken token = loginResult.getAccessToken();
if(null != token){
GraphRequest request = GraphRequest.newMeRequest(
token,
new GraphRequest.GraphJSONObjectCallback() {
@Override
public void onCompleted(JSONObject object, GraphResponse response) {
//object包含了facebook用户的信息,比如id,用户名,
//可以绑定处理,也可以其他处理
//
}
});
}
}
@Override
public void onCancel() {
}
@Override
public void onError(FacebookException exception) {
exception.printStackTrace();
}
});
//必须调用下面的方法
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
callbackManager.onActivityResult(requestCode, resultCode, data);
}
关于翻墙的工具,推荐一个,是个浏览器的插件,国外的, 叫Tunnello ,每天有200M的流量免费试用,不限期限,像只干浏览网页这种还是不错的,
就不贴地址了,大家自行百度,不需要翻墙哦
关于facebook的分享 请看下一篇文章:
http://blog.csdn.net/sinat_35670989/article/details/77096259