ความตั้งใจในการแบ่งปัน Android และ Facebook


85

ฉันกำลังพัฒนาแอป Android และสนใจที่จะทราบวิธีอัปเดตสถานะของผู้ใช้แอปจากภายในแอปโดยใช้การแชร์เจตนาของ Android

เมื่อดูผ่าน SDK ของ Facebook ดูเหมือนว่ามันง่ายพอที่จะทำได้ แต่ฉันอยากให้ผู้ใช้ทำผ่านหน้าต่างป๊อปอัป Share Intent ปกติหรือไม่? เห็นที่นี่:

ป๊อปอัพ

ฉันได้ลองใช้รหัสความตั้งใจในการแบ่งปันตามปกติแล้ว แต่ดูเหมือนว่าจะใช้ไม่ได้กับ Facebook อีกต่อไป

public void invokeShare(Activity activity, String quote, String credit) {
    Intent shareIntent = new Intent(android.content.Intent.ACTION_SEND);
    shareIntent.setType("text/plain");
    shareIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, activity.getString(R.string.share_subject));
    shareIntent.putExtra(android.content.Intent.EXTRA_TEXT, "Example text");    

    activity.startActivity(Intent.createChooser(shareIntent, activity.getString(R.string.share_title)));
}

UPDATE: หลังจากทำการขุดเพิ่มเติมดูเหมือนว่าจะเป็นบั๊กของแอพ Facebook ที่ยังไม่ได้รับการแก้ไข ( ข้อผิดพลาดของ facebook ) ในขณะนั้นดูเหมือนว่าฉันจะต้องทนกับแง่ลบ "การแชร์ไม่ทำงาน !!!" บทวิจารณ์ ไชโย Facebook: * (


พังมาประมาณหนึ่งปีแล้วด้วยการแก้ไขหลายครั้งฉันไม่เข้าใจว่าทำไมพวกเขาถึงไม่แก้ไข !!
Nathan Schwermann

4
ยังหัก. ฉันเริ่มคิดว่าพวกเขาไม่ได้แก้ไขโดยมีจุดประสงค์เพื่อให้คุณใช้ sdk facebook โง่ ๆ ของพวกเขา
UncleIstvan

5
ฮึดูเหมือนว่าตอนนี้ Facebook ได้ตอบกลับอย่างเป็นทางการแล้วว่าพวกเขาไม่คิดว่าพฤติกรรมนั้นจะเสียและจะไม่เปลี่ยนแปลงเลย: developers.facebook.com/bugs/332619626816423
Scott W

1
ไม่มีการแก้ไขหรือวิธีแก้ปัญหาอย่างน้อย? เราต้องอยู่กับข้อความที่ว่างเปล่า? : /
Ixx

1
น่าเสียดายที่การแก้ไขหรือวิธีแก้ปัญหาเพียงอย่างเดียวคือการรวม SDK เข้ากับแอปของคุณ
Joseph Woodward

คำตอบ:


97

แอปพลิเคชัน Facebook ไม่รองรับทั้งฟิลด์EXTRA_SUBJECTหรือEXTRA_TEXTฟิลด์

นี่คือลิงค์ข้อผิดพลาด: https://developers.facebook.com/bugs/332619626816423

ขอบคุณ @billynomates:

สิ่งนี้คือถ้าคุณใส่ URL ลงในEXTRA_TEXTฟิลด์ก็จะได้ ผล เหมือนกับว่าพวกเขาจงใจขีดฆ่าข้อความใด ๆ


30
สิ่งนี้ก็คือถ้าคุณใส่ URL ในช่อง EXTRA_TEXT ก็จะได้ผล มันเหมือนกับว่าพวกเขาจงใจขีดฆ่าข้อความใด ๆ
MSpeed

1
เป็นเรื่องโง่มากที่ยังใช้งานได้บน iOS (ในขณะที่เขียน) แต่ใช้ไม่ได้กับ Android
Peter K.

สามารถแชร์ได้เฉพาะลิงก์บน Facebook โดยมีเจตนาในการแบ่งปันเท่านั้น
Misha Akopov

2
ผู้ใช้ต้องพิมพ์เนื้อหาด้วยมือ: "โปรดทราบว่าการกรอกพารามิเตอร์ข้อความล่วงหน้าด้วยเนื้อหาที่แนะนำซึ่งผู้ใช้สามารถแก้ไขได้ถือเป็นการละเมิดนโยบายด้วย" youtube.com/watch?v=tGz48L0m5nc
kouretinho

1
@ ปีเตอร์เค. คุณพบวิธีส่งข้อความบน Facebook หรือไม่?
Karan Khurana

115

เห็นได้ชัดว่า Facebook ไม่มีอีกต่อไป (ณ ปี 2014) ให้คุณปรับแต่งหน้าจอแชร์ได้ไม่ว่าคุณจะเปิดURL sharer.phpหรือใช้ Android Intent ในรูปแบบเฉพาะเพิ่มเติม ดูตัวอย่างคำตอบเหล่านี้:

อย่างไรก็ตามการใช้ Intent ของธรรมดาที่คุณสามารถยังคงใช้ URL แต่ไม่ข้อความเริ่มต้นใด ๆ กับมันเป็นbillynomates แสดงความคิดเห็น (นอกจากนี้หากคุณไม่มี URL ที่จะแชร์เพียงแค่เปิดแอพ Facebook โดยมีกล่องโต้ตอบ "เขียนโพสต์" (เช่นการอัปเดตสถานะ) ว่างเปล่าก็ทำได้ง่ายไม่แพ้กันใช้รหัสด้านล่าง แต่ไม่ต้องEXTRA_TEXTใช้)

นี่เป็นทางออกที่ดีที่สุดที่ฉันพบว่าไม่เกี่ยวข้องกับการใช้ Facebook SDK ใด ๆ

รหัสนี้จะเปิดแอป Facebook อย่างเป็นทางการโดยตรงหากติดตั้งไว้มิฉะนั้นจะกลับไปเปิด sharer.php ในเบราว์เซอร์ (คำตอบอื่น ๆ ส่วนใหญ่ในคำถามนี้จะแสดงข้อความโต้ตอบ "การดำเนินการที่สมบูรณ์โดยใช้ ... "ซึ่งไม่เหมาะสมเลย!)

String urlToShare = "/programming/7545254";
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);

