Android 集成facebook 登录和分享

来源:互联网 发布:太阳队布克数据 编辑:程序博客网 时间:2024/06/05 05:17

,开场白给大脸书

导入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();            }        }); //必须调用下面的方法@Overrideprotected 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

原创粉丝点击