Android에서 공유

본 가이드에서는 Android 앱에서 Facebook으로 콘텐츠를 공유할 수 있는 방법을 자세히 설명합니다. 누군가 앱에서 콘텐츠를 공유하면 해당 콘텐츠가 자신의 타임라인에 표시되고 친구의 뉴스피드에도 표시될 수 있습니다.

앱에서 Facebook Messenger로도 콘텐츠를 공유할 수 있습니다.

필수 조건

앱에서 Facebook에 공유하려면 Android용 Facebook 공유 SDK를 연결하거나 다운로드해야 합니다.

Android용 공유 SDK는 Android용 Facebook SDK의 구성 요소입니다. 프로젝트에서 Facebook 공유 SDK를 사용하려면 Maven에 종속되도록 만들거나 다운로드하세요. 다음 버튼을 사용하여 원하는 방법을 선택합니다.

Maven에 SDK 연결

  1. 프로젝트에서 your_app | Gradle Scripts | build.gradle (Project)을 연 후 buildscript { repositories {}} 섹션에 다음 저장소를 추가하여 Maven Central Repository에서 SDK를 다운로드합니다:
    mavenCentral() 
  2. 프로젝트에서 your_app | Gradle Scripts | build.gradle (Module: app)을 연 후 dependencies{} 섹션에 다음 컴파일 문을 추가하여 최신 버전의 SDK를 컴파일합니다.
    compile 'com.facebook.android:facebook-share:[4,5)'
  3. 프로젝트를 빌드합니다.

SDK 다운로드

SDK를 다운로드하려면 다음 버튼을 클릭하세요.

SDK 다운로드

Facebook 공유 SDK를 사용할 때 자동 이벤트 로깅을 비활성화하지 않으면 앱의 이벤트가 Facebook 분석을 위해 자동으로 로깅되고 수집됩니다. 수집되는 정보 및 자동 이벤트 로깅을 비활성화하는 방법에 대한 자세한 내용은 자동 앱 이벤트 로깅을 참조하세요.

기타 필수 조건

또한 다음을 수행해야 합니다.

이러한 요구 사항에 대한 상세 정보는 Android - 시작하기를 참조하세요.

AndroidManifest.xml에서 ContentProvider도 설정해야 합니다. {APP_ID}에는 앱 ID를 입력합니다.

<provider android:authorities="com.facebook.app.FacebookContentProvider{APP_ID}"
          android:name="com.facebook.FacebookContentProvider"
          android:exported="true"/>

공유 기능을 구현할 때 앱에서 공유할 콘텐츠를 미리 채우지 않아야 합니다. 채울 경우 Facebook 플랫폼 정책에 위배됩니다. Facebook 플랫폼 정책, 2.3을 참조하세요.

콘텐츠 모델링

Facebook SDK 4.0 및 이후 버전에는 콘텐츠를 공유하는 새로운 모델이 있습니다. 공유할 콘텐츠 유형마다 해당 유형을 표시하는 데 사용할 클래스가 있습니다. 콘텐츠를 모델링한 후에 앱에 공유 인터페이스를 추가하세요.

앱에서 Facebook으로 링크를 공유하면 contentURL이 공유할 링크와 함께 포함됩니다. ShareLinkContent 모델에 링크의 공유 콘텐츠를 빌드합니다. 모든 속성 리스트는 ShareLinkContent 참조를 확인하세요.

2017년 4월 18일부터 다음 매개변수는 그래프 API 2.9 이후 버전에서 더 이상 지원되지 않습니다. 2.8 이전 버전의 경우에는 2017년 7월 17일까지 계속 작동합니다.

  • contentTitle: 링크의 콘텐츠 제목
  • imageURL: 게시물에 표시될 썸네일 이미지의 URL
  • contentDescription: 일반적으로 2~4개의 문장으로 구성된 콘텐츠 설명

다음은 공유를 트리거할 수 있는 방법의 예입니다.

