Chia sẻ văn bản trên Facebook từ Ứng dụng Android qua ACTION_SEND


91

Tôi có một ứng dụng Android và nó hỗ trợ gửi văn bản qua các ứng dụng khác. Do đó, nó sử dụng ACTION_SENDý định và EXTRA_TEXTtrường. Người chọn giới thiệu cho tôi tất cả các ứng dụng có thể xử lý một mục đích như vậy. Đó là Twitter, Email, ... và Facebook. Nhưng khi tôi chọn Facebook, nó sẽ mở trình duyệt và chuyển đến trang sau:

http://m.facebook.com/sharer.php?u=mytext

Nó hiển thị văn bản của tôi và nút gửi. Nhưng khi tôi nhấn nút gửi thì không có gì xảy ra. Trang chỉ được tải lại. Tôi nghĩ có lẽ chỉ có thể gửi URL qua Ứng dụng Facebook. Đó có thể là?

Có ai quản lý để gửi văn bản qua ACTION_SENDứng dụng Facebook Android không?


4
Nếu bạn truy cập bài đăng SO này và thất vọng vì ứng dụng facebook không hỗ trợ ACTION_SEND đúng cách thì hãy dành thời gian để thêm bài đăng của bạn vào chủ đề sau: forum.developers.facebook.net/viewtopic.php?id=93900
Lỗi 454

7
Tôi đoán 21-3-2012 vẫn chưa được giải? Bởi vì tôi không thể làm cho nó hoạt động ..
Diego

1
developers.facebook.com/bugs/332619626816423 - Hình như đội ngũ thiết kế facebook đã đóng một này như trước điền một thông điệp là chống lại chính sách của họ :(
Brett

1
@Brett Thật là nực cười. Họ chỉ muốn bạn thêm SDK của họ vào dự án của bạn.
theblang

2
Ngày 17 tháng 5 năm 2015 - vẫn không hoạt động với facebook.
Faisal Asif

Câu trả lời:


11

CHỈNH SỬA: với bản phát hành mới của ứng dụng Facebook chính thức dành cho Android (ngày 14 tháng 7 năm 2011) NÓ HOẠT ĐỘNG !!!

CŨ: Các ví dụ trên không hoạt động nếu người dùng chọn ứng dụng Facebook để chia sẻ, nhưng chúng hoạt động nếu người dùng chọn ứng dụng Seesmic để đăng lên Facebook. Tôi đoán Seesmic triển khai API Facebook tốt hơn Facebook!


Trong phiên bản Facebook 1.6.1, nó không hoạt động và một số lỗi bổ sung dường như có trong khi gửi!
ngồi vào

Nó bắt đầu hoạt động! Không biết vấn đề là gì. Cảm ơn nó cũng hoạt động với FB v 1.6.1.
ngồi

8
Câu trả lời này là sai từ việc phát hành phiên bản 1.6.2 của ứng dụng facebook: developers.facebook.com/bugs/363863587019268
alaeri

51

Để làm cho Chia sẻ hoạt động với ứng dụng facebook, bạn chỉ cần có ít nhất một liên kết:

Intent intent = new Intent(Intent.ACTION_SEND);
intent.setType("text/plain");
intent.putExtra(Intent.EXTRA_TEXT, "Wonderful search engine http://www.google.fr/");
startActivity(Intent.createChooser(intent, "Share with"));

Điều này sẽ hiển thị cửa sổ chia sẻ chính xác nhưng khi bạn nhấp vào chia sẻ, không có gì xảy ra (Tôi cũng đã thử với Ứng dụng Twitter chính thức, nó không hoạt động).

Cách duy nhất tôi tìm thấy để chia sẻ ứng dụng Facebook hoạt động là chỉ chia sẻ một liên kết không có văn bản:

Intent intent = new Intent(Intent.ACTION_SEND);
intent.setType("text/plain");
intent.putExtra(Intent.EXTRA_TEXT, "http://www.google.fr/");
startActivity(Intent.createChooser(intent, "Share with"));

Nó sẽ hiển thị cửa sổ sau và nút Chia sẻ sẽ hoạt động:

chia sẻ facebook

Rõ ràng nó tự động lấy một hình ảnh và văn bản từ liên kết để đưa vào chia sẻ.

Nếu bạn chỉ muốn chia sẻ văn bản, bạn sẽ phải sử dụng api facebook: https://github.com/facebook/facebook-android-sdk


4
Văn bản "Công cụ tìm kiếm tuyệt vời" ở đâu? Đó là cùng một lỗi mà mọi người đang báo cáo ở trên, ya?
Kyle Clegg

3
Anh ấy nói rằng bạn chỉ có thể đăng một liên kết. Không có văn bản. Văn bản "Công cụ tìm kiếm tuyệt vời" phải được lấy ra để nó hoạt động.
chubbsondubs

Tôi sẽ +1 nếu bạn cập nhật câu trả lời. Hiện tại, Facebookứng dụng sẽ kéo chính xác liên kết từ một chuỗi như Wonderful search engine http://www.google.fr/. Lưu ý rằng tôi đã nói kéo liên kết , nó vẫn sẽ không làm gì với văn bản. Ngoài ra, Twitterhoạt động với cả văn bản và liên kết.
theblang

45

06/2013:

  • Đây là lỗi từ Facebook, không phải mã của bạn
  • Facebook sẽ KHÔNG sửa lỗi này , họ nói rằng đó là "do thiết kế" mà họ đã phá vỡ hệ thống chia sẻ Android: https://developers.facebook.com/bugs/332619626816423
  • sử dụng SDK hoặc chỉ chia sẻ URL.
  • Mẹo: bạn có thể gian lận một chút bằng cách sử dụng tiêu đề trang web làm văn bản cho bài đăng.

28
Cảm ơn Faceobook nhiều. </sarcasm>
mr_lou

Cảm ơn @Loda cho hút sự chú ý của chúng tôi
Jigar

28

Trước tiên, bạn cần truy vấn tùy chọn chia sẻ Intent to handler. Sau đó sử dụng tên gói để lọc Intent thì chúng ta sẽ chỉ có một Intent đó là tùy chọn chia sẻ trình xử lý!

Chia sẻ qua Facebook

Intent shareIntent = new Intent(android.content.Intent.ACTION_SEND);
shareIntent.setType("text/plain");
shareIntent.putExtra(android.content.Intent.EXTRA_TEXT, "Content to share");
PackageManager pm = v.getContext().getPackageManager();
List<ResolveInfo> activityList = pm.queryIntentActivities(shareIntent, 0);
for (final ResolveInfo app : activityList) {
    if ((app.activityInfo.name).contains("facebook")) {
        final ActivityInfo activity = app.activityInfo;
        final ComponentName name = new ComponentName(activity.applicationInfo.packageName, activity.name);
        shareIntent.addCategory(Intent.CATEGORY_LAUNCHER);
        shareIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK |             Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);
        shareIntent.setComponent(name);
        v.getContext().startActivity(shareIntent);
        break;
   }
}

