Android - 通过脸书分享自定义链接

时间:2016-02-02 14:18:02

标签: android facebook android-intent share

当用户打开它时,我需要在我的应用程序中共享特定部分,如果他下载我的应用程序,它直接导航到此部分(它可能是嵌套片段)。

String AppURL = "https://play.google.com/store/apps/details?id=" + getApplicationContext().getPackageName();
String urlToShare = "http://stackoverflow.com/questions/7545254"; // I need custom url to specific part in my app 

// See if official Facebook app is found
boolean facebookAppFound = false;
List<ResolveInfo> matches = getPackageManager().queryIntentActivities(intent, 0);
for (ResolveInfo info : matches) {
    if (info.activityInfo.packageName.toLowerCase().startsWith("com.facebook.katana")) {
        intent.setPackage(info.activityInfo.packageName);
        facebookAppFound = true;
        break;
    }
}

// As fallback, launch sharer.php in a browser
if (!facebookAppFound) {
    String sharerUrl = "https://www.facebook.com/sharer/sharer.php?u=" + urlToShare;
    intent = new Intent(Intent.ACTION_VIEW, Uri.parse(sharerUrl));
}else{

Intent intent = new Intent(Intent.ACTION_SEND);
intent.setType("text/plain");
// intent.putExtra(Intent.EXTRA_SUBJECT, "Foo bar"); // NB: has no effect!
intent.putExtra(Intent.EXTRA_TEXT, urlToShare);
}

startActivity(intent);

这是我需要处理的问题

enter image description here

3 个答案:

答案 0 :(得分:7)

为了在Facebook上分享一些东西,最好使用最新的Facebook SDK。它将使您的任务更简单。因为当我们使用分享到Facebook时,Android Intent有自己的限制。请参阅下面有关此

的答案

Share text via Intent on Facebook without using Facebook sdk

您发布的屏幕截图似乎是从应用程序共享链接。

以下是将Facebook SDK集成到项目中的方法。

Facebook SDK integration

然后使用以下代码在Facebook上分享链接。

ShareDialog shareDialog;
FacebookSdk.sdkInitialize(Activity.this);
shareDialog = new ShareDialog(act);
ShareLinkContent linkContent = new ShareLinkContent.Builder()
                    .setContentTitle("title")
                    .setContentDescription(
                            "Description")
                    .setContentUrl(Uri.parse("your url")).build();
            shareDialog.show(linkContent);

可以找到更多来自Facebook的共享选项here,这非常简单明了。

快乐编码.. !!

答案 1 :(得分:0)

尝试以下代码:

File mFileImagePath = " /storage/emulated/0/Image Editor/Media/FilterImages/Image_Editor_1547816365839.jpg  ";  // Just example you use file URL

private void shareFacebook(File mFileImagePath) {
    String application = "com.facebook.katana";
    boolean installed = checkAppInstall(application);
    if (installed) {
        Intent mIntentShare = new Intent(Intent.ACTION_SEND);
        String mStrExtension = android.webkit.MimeTypeMap.getFileExtensionFromUrl(Uri.fromFile(mFileImagePath).toString());
        String mStrMimeType = android.webkit.MimeTypeMap.getSingleton().getMimeTypeFromExtension(mStrExtension);
        if (mStrExtension.equalsIgnoreCase("") || mStrMimeType == null) {
            // if there is no extension or there is no definite mimetype, still try to open the file
            mIntentShare.setType("text*//*");
        } else {
            mIntentShare.setType(mStrMimeType);
        }
        mIntentShare.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(mFileImagePath));
        mIntentShare.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);

        mIntentShare.setPackage(application);
        startActivity(mIntentShare);
    } else {

        Toast.makeText(mContext, "Facebook have not been installed.", Toast.LENGTH_SHORT).show();
    }

}

private boolean checkAppInstall(String uri) {
    PackageManager pm = getPackageManager();
    try {
        pm.getPackageInfo(uri, PackageManager.GET_ACTIVITIES);
        return true;
    } catch (PackageManager.NameNotFoundException e) {
        //Error
    }
    return false;
}

此代码对我有效,并且可在所有Android设备上使用。

答案 2 :(得分:0)

如@Ragu Swaninathan所述,您可以使用ShareLinkContent 来自Facebook SDK。

现在要实现重定向到应用程序的特定屏幕,您可以使用Firebase dynamic link 特征。您可以使用Firebase SDK生成动态链接,然后在应用程序中接收这些链接以处理导航流程。您需要与内容共享这些动态链接。