ShareLinkContent content = new ShareLinkContent.Builder()
        .setContentUrl(Uri.parse("https://developers.facebook.com"))
        .build();

Google Play나 App Store에 대한 링크 공유를 미리 보려면 공유 디버거에 해당 URL을 입력합니다.

앱 공유에 Google Play 또는 App Store에 있는 앱 링크가 포함된 경우 공유에 포함된 설명과 이미지가 무시됩니다. 대신 스토어에 있는 해당 앱의 제목과 이미지를 직접 스크랩합니다(이미지가 없는 경우 공유에 포함되지 않음).

사진

공유 대화 상자 또는 맞춤 인터페이스를 사용하여 앱에서 Facebook으로 사진을 공유할 수 있습니다.

  • 사진의 크기는 12MB 미만이어야 합니다.
  • Android용 기본 Facebook 앱 7.0 및 이후 버전이 설치되어 있어야 합니다.

SharePhotoContent 모델에 사진의 공유 콘텐츠를 빌드합니다. 모든 속성 리스트는 SharePhotoContent 참조를 확인하세요.

Bitmap image = ...
SharePhoto photo = new SharePhoto.Builder()
        .setBitmap(image)
        .build();
SharePhotoContent content = new SharePhotoContent.Builder()
        .addPhoto(photo)
        .build();

동영상

앱 사용자가 공유 대화 상자 또는 직접 제작한 맞춤 인터페이스를 통해 Facebook에 동영상을 공유할 수 있습니다.

동영상의 크기는 12MB 미만이어야 합니다.

ShareVideoContent 모델에 동영상의 공유 콘텐츠를 빌드합니다. 모든 속성 리스트는 ShareVideoContent 참조를 확인하세요.

Uri videoFileUri = ...
ShareVideo = new ShareVideo.Builder()
        .setLocalUrl(videoUrl)
        .build();
ShareVideoContent content = new ShareVideoContent.Builder()
        .setVideo(video)
        .build();

멀티미디어

공유 대화 상자를 사용하여 앱에 있는 사진과 동영상을 포함하는 콘텐츠를 Facebook에 공유할 수 있습니다. 유의 사항

  • Android용 기본 Facebook 앱 7.1 및 이후 버전이 설치되어 있어야 합니다.
  • 사진의 크기는 12MB 미만이어야 합니다.
  • 동영상의 크기는 12MB 미만이어야 합니다.
  • 한 번에 최대 6개의 사진과 동영상을 공유할 수 있습니다.

ShareMediaContent 모델로 멀티미디어 공유 콘텐츠를 빌드합니다. 모든 속성 리스트는 ShareMediaContent 참조를 확인하세요.

SharePhoto sharePhoto1 = new SharePhoto.Builder()
    .setBitmap(...)
    .build();
SharePhoto sharePhoto2 = new SharePhoto.Builder()
    .setBitmap(...)
    .build();
ShareVideo shareVideo1 = new ShareVideo.Builder()
    .setLocalUrl(...)
    .build();
ShareVideo shareVideo2 = new ShareVideo.Builder()
    .setLocalUrl(...)
    .build();

ShareContent shareContent = new ShareMediaContent.Builder()
    .addMedium(sharePhoto1)
    .addMedium(sharePhoto2)
    .addMedium(shareVideo1)
    .addMedium(shareVideo2)
    .build();

ShareDialog shareDialog = new ShareDialog(...);
shareDialog.show(shareContent, Mode.AUTOMATIC);

공유 인터페이스 추가

모델을 빌드하여 콘텐츠를 처리한 다음 Facebook 공유 인터페이스를 실행하거나 그래프 API를 호출하는 자체 인터페이스를 빌드할 수 있습니다.

버튼

Facebook에서는 공유를 트리거하기 위해 Android용 네이티브 버튼을 제공합니다.


Android용 Facebook SDK의 버전 4.28.0 릴리스부터 Android용 좋아요 버튼이 사용 중단되었습니다. 해당 기능은 2018년 2월 5일까지만 지원됩니다.