Tiền thưởng - Chia sẻ qua Twitter

Intent shareIntent = new Intent(android.content.Intent.ACTION_SEND);
shareIntent.setType("text/plain");
shareIntent.putExtra(android.content.Intent.EXTRA_TEXT, "Content to share");
PackageManager pm = v.getContext().getPackageManager();
List<ResolveInfo> activityList = pm.queryIntentActivities(shareIntent, 0);
for (final ResolveInfo app : activityList) {
    if ("com.twitter.android.PostActivity".equals(app.activityInfo.name)) {
        final ActivityInfo activity = app.activityInfo;
        final ComponentName name = new ComponentName(activity.applicationInfo.packageName, activity.name);
        shareIntent.addCategory(Intent.CATEGORY_LAUNCHER);
        shareIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK |             Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);
        shareIntent.setComponent(name);
        v.getContext().startActivity(shareIntent);
        break;
   }
}

Và nếu bạn muốn tìm cách chia sẻ qua một ứng dụng chia sẻ khác, hãy tìm ở đó Tép Blog - Chia sẻ trước qua Android


13
Sử dụng các cách bạn vẫn không thể chia sẻ văn bản (chỉ liên kết) trong facebook và twitter. Bạn phải sử dụng SDK Facebook (Twitter) cho Android.
secretlm

Xin chào, tôi đã thử cái này, nhưng nó không hiển thị thông báo rằng tôi muốn Chia sẻ nó trên facebook ... Bạn có biết tại sao không? Nó yêu cầu tôi đăng nhập và hiển thị "Bạn đang nghĩ gì?" gợi ý văn bản không phải là văn bản thực tế mà tôi muốn chia sẻ nó
Ramesh Sangili

Điều này không hoạt động. Nó hiển thị đầu vào trống giống như với ý định (hộp thoại) bình thường.
Ixx

3
nhưng trên twitter văn bản có thể dễ dàng đăng tải
Trikaldarshi

1
Không hoạt động cho Facebook và để cho phép chia sẻ trên Twitter, không cần thiết lập thành phần ý định.
Juozas Kontvainis

11

Vì vậy, tôi có một công việc xung quanh, nhưng nó giả định rằng bạn có quyền kiểm soát trang bạn đang chia sẻ ...

Nếu bạn định dạng EXTRA_TEXT của mình như vậy ...

String myText = "Hey!\nThis is a neat pic!";
String extraText = "http://www.example.com/myPicPage.html?extraText=\n\n" + myText;

... thì trên các ứng dụng không phải của Facebook, văn bản của bạn sẽ xuất hiện như sau:

http://www.example.com/myPicPage.html?extraText=

Này!
Đây là một bức ảnh gọn gàng!

