Android 集成Facebook分享功能

1,配置build.gradle

項目級別的gradle:

repositories {
    mavenCentral()
}

app級別的gradle:

dependencies {
implementation 'com.facebook.android:facebook-android-sdk:[5,6)'
}

2,配置string文件

打開strings.xml文件,添加一個名字爲facebook_app_id的新字段,值就是你後臺得到的Facebook App ID:

<string name="facebook_app_id">61246242287XXXX</string>

3,配置AndroidManifest.xml

<meta-data
        android:name="com.facebook.sdk.ApplicationId"
        android:value="@string/facebook_app_id" />
<provider android:authorities="com.facebook.app.FacebookContentProviderXXX"
        android:name="com.facebook.FacebookContentProvider"
        android:exported="true"/>

xxx爲Facebook的appid

4,facebook後臺配置

需要包名、mainActivity、密鑰散列

密鑰散列需要是通過keytool 和 openssl 共同生成。

keytool是JDK裏的一個工具,裝了JDK並配置好環境變量的就可以使用這個 keytool 命令,但是難點在於這個 openssl 命令,需要單獨安裝 openssl,並且安裝配置還挺麻煩。具體可以參考這篇文章,寫的還是不錯的,不僅有詳細的步驟,還有出現的錯誤處理。

https://www.cnblogs.com/ZhouL3777/archive/2012/10/21/2732890.html

我本地使用的openssl壓縮包也放在這:

鏈接:https://pan.baidu.com/s/10o714bCWPQRThZVeAWfnwg 
提取碼:uwhq

5,獲取密鑰散列:

我是windows系統,主要是在cmd中運行:

keytool -exportcert -alias YOUR_RELEASE_KEY_ALIAS -keystore YOUR_RELEASE_KEY_PATH | openssl sha1 -binary | openssl base64

YOUR_RELEASE_KEY_ALIAS -----替換您的發佈密鑰別名(應用級別的build.gradle裏的 KeyAlias~)

YOUR_RELEASE_KEY_PATH  -----替換爲您的 keystore 路徑(jks文件)

openssl -----openssl.exe 的路徑代(C:\......\openssl.exe)

 

 

6,分享的主要代碼

如果機器沒有安裝Facebook客戶端的話,會自動調用H5登錄Facebook的頁面

private var callbackManager: CallbackManager? = null
private fun sharedToFace() {
        callbackManager = CallbackManager.Factory.create()
        val shareDialog = ShareDialog(this)
        shareDialog.registerCallback(callbackManager, object : FacebookCallback<Sharer.Result> {
            override fun onSuccess(result: Sharer.Result?) {
                OToastProUtils.toastShort(“分享成功”)

            }

            override fun onCancel() {
                OToastProUtils.toastShort(“取消分享”)
            }

            override fun onError(error: FacebookException?) {
                OToastProUtils.toastShort(“分享失敗”)
            }

        })

        if (ShareDialog.canShow(ShareLinkContent::class.java)) {
               //連接分享,指向Google play
            val linkContent = ShareLinkContent.Builder()
//                .setContentTitle("下載One Hope,免費領取借款額度")
//                .setContentDescription("這款App可以免費申請貸款了,不僅額度大,還能分期還款,快來下載吧")
                .setContentUrl(
                    Uri.parse("https://play.google.com/store/apps/details?id=" + context?.getPackageName())
                )
                .build()

            shareDialog.show(linkContent)



            //分享圖片
//            val bitmap = BitmapFactory.decodeResource(resources, R.mipmap.hongbproao_nodataop, null)
//            var mSharePhoto = SharePhoto.Builder()
//                .setCaption("Test share")
//                .setBitmap(bitmap)
//                .build()
//
//            var mContent = SharePhotoContent.Builder().addPhoto(mSharePhoto).build()
//            shareDialog.show(mContent)
//            if (bitmap != null && !bitmap.isRecycled()) {
//                bitmap.recycle()
//            }

            //分享視頻
//            var videoFileUri = ...
//           var ShareVideo =  ShareVideo.Builder()
//                .setLocalUrl(videoUrl)
//                .build()
//            var content = ShareVideoContent.Builder()
//                .setVideo(ShareVideo)
//                .build()
//
//
//            //分享多媒體
//            var sharePhoto1 = SharePhoto.Builder()
//                .setBitmap(...)
//                .build()
//            var sharePhoto2 = SharePhoto.Builder()
//                .setBitmap(...)
//                .build()
//            var shareVideo1 = ShareVideo.Builder()
//                .setLocalUrl(...)
//                .build()
//            var shareVideo2 = ShareVideo.Builder()
//                .setLocalUrl(...)
//                .build()
//
//             var shareContent =  ShareMediaContent.Builder()
//                .addMedium(sharePhoto1)
//                .addMedium(sharePhoto2)
//                .addMedium(shareVideo1)
//                .addMedium(shareVideo2)
//                .build()




        } else {
            OToastProUtils.toastShort(“未安裝Facebook”)
        }
    }

 

 

 

/**
 * 分享成功執行回調
 */
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
    super.onActivityResult(requestCode, resultCode, data)
    //這裏執行了下面的方法,會調用shareDialog.registerCallback~~~
    callbackManager?.onActivityResult(requestCode, resultCode, data)
}

這裏我的疑問是:我既想分享鏈接又希望有標題和文字描述,但是會鏈接起作用,title和description,調用的Facebook的時候都不會顯示,有兩全其美的方法嘛?~~

 

效果:

(這個彈框是自己寫的,只是點擊Facebook的時候調用上面的分享方法)

 

(點擊分享鏈接Facebook頁面)

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章