// 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));
}

startActivity(intent);

(เกี่ยวกับcom.facebook.katanaชื่อแพ็กเกจโปรดดูความคิดเห็นของ MatheusJardimB )

ผลลัพธ์จะเป็นเช่นนี้ใน Nexus 7 (Android 4.4) ของฉันที่ติดตั้งแอพ Facebook:

ใส่คำอธิบายภาพที่นี่


3
"com.facebook.katana" เป็นชื่อแพ็กเกจสำหรับแอป Facebook และ "com.facebook.orca" สำหรับแอป FB Messenger คุณสามารถเปลี่ยนเป็น pckg ที่เหมาะสมที่คุณต้องการ หากคุณไม่ระบุอย่างใดอย่างหนึ่งการค้นพบครั้งแรกจะถูกใช้ (ไม่ดี)
MatheusJardimB

1
จับดีขอบคุณ! ฉันอัปเดตคำตอบแล้ว ปรากฎว่า Facebook ได้เปิดตัวแอพอื่น ๆ ด้วยเช่นกัน ( Home and Pages Manager ) ซึ่งจะตรงกับcom.facebookคำนำหน้าด้วย
Jonik

helow ... ถ้าฉันต้องการเติมข้อความแก้ไขโพสต์แล้วจะทำงานกับ facebook ได้อย่างไร
Das

วิธีตั้งค่าข้อความด้วย url?
Anand Savjani

คุณทำไม่ได้ (ตามที่กล่าวไว้เป็นตัวหนาใกล้จุดเริ่มต้น) โปรดอ่านคำตอบ
Jonik

16

ตามปกติ

วิธีปกติในการสร้างสิ่งที่คุณต้องการคือทำสิ่งต่อไปนี้:

    Intent intent = new Intent(Intent.ACTION_SEND);
    intent.setType("text/plain");
    intent.putExtra(Intent.EXTRA_TEXT, "The status update text");
    startActivity(Intent.createChooser(intent, "Dialog title text"));

วิธีนี้ใช้งานได้โดยไม่มีปัญหาสำหรับฉัน

ทางเลือก (อาจจะ)