Bây giờ, nếu bạn cập nhật trang web của mình mà các yêu cầu với tham số truy vấn extraText sẽ trả về nội dung của extraText trong siêu dữ liệu của trang.

<!-- Make sure to sanitize your inputs! e.g. http://xkcd.com/327/ -->
<meta name="title" content="Hey! this is a neat pic!">

Sau đó, khi Facebook thoát url đó để tạo hộp thoại, nó sẽ đọc dữ liệu meta tiêu đề và nhúng nó vào hộp thoại chia sẻ của bạn.

Tôi nhận ra đây là một giải pháp khá tệ, vì vậy hãy mang theo một chút muối ...


(cộng một) để tham khảo xkcd.
Aamir Abro

2

Có vẻ như ứng dụng Facebook xử lý ý định này không chính xác. Cách đáng tin cậy nhất dường như là sử dụng API Facebook cho Android.

SDK có tại liên kết này: http://github.com/facebook/facebook-android-sdk

Trong 'sử dụng', có cái này:

Hiển thị hộp thoại Facebook.

SDK hỗ trợ một số hộp thoại html WebView cho các tương tác của người dùng, chẳng hạn như tạo bài đăng trên tường. Điều này nhằm cung cấp chức năng Facebook nhanh chóng mà không cần phải triển khai giao diện người dùng Android gốc và chuyển dữ liệu đến facebook trực tiếp thông qua các API.

Đây có vẻ là cách tốt nhất để làm điều đó - hiển thị một hộp thoại sẽ đăng lên tường. Vấn đề duy nhất là họ có thể phải đăng nhập trước


Đó không phải là chính xác những gì tôi yêu cầu. Nhưng dù sao cũng cảm ơn vì gợi ý. Tôi sẽ cần phải thêm một mục trình đơn riêng biệt cho facebook share để làm cho công việc này ...
Goddchen

Vâng, tôi hiểu những gì bạn có nghĩa là và đó là một con chó cái nhưng tôi đã có cùng một vấn đề với ACTION_SEND ý định trong ứng dụng và Facebook của tôi đã không cố định ứng dụng của họ, vì vậy đây có vẻ là tốt nhất thay thế
HXCaine

3
Tôi vừa thực hiện thêm một số tìm kiếm và nhận thấy rằng có rất nhiều người trên internet gặp sự cố này và Facebook không giúp gì cả. forum.developers.facebook.net/viewtopic.php?pid=255227
HXCaine

1
Check this out : By this we can check activity results also....
// Open all sharing option for user
                    Intent sharingIntent = new Intent(android.content.Intent.ACTION_SEND); 
                    sharingIntent.setType("text/plain");                    
                    sharingIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, ShortDesc+" from "+BusinessName);
                    sharingIntent.putExtra(android.content.Intent.EXTRA_TEXT, ShortDesc+" "+ShareURL);
                    sharingIntent.putExtra(Intent.EXTRA_TITLE, ShortDesc+" "+ShareURL);
                    startActivityForResult(Intent.createChooser(sharingIntent, "Share via"),1000);
/**
     * Get the result when we share any data to another activity 
     * */
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);

        switch(requestCode) {
        case 1000:
            if(resultCode == RESULT_OK)
                Toast.makeText(getApplicationContext(), "Activity 1 returned OK", Toast.LENGTH_LONG).show();
            else
                Toast.makeText(getApplicationContext(), "Activity 1 returned NOT OK", Toast.LENGTH_LONG).show();
            break;
        case 1002:
            if(resultCode == RESULT_OK)
                Toast.makeText(getApplicationContext(), "Activity 2 returned OK", Toast.LENGTH_LONG).show();
            break;
        }// end switch



    }// end onActivityResult

1
ShareDialog shareDialog = new ShareDialog(this);
if(ShareDialog.canShow(ShareLinkContent.class)) {

    ShareLinkContent linkContent = new ShareLinkContent.Builder().setContentTitle(strTitle).setContentDescription(strDescription)
                            .setContentUrl(Uri.parse(strNewsHtmlUrl))
                            .build();
    shareDialog.show(linkContent);

}

0

Có vẻ như đó là một lỗi trong ứng dụng Facebook đã được báo cáo vào tháng 4 năm 2011 và vẫn chưa được các nhà phát triển Android Facebook khắc phục.

Công việc duy nhất hiện tại là sử dụng SDK của họ.


2
Tôi nghĩ họ muốn bạn sử dụng ứng dụng web để chia sẻ nội dung có thể chia sẻ với bạn bè, vì vậy bạn có thể xem de Ads ... Tôi cũng gặp vấn đề tương tự và tôi sẽ triển khai chia sẻ Facebbok thông qua api facebook.
Igor

0

nếu bạn muốn hiển thị văn bản, hãy đặt # ở đầu thư bạn muốn, nó sẽ chia sẻ nó dưới dạng Hashtag

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.