ACTION_SEND를 통해 Android 앱에서 Facebook에 텍스트 공유


91

Android 앱이 있으며 다른 앱을 통한 문자 전송을 지원합니다. 따라서 인 ACTION_SEND텐트와 EXTRA_TEXT필드를 사용합니다 . 선택기는 그러한 의도를 처리 할 수있는 모든 앱을 제공합니다. 트위터, 이메일, ... 및 Facebook입니다. 하지만 Facebook을 선택하면 브라우저가 열리고 다음 페이지로 이동합니다.

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

내 텍스트와 제출 버튼이 표시됩니다. 그러나 제출 버튼을 누르면 아무 일도 일어나지 않습니다. 페이지가 다시로드됩니다. Facebook 앱을 통해서만 URL을 보낼 수 있다고 생각합니다. 그럴 수 있습니까?

ACTION_SENDFacebook Android 앱 을 통해 문자를 보낼 수있는 사람이 있습니까?


4
이 SO 게시물을 방문하고 facebook 앱이 ACTION_SEND를 제대로 지원하지 않는다고 답답한 경우 다음 주제에 게시물을 추가하십시오. forum.developers.facebook.net/viewtopic.php?id=93900
오류 454

7
2012 년 3 월 21 일이 아직 해결되지 않은 것 같아요? 때문에 나는 일에 그것을 얻을 할수 없어 ..
디에고

1
developers.facebook.com/bugs/332619626816423- 메시지를 미리 채우는 것이 정책에 위배되므로 페이스 북 디자인 팀이이 메시지를 닫은 것 같습니다 :(
Brett

1
@Brett 정말 우스꽝 스럽네요. 프로젝트에 SDK를 추가하기 만하면됩니다.
theblang

2
2015 년 5 월 17 일-여전히 facebook에서 작동하지 않습니다.
Faisal Asif

답변:


11

편집 됨 : Android 용 공식 Facebook 앱의 새 릴리스 (2011 년 7 월 14 일) IT WORKS !!!

OLD : 위의 예는 사용자가 공유를 위해 Facebook 앱을 선택하면 작동하지 않지만 사용자가 Facebook에 게시하기 위해 Seesmic 앱을 선택하면 작동합니다. 나는 Seesmic이 Facebook보다 Facebook API를 더 잘 구현했다고 생각합니다!


Facebook 버전 1.6.1에서는 작동하지 않으며 보내는 동안 몇 가지 추가 버그가있는 것 같습니다!
앉아

작동하기 시작했습니다! 무엇이 문제 였는지 모릅니다. 감사합니다. FB v 1.6.1에서도 작동합니다.
토요일

8
이 대답은 페이스 북 앱 1.6.2 버전이 출시 된 이후 잘못된 것입니다. developers.facebook.com/bugs/363863587019268
alaeri

51

공유가 페이스 북 앱에서 작동하게하려면 최소한 하나의 링크 만 있으면됩니다.

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"));

올바른 공유 창이 표시되지만 공유를 클릭하면 아무 일도 일어나지 않습니다 (공식 Twitter 앱에서도 시도했지만 작동하지 않습니다).

Facebook 앱 공유가 작동하도록하는 유일한 방법은 텍스트없이 링크 만 공유하는 것입니다.

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"));

다음 창이 표시되고 공유 버튼이 작동합니다.

페이스 북에 공유

분명히 공유를 채우기 위해 링크에서 이미지와 텍스트를 자동으로 가져옵니다.

텍스트 만 공유하려면 facebook api를 사용해야합니다. https://github.com/facebook/facebook-android-sdk


4
"Wonderful search engine"텍스트는 어디에 있습니까? 사람들이 위에서보고 한 것과 같은 버그입니다.
Kyle Clegg

3
그는 링크 만 게시 할 수 있다고 말합니다. 텍스트가 없습니다. 작동하려면 "Wonderful search engine"텍스트를 제거해야했습니다.
chubbsondubs

답변을 업데이트하면 +1하겠습니다. 이제 Facebook앱은 .NET과 같은 문자열에서 링크를 올바르게 가져옵니다 Wonderful search engine http://www.google.fr/. pull the link 라고 말 했지만 여전히 텍스트로 아무것도하지 않습니다. 또한 Twitter텍스트와 링크 모두에서 작동합니다.
theblang 2014 년

45

2013 년 6 월 :

  • 이것은 귀하의 코드가 아니라 Facebook의 버그입니다.
  • 페이스 북은이 버그를 고치지 않을 것이며 , 그들은 안드로이드 공유 시스템을 깨뜨린 것이 "설계 상"이라고 말합니다 : https://developers.facebook.com/bugs/332619626816423
  • SDK를 사용하거나 URL 만 공유하십시오.
  • 팁 : 게시물의 텍스트로 웹 페이지 제목을 사용하여 약간의 속임수를 쓸 수 있습니다.

28
Faceobook에 감사드립니다. </ 냉소>
mr_lou는

우리의 관심 그리기 주셔서 감사합니다 @Loda
Jigar

28

먼저 처리기 공유 옵션에 대한 쿼리 의도가 필요합니다. 그런 다음 패키지 이름을 사용하여 Intent를 필터링하면 처리기 공유 옵션이 하나만 있습니다!

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

보너스-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;
   }
}