ปัญหาที่อาจเกิดขึ้นจากการทำเช่นนี้คือคุณอนุญาตให้ส่งข้อความทางอีเมล SMS ฯลฯ รหัสต่อไปนี้เป็นสิ่งที่ฉันใช้ในแอปพลิเคชันซึ่งช่วยให้ผู้ใช้สามารถส่งอีเมลถึงฉัน -mail โดยใช้ Gmail ฉันเดาว่าคุณสามารถลองเปลี่ยนเพื่อให้ใช้งานได้กับ Facebook เท่านั้น

ฉันไม่แน่ใจว่ามันตอบสนองต่อข้อผิดพลาดหรือข้อยกเว้นอย่างไร (ฉันเดาว่าจะเกิดขึ้นหากไม่ได้ติดตั้ง Facebook) ดังนั้นคุณอาจต้องทดสอบสักหน่อย

    try {
        Intent emailIntent = new Intent(android.content.Intent.ACTION_SEND);
        String[] recipients = new String[]{"e-mail address"};
        emailIntent.putExtra(android.content.Intent.EXTRA_EMAIL, recipients);
        emailIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, "E-mail subject");
        emailIntent.putExtra(android.content.Intent.EXTRA_TEXT, "E-mail text");
        emailIntent.setType("plain/text"); // This is incorrect MIME, but Gmail is one of the only apps that responds to it - this might need to be replaced with text/plain for Facebook
        final PackageManager pm = getPackageManager();
        final List<ResolveInfo> matches = pm.queryIntentActivities(emailIntent, 0);
        ResolveInfo best = null;
        for (final ResolveInfo info : matches)
            if (info.activityInfo.packageName.endsWith(".gm") ||
                    info.activityInfo.name.toLowerCase().contains("gmail")) best = info;
                if (best != null)
                    emailIntent.setClassName(best.activityInfo.packageName, best.activityInfo.name);
                startActivity(emailIntent);
    } catch (Exception e) {
        Toast.makeText(this, "Application not found", Toast.LENGTH_SHORT).show();
    }

3
ขอบคุณสำหรับการตอบกลับของคุณ. นี่คือสิ่งที่ทำให้ฉันสับสน แต่ตัวอย่างโค้ดแรกที่คุณโพสต์ใช้งานได้ดีสำหรับการโพสต์ไปยังแอพอื่น ๆ ทั้งหมดที่มีการแชร์ที่มีอยู่ แต่ด้วยเจตนาของ Facebook จะทำให้ผู้ใช้ไปยังหน้า Facebook "เขียนอะไร" ที่ว่างเปล่าราวกับว่ามันไม่ได้ส่ง ( หรืออาจได้รับ) ข้อความภายในช่อง EXTRA_TEXT
Joseph Woodward

อืมใช้ได้ดีกับอันแรกในแท็บเล็ต ลองโดยไม่มีฟิลด์ EXTRA_SUBJECT ตามที่ระบุไว้ ดูเหมือนว่าจะสร้างความแตกต่าง
Michell Bak

1
อันที่จริงฉันเพิ่งตรวจสอบและใช่ - มันเสีย เคยทำงาน.
Michell Bak

ใช่ตามที่กล่าวไว้ในโพสต์แรกที่แก้ไขของฉันดูเหมือนว่าจะเป็นข้อบกพร่องในแอพ Facebook ซึ่งมีมาตั้งแต่เดือนเมษายน 2554 ไม่ว่าอย่างไรก็ตามขอขอบคุณที่สละเวลาตอบคำถามของฉัน
Joseph Woodward

4
@TomSusel ใช่ Facebook ควรจะได้รับความเสียหายร่วมกัน ใช้งานได้เมื่อรวม URL ด้วย ขอบคุณสำหรับการโหวตลดคะแนน ;-)
Michell Bak

5

ฉันพบว่าคุณสามารถแชร์ได้เพียงข้อความ หรือ รูปภาพเท่านั้นไม่สามารถใช้ทั้งสองIntentsอย่างได้ โค้ดด้านล่างจะแชร์เฉพาะรูปภาพหากมีอยู่หรือเฉพาะข้อความหากรูปภาพไม่ออก หากต้องการแชร์ทั้งสองอย่างคุณต้องใช้Facebook SDK จากที่นี่

