方式一:集成方法ShareSDK(搬運于 官方文檔):
準備工作:
1诲祸、獲取正確配置并鏈接到 Android 應用的 Facebook 應用編號岛都。請參閱 Android 新手入門闽撤,添加 Facebook 應用編號
2老玛、生成 Android 密鑰散列并將其添加到開發(fā)者資料頁
代碼中獲取當前apk打包簽名密鑰散列嚷炉,將調試簽名和發(fā)布簽名的密鑰散列都配置到FaceBook開發(fā)者平臺的應用當中捅厂。也可以使用官方文檔的提供獲取方式避乏。
PackageInfo info = null;
try {
info = getPackageManager().getPackageInfo("你APP包名",
PackageManager.GET_SIGNATURES);
for (Signature signature : info.signatures) {
MessageDigest md = MessageDigest.getInstance("SHA");
md.update(signature.toByteArray());
Log.d("KeyHash: ", Base64.encodeToString(md.digest(), Base64.DEFAULT));
}
} catch (Exception e) {
e.printStackTrace();
}
代碼工作:
項目build.gradle添加mavenCentral倉庫
repositories {
// ...
mavenCentral()
}
app build.gradle添加依賴
dependencies {
// ...
implementation 'com.facebook.android:facebook-share:5.15.3'
}
AndroidManifest.xml中添加相關權限爷耀、meta-data、FacebookActivity拍皮、FacebookContentProvider:
Note:應用ID為開發(fā)者平臺創(chuàng)建的應用編號
<!-- 網絡 -->
<uses-permission android:name="android.permission.INTERNET"/>
<!-- 讀外存(根據(jù)實際具體情況申請) -->
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<meta-data android:name="com.facebook.sdk.ApplicationId" android:value="應用ID"/>
<activity android:name="com.facebook.FacebookActivity" />
<provider android:authorities="com.facebook.app.FacebookContentProvider應用ID"
android:name="com.facebook.FacebookContentProvider"
android:exported="true"/>
分享引文鏈接:ShareLinkContent
ShareLinkContent content = new ShareLinkContent.Builder()
.setContentUrl(Uri.parse("https://www.baidu.com"))
.build();
// 對話框
ShareDialog shareDialog = new ShareDialog(this);
// 分享回調
shareDialog.registerCallback(callbackManager, new FacebookCallback<Sharer.Result>() {
@Override
public void onSuccess(Sharer.Result result) {
Log.e(TAG, "onSuccess");
}
@Override
public void onCancel() {
Log.e(TAG, "onCancel");
}
@Override
public void onError(FacebookException error) {
Log.e(TAG, "onError" + error.toString());
}
});
shareDialog.show(content);
分享圖片:SharePhotoContent
String filePath = Environment.getExternalStorageDirectory() + "/image.jpg";
Bitmap image = BitmapFactory.decodeFile(filePath);
SharePhoto photo = new SharePhoto.Builder()
.setBitmap(image)
.build();
SharePhotoContent content = new SharePhotoContent.Builder()
.addPhoto(photo)
.build();
分享視頻:ShareVideoContent
Uri videoFileUri = ...
ShareVideo = new ShareVideo.Builder()
.setLocalUrl(videoUrl)
.build();
ShareVideoContent content = new ShareVideoContent.Builder()
.setVideo(video)
.build();
多媒體:ShareMediaContent
(1)用戶需要安裝 71 或更高版本的原生 Android 版 Facebook 應用歹叮。
(2)用戶每次可以分享最多包含 6 個照片和視頻元素的內容。
SharePhoto sharePhoto1 = new SharePhoto.Builder()
.setBitmap(...)
.build();
SharePhoto sharePhoto2 = new SharePhoto.Builder()
.setBitmap(...)
.build();
ShareVideo shareVideo1 = new ShareVideo.Builder()
.setLocalUrl(...)
.build();
ShareVideo shareVideo2 = new ShareVideo.Builder()
.setLocalUrl(...)
.build();
ShareContent shareContent = new ShareMediaContent.Builder()
.addMedium(sharePhoto1)
.addMedium(sharePhoto2)
.addMedium(shareVideo1)
.addMedium(shareVideo2)
.build();
ShareDialog shareDialog = new ShareDialog(...);
shareDialog.show(shareContent, Mode.AUTOMATIC);
在舊版本的 Android 版 SDK 中铆帽,您的應用必須先檢查設備是否安裝了原生 Facebook 應用咆耿,然后才可打開分享對話框。若未安裝 Facebook 應用爹橱,則您必須自行提供代碼萨螺,才能調用回退對話框。
現(xiàn)在,SDK 將自動檢查設備上是否安裝了原生 Facebook 應用屑迂。如果未安裝浸策,SDK 會將用戶切換到默認瀏覽器并打開動態(tài)發(fā)布對話框。
總結:
使用官方ShareDialog分享惹盼,部分手機無法調起分享功能庸汗,直接回調了onError方法,而且分享跳轉貌似依賴*墻網絡手报。推薦使用方式二蚯舱。
方式二:隱式意圖(同樣也適用其他APP,如Instagram掩蛤,Twitter等)
Intent.ACTION_SEND
Intent.ACTION_SEND_MULTIPLE(Facebook支持枉昏,其他應用不一定支持)
// 上下文實例
Context context = ...;
// Uri數(shù)組列表
ArrayList<Uri> uriArrayList = ...;
// 意圖
Intent intent;
// 單張圖片
if (uriArrayList.size() == 1) {
intent = new Intent(Intent.ACTION_SEND);
intent.putExtra(Intent.EXTRA_STREAM, uriArrayList.get(0));
} else {
// 多張圖片
intent = new Intent(Intent.ACTION_SEND_MULTIPLE);
intent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, uriArrayList);
}
// 圖片
intent.setType("image/*");
// 視頻
// intent.setType("video/*");
// 多媒體
// intent.setType("video/;image/");
// Facebook包名
intent.setPackage("com.facebook.katana");
context.startActivity(Intent.createChooser(intent, title));
調用前,務必需要檢查分享目標應用是否安裝揍鸟。