다른 공유 응용 프로그램을 통해 공유하는 방법을 찾으려면 거기에서 찾아보십시오 Tép Blog-Android를 통한 사전 공유


13
여전히 페이스 북과 트위터에서 텍스트 (링크 만)를 공유 할 수없는 방법을 사용합니다. Android 용 SDK Facebook (Twitter)을 사용해야합니다.
secretlm

안녕하세요, 시도 해봤는데 페이스 북에 공유하고 싶다는 메시지가 나오지 않았어요 ... 왜 그런지 아세요? 로그인을 요청하고 "What is in your mind?"를 표시합니다. 힌트 텍스트하지 내가 그것을 공유하고자하는 실제 텍스트
라 메쉬 Sangili

이것은 작동하지 않습니다. 일반 (대화 상자) 인 텐트와 동일한 빈 입력을 표시합니다.
Ixx 2013 년

3
그러나 트위터에 텍스트는 쉽게 게시됩니다
Trikaldarshi jul.

1
Facebook에서는 작동하지 않으며 Twitter에서 공유를 활성화하기 위해 인 텐트 구성 요소를 설정할 필요가 없습니다.
Juozas Kontvainis 2014

11

그래서 해결 방법이 있지만 공유하는 페이지를 제어 할 수 있다고 가정합니다.

EXTRA_TEXT의 형식을 이렇게 지정하면 ...

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

... Facebook이 아닌 앱에서는 텍스트가 다음과 같이 표시됩니다.

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

안녕하세요!
이것은 깔끔한 사진입니다!

이제 extraText 쿼리 매개 변수가있는 요청이 페이지의 메타 데이터에서 extraText의 콘텐츠를 반환하도록 웹 사이트를 업데이트하면됩니다.

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

그런 다음 Facebook이 해당 URL을 이스케이프하여 대화 상자를 생성하면 제목 메타 데이터를 읽고 공유 대화 상자에 삽입합니다.

이게 꽤 괜찮은 해결책이라는 걸 알고 있으니, 소금 한 알과 함께 드세요 ...


(+1) xkcd 참조 용.
아미르 ABRO

2

Facebook 앱이이 인 텐트를 잘못 처리하는 것 같습니다. 가장 신뢰할 수있는 방법은 Android 용 Facebook API를 사용하는 것 같습니다.

SDK는 다음 링크에 있습니다. http://github.com/facebook/facebook-android-sdk

'사용법'에는 다음이 있습니다.

Facebook 대화 상자를 표시합니다.

SDK는 벽 게시물 생성과 같은 사용자 상호 작용을 위해 여러 WebView html 대화 상자를 지원합니다. 이는 네이티브 Android UI를 구현하고 API를 통해 직접 Facebook에 데이터를 전달할 필요없이 빠른 Facebook 기능을 제공하기위한 것입니다.

이것이 가장 좋은 방법 인 것 같습니다. 벽에 게시 할 대화 상자를 표시합니다. 유일한 문제는 먼저 로그인해야 할 수도 있다는 것입니다.


글쎄요 그건 제가 원했던 것이 아닙니다. 어쨌든 힌트 주셔서 감사합니다. 나는겠습니까 ...이 일을하기 위해 페이스 북의 공유에 대한 별도의 메뉴 항목을 추가 할 필요가
Goddchen

네, 당신이 의미하는 바를 이해했고 그것은 나쁜 짓이지만 내 응용 프로그램에서 ACTION_SEND 의도와 동일한 문제가 있었고 Facebook이 앱을 수정하지 않았으므로 이것이 최선의 대안 인 것 같습니다
HXCaine

3
나는 방금 더 많은 검색을 수행했으며 인터넷 에이 문제를 가진 사람들이 있고 Facebook이 전혀 도움이되지 않는다는 것을 알았습니다. 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

2011 년 4 월에보고 된 Facebook 앱의 버그로 보이지만 아직 Android Facebook 개발자가 수정하지 않은 것 같습니다.

현재 유일한 해결 방법은 SDK를 사용하는 것입니다.


2
나는 그들이 웹 앱을 사용하여 친구들과 공유 가능한 콘텐츠를 공유하기를 원한다고 생각합니다. 그래서 당신은 광고를 볼 수 있습니다. 저도 같은 문제이며 페이스 북 API를 통해 페이스 복 공유를 구현할 것입니다.
이고르

0

텍스트를 표시 하려면 원하는 메시지를 구걸 할 때 # 을 입력하세요. Hashtag로 공유합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.