หากคุณใช้วิธีการแก้ปัญหาอื่น ๆ แทนของด้านล่างรหัสไม่ลืมที่จะระบุชื่อแพคเกจcom.facebook.liteเช่นกันซึ่งเป็นชื่อแพคเกจของFacebook Lite ฉันยังไม่ได้ทดสอบ แต่com.facebook.orcaเป็นชื่อแพ็คเกจของFacebook Messengerหากคุณต้องการกำหนดเป้าหมายด้วย

คุณสามารถเพิ่มวิธีการแชร์กับWhatsApp , Twitter ...

public class IntentShareHelper {

    /**
     * <b>Beware,</b> this shares only image if exists, or only text if image does not exits. Can't share both
     */
    public static void shareOnFacebook(AppCompatActivity appCompatActivity, String textBody, Uri fileUri) {
        Intent intent = new Intent(Intent.ACTION_SEND);
        intent.setType("text/plain");
        intent.putExtra(Intent.EXTRA_TEXT,!TextUtils.isEmpty(textBody) ? textBody : "");

        if (fileUri != null) {
            intent.putExtra(Intent.EXTRA_STREAM, fileUri);
            intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
            intent.setType("image/*");
        }

        boolean facebookAppFound = false;
        List<ResolveInfo> matches = appCompatActivity.getPackageManager().queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY);
        for (ResolveInfo info : matches) {
            if (info.activityInfo.packageName.toLowerCase().startsWith("com.facebook.katana") ||
                info.activityInfo.packageName.toLowerCase().startsWith("com.facebook.lite")) {
                intent.setPackage(info.activityInfo.packageName);
                facebookAppFound = true;
                break;
            }
        }

        if (facebookAppFound) {
            appCompatActivity.startActivity(intent);
        } else {
            showWarningDialog(appCompatActivity, appCompatActivity.getString(R.string.error_activity_not_found));
        }
    }

    public static void shareOnWhatsapp(AppCompatActivity appCompatActivity, String textBody, Uri fileUri){...}

    private static void showWarningDialog(Context context, String message) {
        new AlertDialog.Builder(context)
                .setMessage(message)
                .setNegativeButton(context.getString(R.string.close), new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        dialog.dismiss();
                    }
                })
                .setCancelable(true)
                .create().show();
    }
}

สำหรับการรับUriจากไฟล์ให้ใช้คลาสด้านล่าง:

public class UtilityFile {
    public static @Nullable Uri getUriFromFile(Context context, @Nullable File file) {
        if (file == null)
            return null;

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
            try {
                return FileProvider.getUriForFile(context, "com.my.package.fileprovider", file);
            } catch (Exception e) {
                e.printStackTrace();
                return null;
            }
        } else {
            return Uri.fromFile(file);
        }
    }

    // Returns the URI path to the Bitmap displayed in specified ImageView       
    public static Uri getLocalBitmapUri(Context context, ImageView imageView) {
        Drawable drawable = imageView.getDrawable();
        Bitmap bmp = null;
        if (drawable instanceof BitmapDrawable) {
            bmp = ((BitmapDrawable) imageView.getDrawable()).getBitmap();
        } else {
            return null;
        }
        // Store image to default external storage directory
        Uri bmpUri = null;
        try {
            // Use methods on Context to access package-specific directories on external storage.
            // This way, you don't need to request external read/write permission.
            File file = new File(context.getExternalFilesDir(Environment.DIRECTORY_PICTURES), "share_image_" + System.currentTimeMillis() + ".png");
            FileOutputStream out = new FileOutputStream(file);
            bmp.compress(Bitmap.CompressFormat.PNG, 90, out);
            out.close();

            bmpUri = getUriFromFile(context, file);
        } catch (IOException e) {
            e.printStackTrace();
        }
        return bmpUri;
    }    
}

สำหรับการเขียนFileProviderให้ใช้ลิงค์นี้: https://github.com/codepath/android_guides/wiki/Sharing-Content-with-Intents


4

