Android實現Facebook第三方分享

Songlcy發表於2016-08-03

最近專案需要整合Facebook的分享功能,在網上看了一些實現例子,用的方法感覺比較老了。Facebook最新的Api已經換了很多。下面我就將最新的整合方式分享給大家。

facebook官方提供的整合方式已經很清晰了,我們只是對其進行了封裝。想具體瞭解的可以去看下 facebook整合官網      官網需要翻牆才能browse。

下面來看下我們的封裝類:

/**
 * facebook分享工具類
 * Created by Song on 2016/7/5.
 * Email:songxueliang@huiqu.co
 */
public class FaceBookShareUtils {

    private Activity mActivity ;
    private ShareDialog shareDialog;
    private CallbackManager callBackManager;
    public static final int SHARE_REQUEST_CODE = 0x111;
    private ShareLinkContent.Builder shareLinkContentBuilder;

    public FaceBookShareUtils(Activity activity, CallbackManager callBackManager, FacebookCallback facebookCallback) {
        this.mActivity = activity ;
        this.callBackManager = callBackManager;
        shareDialog = new ShareDialog(mActivity);
        //註冊分享狀態監聽回撥介面
        shareDialog.registerCallback(callBackManager, facebookCallback, FaceBookShareUtils.SHARE_REQUEST_CODE);
        shareLinkContentBuilder = new ShareLinkContent.Builder();
    }

    /**
     * 分享
     */
    public void share(String contentTitle,String imageUrl,String desc) {

        shareLinkContentBuilder.setContentTitle(contentTitle)
                .setImageUrl(Uri.parse(imageUrl))
                .setContentDescription(desc)
                .setContentUrl(Uri.parse(mActivity.getString(R.string.app_site)));
        ShareLinkContent shareLinkContent = shareLinkContentBuilder.build();
        if(shareDialog.canShow(ShareLinkContent.class)) {
            shareDialog.show(mActivity,shareLinkContent);
        }
    }
}
程式碼的封裝流程很簡單:

(1)在構造方法中初始化facebook分享的類,以及註冊分享狀態的監聽介面。

(2)定義share方法,設定要分享的內容。

上面的定義好之後,我們在Activity或Fragment中呼叫如何程式碼:


/**
 * 分享到facebook
 */
@Override
public void shareFaceBook() {

    callBackManager  = CallbackManager.Factory.create();
    new FaceBookShareUtils(this,callBackManager,facebookCallback)
            .share(mCourse.sName, mCourse.sPics.get(0), mCourse.tDesc);
}

可以看到我們的FaceBookShareUtils工具類的第三個引數為狀態的回撥介面,定義如下:

/**
 * facebook分享狀態回撥
 */
private FacebookCallback facebookCallback = new FacebookCallback() {

    @Override
    public void onSuccess(Object o) {
        Message msg = Message.obtain();
        msg.what = SHARE_COMPLETE;
        mHandler.sendMessage(msg);
    }

    @Override
    public void onCancel() {
        Message msg = Message.obtain();
        msg.what = SHARE_CANCEL;
        mHandler.sendMessage(msg);
    }

    @Override
    public void onError(FacebookException error) {
        Message msg = Message.obtain();
        msg.what = SHARE_ERROR;
        mHandler.sendMessage(msg);
    }
};
上面的三個方法分別是分享成功,分享失敗,分享錯誤的回撥。相信做過國內第三方平臺分享的童靴都很清楚了。

然後在onActivityResult方法中呼叫如下方法:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {


    if(FaceBookShareUtils.SHARE_REQUEST_CODE == requestCode) {
        callBackManager.onActivityResult(requestCode,resultCode,data);
    }
}

上面即用於接收分享的狀態。

最後一步,需要我們在AndroidManifest.xml中配置如下程式碼:

<!--Facebook-->
<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:theme="@android:style/Theme.Translucent.NoTitleBar"
    android:label="@string/app_name" />
<provider android:authorities="com.facebook.app.FacebookContentProvider259759727729348"
    android:name="com.facebook.FacebookContentProvider"
    android:exported="true" />
上面的ApplicationId就是在Facebook開發者平臺上申請的Id。如果App釋出的話,還需要進行稽核等。

OK,到這裡,facebook的分享整合就搞定啦,下篇文章我將會和大家分享下如何整合Facebook登入功能~

相關文章