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页面)