นี่คือสิ่งที่ฉันทำ (สำหรับข้อความ) ในโค้ดฉันคัดลอกข้อความที่จำเป็นในคลิปบอร์ด ครั้งแรกที่บุคคลใดพยายามใช้ปุ่มแสดงเจตจำนงในการแบ่งปันฉันจะปรากฏการแจ้งเตือนที่อธิบายว่าหากพวกเขาต้องการแบ่งปันไปยัง facebook พวกเขาต้องคลิก 'Facebook' จากนั้นกดค้างไว้เพื่อวาง (เป็นการแจ้งให้ทราบว่า Facebook ได้ทำลายระบบเจตนาของ Android) จากนั้นข้อมูลที่เกี่ยวข้องจะอยู่ในฟิลด์ ฉันอาจใส่ลิงก์ไปยังโพสต์นี้เพื่อให้ผู้ใช้สามารถร้องเรียนได้เช่นกัน ...

private void setClipboardText(String text) { // TODO
    int sdk = android.os.Build.VERSION.SDK_INT;
    if(sdk < android.os.Build.VERSION_CODES.HONEYCOMB) {
        android.text.ClipboardManager clipboard = (android.text.ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);
        clipboard.setText(text);
    } else {
        android.content.ClipboardManager clipboard = (android.content.ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE); 
        android.content.ClipData clip = android.content.ClipData.newPlainText("text label",text);
        clipboard.setPrimaryClip(clip);
    }
}

ด้านล่างนี้เป็นวิธีการจัดการกับเวอร์ชันก่อนหน้า

public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
    case R.id.menu_item_share:
        Intent shareIntent = new Intent(Intent.ACTION_SEND);
        shareIntent.setType("text/plain");
        shareIntent.putExtra(Intent.EXTRA_TEXT, "text here");

        ClipboardManager clipboard = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE); //TODO
         ClipData clip = ClipData.newPlainText("label", "text here");
         clipboard.setPrimaryClip(clip);

        setShareIntent(shareIntent); 

        break;
    }
        return super.onOptionsItemSelected(item);
}

4

ใน Lollipop (21) คุณสามารถใช้Intent.EXTRA_REPLACEMENT_EXTRASเพื่อลบล้างเจตนาสำหรับ Facebook โดยเฉพาะ (และระบุลิงก์เท่านั้น)

https://developer.android.com/reference/android/content/Intent.html#EXTRA_REPLACEMENT_EXTRAS

private void doShareLink(String text, String link) {
  Intent shareIntent = new Intent(Intent.ACTION_SEND);
  shareIntent.setType("text/plain");
  Intent chooserIntent = Intent.createChooser(shareIntent, getString(R.string.share_via));

  // for 21+, we can use EXTRA_REPLACEMENT_EXTRAS to support the specific case of Facebook
  // (only supports a link)
  // >=21: facebook=link, other=text+link
  // <=20: all=link
  if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
    shareIntent.putExtra(Intent.EXTRA_TEXT, text + " " + link);
    Bundle facebookBundle = new Bundle();
    facebookBundle.putString(Intent.EXTRA_TEXT, link);
    Bundle replacement = new Bundle();
    replacement.putBundle("com.facebook.katana", facebookBundle);
    chooserIntent.putExtra(Intent.EXTRA_REPLACEMENT_EXTRAS, replacement);
  } else {
    shareIntent.putExtra(Intent.EXTRA_TEXT, link);
  }

  chooserIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
  startActivity(chooserIntent);
}

2

ดูเหมือนว่าในเวอร์ชัน 4.0.0 ของ Facebook มีหลายอย่างเปลี่ยนไป นี่คือรหัสของฉันซึ่งใช้งานได้ดี หวังว่าจะช่วยคุณได้

    /**
     * Facebook does not support sharing content without using their SDK however
     * it is possible to share URL
     *
     * @param content
     * @param url
     */
    private void shareOnFacebook(String content, String url)
    {
        try
        {
            // TODO: This part does not work properly based on my test
            Intent fbIntent = new Intent(Intent.ACTION_SEND);
            fbIntent.setType("text/plain");
            fbIntent.putExtra(Intent.EXTRA_TEXT, content);
            fbIntent.putExtra(Intent.EXTRA_STREAM, url);
            fbIntent.addCategory(Intent.CATEGORY_LAUNCHER);
            fbIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK
                    | Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);
            fbIntent.setComponent(new ComponentName("com.facebook.katana",
                    "com.facebook.composer.shareintent.ImplicitShareIntentHandler"));

            startActivity(fbIntent);
            return;
        }
        catch (Exception e)
        {
            // User doesn't have Facebook app installed. Try sharing through browser.
        }

        // If we failed (not native FB app installed), try share through SEND
        String sharerUrl = "https://www.facebook.com/sharer/sharer.php?u=" + url;
        SupportUtils.doShowUri(this.getActivity(), sharerUrl);
    }