좋아요 버튼

좋아요 버튼을 사용하면 친구와 콘텐츠를 신속하게 공유할 수 있습니다. 좋아요 버튼을 누르면 앱에서 콘텐츠가 '좋아요'로 표시되고 Facebook에 게시물이 공유됩니다. 좋아요 버튼은 Facebook 페이지나 오픈 그래프 개체를 좋아요로 표시하는 데 사용하며 URL이나 ID로 참조할 수 있습니다. 좋아요 버튼을 추가하려면 다음 픽셀 코드를 보기에 추가합니다.

LikeView likeView = (LikeView) findViewById(R.id.like_view);
likeView.setObjectIdAndType(
    "https://www.facebook.com/FacebookDevelopers",
    LikeView.ObjectType.PAGE);

공유하기 버튼

공유하기 버튼에서 공유 대화 상자를 호출합니다. 공유하기 버튼을 추가하려면 다음 픽셀 코드를 보기에 추가합니다.

ShareButton shareButton = (ShareButton)findViewById(R.id.fb_share_button);
shareButton.setShareContent(content);

Facebook SDK 버전 4.28.0 릴리스부터 보내기 버튼이 사용 중단되었습니다. 해당 기능은 2018년 2월 5일까지만 지원됩니다.

보내기 버튼

보내기 버튼을 사용하면 Facebook Messenger를 통해 친구와 연락처에 있는 사람들에게 사진, 동영상 및 링크를 비공개로 보낼 수 있습니다. 보내기 버튼에서 메시지 대화 상자를 호출합니다. 보기에 보내기 버튼을 추가하려면 다음 픽셀 코드를 보기에 추가합니다.

SendButton sendButton = (SendButton)findViewById(R.id.fb_send_button);
sendButton.setShareContent(shareContent);
sendButton.registerCallback(callbackManager, new FacebookCallback<Sharer.Result>() { ... });

공유 대화 상자

공유 대화 상자가 Android용 기본 Facebook 앱으로 전환하고 나면 게시물이 올라간 후에 앱에 제어 기능을 반환합니다. 사용 중인 SDK에 따라 앱으로 돌아오려면 뒤로 화살표 아이콘을 눌러야 할 수도 있습니다. Facebook 앱이 설치되지 않은 경우 공유 대화 상자가 웹 기반 대화 상자로 자동 폴백됩니다.

ShareDialog.show(activityOrFragment, content);

예를 들어 액티비티에 링크의 ShareDialog를 표시하려면 onCreate 메서드에 ShareDialog 인스턴스를 만듭니다.

public class MainActivity extends FragmentActivity {
    CallbackManager callbackManager;
    ShareDialog shareDialog;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        callbackManager = CallbackManager.Factory.create();
        shareDialog = new ShareDialog(this);
        // this part is optional
        shareDialog.registerCallback(callbackManager, new FacebookCallback<Sharer.Result>() { ... });
    }

그런 다음 ShareDialog를 표시합니다.

if (ShareDialog.canShow(ShareLinkContent.class)) {
    ShareLinkContent linkContent = new ShareLinkContent.Builder()
            .setContentUrl(Uri.parse("http://developers.facebook.com/android"))
            .build();
    shareDialog.show(linkContent);
}

마지막으로 callbackManager에서 SDK의 onActivityResult를 호출하여 응답을 처리합니다.

@Override
protected void onActivityResult(final int requestCode, final int resultCode, final Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    callbackManager.onActivityResult(requestCode, resultCode, data);
}

메시지 대화 상자

메시지 대화 상자가 Android용 기본 Messenger 앱으로 전환하고 나면 게시물이 올라간 후에 앱에 제어 기능을 반환합니다. 사용 중인 SDK에 따라 앱으로 돌아오려면 뒤로 화살표 아이콘을 눌러야 할 수도 있습니다.

MessageDialog.show(activityOrFragment, content);

추가 기능

