与 Facebook Messenger 分享

Share with Facebook Messenger

我已经将Facebook SDK 的依赖更新到4.1.0。他们改变了很多,现在我找不到与 Messenger 共享文本和图像的方法。

在更新我使用的 sdk 之前:

FacebookDialog.MessageDialogBuilder builder = new FacebookDialog.MessageDialogBuilder(this)
            .setName(linkName)
            .setDescription(description)
            .setLink(webLink)
            .setPicture(pictureLink);

    FacebookDialog dialog = builder.build();
    dialog.present();

现在好像只能分享图片了

String mimeType = "image/jpeg";
ShareToMessengerParams shareToMessengerParams =
        ShareToMessengerParams.newBuilder(contentUri, mimeType)
                .build();
MessengerUtils.shareToMessenger(
       this,
       REQUEST_CODE_SHARE_TO_MESSENGER,
       shareToMessengerParams);

谁能解释一下与 4.1.0 之前共享文本和图像的等效方法?

我发现在 Facebook 上有一种类似的分享方式,它也适用于 Messenger。

这是代码

ShareLinkContent.Builder shareLinkContentBuilder = new ShareLinkContent.Builder()
            .setContentTitle(contentTitle)
            .setContentDescription(contentDescription)
            .setContentUrl(Uri.parse(url));
    shareLinkContentBuilder.setImageUrl(Uri.parse(imageUrl));
    MessageDialog messageDialog = new MessageDialog(activity);
    messageDialog.registerCallback(callbackManager, callback);
    messageDialog.show(shareLinkContentBuilder.build());

相关文档在 Sharing 部分而不是 Messenger 部分 https://developers.facebook.com/docs/sharing/android

在我看到我的案例中的所有内容都已弃用后,我只需要共享 2 张图像,因此 intent 方法无需 Facebook SDK 即可工作。

"String pack" 为信使包名称,可以是两者之一:

信使:com.facebook.orca

精简版信使:com.facebook.mlite

public void shareToOtherAppByPackage(Context context, String pack, Bitmap bitmap1,Bitmap bitmap2) {
    try {

        ByteArrayOutputStream bytes1 = new ByteArrayOutputStream();
        bitmap1.compress(Bitmap.CompressFormat.JPEG, 100, bytes1);
        String path1 = MediaStore.Images.Media.insertImage(context.getContentResolver(), bitmap1, "front", null);
        Uri imageUri1 = Uri.parse(path1);

        ByteArrayOutputStream bytes2 = new ByteArrayOutputStream();
        bitmap2.compress(Bitmap.CompressFormat.JPEG, 100, bytes2);
        String path2 = MediaStore.Images.Media.insertImage(context.getContentResolver(), bitmap2, "back", null);
        Uri imageUri2 = Uri.parse(path2);

        //PackageManager pm = context.getPackageManager();
        //PackageInfo info = pm.getPackageInfo(pack, PackageManager.GET_META_DATA);


        ArrayList<Uri> imageUris = new ArrayList<Uri>();
        imageUris.add(imageUri1); // Add your image URIs here
        imageUris.add(imageUri2);


        Intent shareIntent  = new Intent(Intent.ACTION_SEND);
        shareIntent.setAction(Intent.ACTION_SEND_MULTIPLE);
        shareIntent.setType("image/*");
        shareIntent.setPackage(pack);
        shareIntent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, imageUris);

        //waIntent.putExtra(Intent.EXTRA_TEXT, pack); // adds text to share
        context.startActivity(Intent.createChooser(shareIntent , context.getString(R.string.share_with)));
    }
    catch (Exception e) {
        Toast.makeText(context, context.getString(R.string.app_share_not_installed), Toast.LENGTH_SHORT).show();
    }
}