1
SupportUtils คืออะไร?
Silvia H

2

วิธีนี้ใช้ได้ผลเช่นกัน หากไม่ได้ติดตั้ง Facebook ก็แค่เรียกใช้กล่องโต้ตอบแชร์ปกติ หากมีและคุณไม่ได้เข้าสู่ระบบจะไปที่หน้าจอเข้าสู่ระบบ หากคุณลงชื่อเข้าใช้ระบบจะเปิดกล่องโต้ตอบการแชร์และใส่ "Share url" จาก Intent Extra

Intent intent = new Intent(Intent.ACTION_SEND);
intent.putExtra(Intent.EXTRA_TEXT, "Share url");
intent.setType("text/plain");

List<ResolveInfo> matches = getMainFragmentActivity().getPackageManager().queryIntentActivities(intent, 0);
for (ResolveInfo info : matches) {
    if (info.activityInfo.packageName.toLowerCase().contains("facebook")) {
        intent.setPackage(info.activityInfo.packageName);
    }
}

startActivity(intent);

0

นี่คือสิ่งที่ฉันทำซึ่งเปิดแอพ Facebook พร้อมลิงก์

shareIntent = new Intent(Intent.ACTION_SEND);
shareIntent.setComponent(new ComponentName("com.facebook.katana",
                    "com.facebook.katana.activity.composer.ImplicitShareIntentHandler"));

shareIntent.setType("text/plain");
shareIntent.putExtra(Intent.EXTRA_TEXT,  videoUrl);

2
ไม่ได้ผลสำหรับฉัน Facebook อาจเปลี่ยนชื่อของ ImplicitShareIntentHandler
Hesam

0
    public void invokeShare(Activity activity, String quote, String credit) {
    Intent shareIntent = new Intent(android.content.Intent.ACTION_SEND);
    shareIntent.setType("text/plain");
    shareIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, activity.getString(R.string.share_subject));
    shareIntent.putExtra(android.content.Intent.EXTRA_TEXT, "Example text");    
    shareIntent.putExtra("com.facebook.platform.extra.APPLICATION_ID", activity.getString(R.string.app_id));                        
    activity.startActivity(Intent.createChooser(shareIntent, activity.getString(R.string.share_title)));
}

0

Facebook ไม่อนุญาตให้แชร์ข้อมูลข้อความธรรมดาIntent.EXTRA_TEXTแต่คุณสามารถแชร์ข้อความ + ลิงค์กับ facebook messanger ได้โดยใช้สิ่งนี้ใช้ได้ดีสำหรับฉัน

            Intent sendIntent = new Intent();
            sendIntent.setAction(Intent.ACTION_SEND);
            sendIntent.putExtra(Intent.EXTRA_TEXT, text+url link);
            sendIntent.setType("text/plain");
            sendIntent.setPackage("com.facebook.orca");
            startActivity(sendIntent);

0

วิธีที่ง่ายที่สุดที่ฉันจะพบในการส่งข้อความจากแอปไปยัง facebook คือการคัดลอกไปยังคลิปบอร์ดโดยใช้โปรแกรมและแจ้งเตือนผู้ใช้ว่าพวกเขามีตัวเลือกในการวาง ช่วยให้ผู้ใช้ไม่ต้องดำเนินการด้วยตนเอง แอปของฉันไม่ได้วาง แต่ผู้ใช้อาจ

...
if (app.equals("facebook")) {
    // overcome fb 'putExtra' constraint;
    // copy message to clipboard for user to paste into fb.
    ClipboardManager cb = (ClipboardManager) 
            getSystemService(Context.CLIPBOARD_SERVICE);
    ClipData clip = ClipData.newPlainText("post", msg);
    cb.setPrimaryClip(clip);

    // tell the to PASTE POST with option to stop showing this dialogue
    showDialog(this, getString(R.string.facebook_post));
}
startActivity(appIntent);
...
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.