Facebook 공유 대화 상자를 사용하면, API를 통해 공유할 때는 사용할 수 없는 추가 옵션이 있습니다.

해시태그

공유된 사진, 링크 또는 동영상과 함께 표시될 단일 해시태그를 지정할 수 있습니다. 이 해시태그는 공유 대화 상자에도 표시되며, 게시하기 전에 이 태그를 삭제할 수 있습니다.

다음은 링크 공유에 해시태그를 추가하는 예시입니다.

ShareLinkContent content = new ShareLinkContent.Builder()
        .setContentUrl(Uri.parse("https://developers.facebook.com"))
        .setShareHashtag(new ShareHashtag.Builder()
                .setHashtag("#ConnectTheWorld")
                .build());
        .build();

인용문 공유

공유 링크가 있는 인용문으로 표시되도록 텍스트를 강조 표시할 수 있습니다. 또는 공유 링크와 함께 표시되도록 아티클의 요약 인용문과 같은 인용문을 미리 정의할 수 있습니다. 두 경우 모두 사용자 댓글과 별도로 고유 필드에 인용문이 표시됩니다.

ShareLinkContent content = new ShareLinkContent.Builder()
        .setContentUrl(Uri.parse("https://developers.facebook.com"))
        .setQuote("Connect on a global scale.")
        .build();

고급 주제

기본 제공 공유 폴백

이전 버전의 Android용 SDK에서는 앱에서 기본 Facebook 앱이 설치되었는지 확인해야 공유 대화 상자를 열 수 있습니다. 앱이 설치되지 않은 경우 폴백 대화 상자를 호출하는 고유 코드를 제공해야 합니다.

이제 SDK에서 기본 Facebook 앱을 자동으로 확인합니다. 설치되지 않은 경우 SDK에서 기본 브라우저로 전환하여 피드 대화 상자를 엽니다. 오픈 그래프 소식을 공유하려는 경우 SDK에서 웹 공유 대화 상자를 엽니다.

앱 링크를 사용하여 앱에서 게시한 Facebook 게시물에서 앱으로 다시 링크합니다. 앱에서 게시한 Facebook 게시물을 클릭하면 앱이 열리며, 앱 내에 있는 특정 콘텐츠로 링크할 수도 있습니다.

맞춤 인터페이스

공유하는 데 자체 인터페이스를 사용하려면 다음을 수행해야 합니다.

다음은 자체 인터페이스에서 Facebook에 링크를 게시하는 코드입니다.

ShareApi.share(content, null);

오픈 그래프 소식 공유

오픈 그래프 소식을 사용하면 오픈 그래프 액션과 개체로 정의되는 강력한 형식의 API를 통해 구조화된 풍부한 콘텐츠를 공유할 수 있습니다. 그러면 앱 또는 앱의 App Store 페이지에 다시 링크를 게시합니다.

오픈 그래프 소식을 구성하는 방법에 대해 더 알아보려면 Android의 오픈 그래프 소식을 참조하세요.

ShareOpenGraphContent 모델에 오픈 그래프 액션의 공유 콘텐츠를 빌드합니다. 모든 속성 리스트는 ShareOpenGraphContent 참조를 확인하세요.

ShareOpenGraphObject object = new ShareOpenGraphObject.Builder()
        .putString("og:type", "fitness.course")
        .putString("og:title", "Sample Course")
        .putString("og:description", "This is a sample course.")
        .putInt("fitness:duration:value", 100)
        .putString("fitness:duration:units", "s")
        .putInt("fitness:distance:value", 12)
        .putString("fitness:distance:units", "km")
        .putInt("fitness:speed:value", 5)
        .putString("fitness:speed:units", "m/s")
        .build();
ShareOpenGraphAction action = new ShareOpenGraphAction.Builder()
        .setActionType("fitness.runs")
        .putObject("fitness:course", object)
        .build();
ShareOpenGraphContent content = new ShareOpenGraphContent.Builder()
        .setPreviewPropertyName("fitness:course")
        .setAction(action)
        .build();