본문 바로가기
Android

[Android] Instagram Story 인스타그램 스토리 공유기능

by LoseyKim 2024. 3. 27.

안녕하세요.

오늘은 인스타그램 스토리에 공유하는 기능을 구현해보려고 해요.

문서에는 Java코드로 되어있지만, 저는 Kotlin코드로 구현해 볼게요.


시작하기 전에

https://developers.facebook.com/docs/android/getting-started

시작하기 - Android용 Facebook SDK - 문서 - Meta for Developers

Android용 Facebook SDK 시작하기 이 문서에서는 Android용 Facebook SDK를 사용하여 Facebook과 Android 앱의 통합을 시작하는 방법을 설명합니다. Android용 Facebook SDK의 현재 버전은 12.0.0이고 Android API 15가 필요

developers.facebook.com

우선 해당 기능개발 이전에 해당 문서를 참고해서 Facebook 앱 ID를 가져와야 해요.


배경 레이어와 스티커 레이어

인스타그램 스토리 배경 레이어, 스티커 레이어

배경 레이어는 필수이며, 스티커 레이어는 선택사항임을 알 수 있어요.


배경자산 공유하기

인스타그램 인텐트를 생성 후 해당 인텐트가 실행가능한지 확인하고, 스토어로 보내는 로직을 추가해 줬어요.

//인스타 스토리 업로드 Launcher
private val  uploadInstaLauncher = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result ->
    //인스타 스토리 업로드 결과를 처리
}

override fun onCreate(savedInstanceState: Bundle?) {
    ...

    // 인스타 인텐트 생성
    val instaIntent = Intent("com.instagram.share.ADD_TO_STORY").apply {
        setDataAndType(null, "image/jpeg")
    }
    //인스타그램 설치 여부 확인
    if (instaIntent.resolveActivity(packageManager) != null){
        // 인스타그램 앱이 설치되어 있을 경우
    } else {
        //인스타그램 미설치
        redirectToPlayStoreForInstagram()
    }

    // 애플리케이션의 FB ID
    val sourceApplication = "1234567"

    // 이미지 uri
    val backgroundAssetUri = Uri.parse("your-image-asset-uri-goes-here")

    instaIntent.apply {
     	// 애플리케이션의 FB ID
        putExtra("source_application", sourceApplication)
        // 이미지 uri
        setDataAndType(backgroundAssetUri, "image/jpeg")
        // 이미지에 대한 URI 권한을 부여
        addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)
    }

    // uploadInstaLauncher을 launch
    uploadInstaLauncher.launch(instaIntent)
}

// 인스타그램 앱이 설치되어 있지 않은 경우 스토어 이동
private fun redirectToPlayStoreForInstagram() {
    val appStoreIntent = Intent(Intent.ACTION_VIEW, Uri.parse("https://play.google.com/store/apps/details?id=com.instagram.android"))
    appStoreIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
    startActivity(appStoreIntent)
}

스티커 자산 공유하기

스티커 레이어 이미지 자산과 배경 레이어 색상을 설정해 줘요.

배경 레이어 색상을 지정하지 않을 경우 #222222로 설정돼요.

//인스타 스토리 업로드 Launcher
private val  uploadInstaLauncher = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result ->
    //인스타 스토리 업로드 결과를 처리
}

override fun onCreate(savedInstanceState: Bundle?) {
    ...

    // 인스타 인텐트 생성
    val instaIntent = Intent("com.instagram.share.ADD_TO_STORY").apply {
        setDataAndType(null, "image/jpeg")
    }
    //인스타그램 설치 여부 확인
    if (instaIntent.resolveActivity(packageManager) != null){
        // 인스타그램 앱이 설치되어 있을 경우
    } else {
        //인스타그램 미설치
        redirectToPlayStoreForInstagram()
    }

    // 애플리케이션의 FB ID
    val sourceApplication = "1234567"

    // 스티커 이미지 uri
    val stickerAssetUri = Uri.parse("your-image-asset-uri-goes-here")

    instaIntent.apply {
        // 애플리케이션의 FB ID
        putExtra("source_application", sourceApplication)
        putExtra("interactive_asset_uri", stickerAssetUri)
        type = "image/jpeg"
        //배경 컬러 설정
        putExtra("top_background_color", "#33FF33")
        putExtra("bottom_background_color", "#FF00FF")
    }
    // 스티커 이미지에 대한 URI 권한을 부여
    grantUriPermission(
        "com.instagram.android", stickerAssetUri, Intent.FLAG_GRANT_READ_URI_PERMISSION
    )

    // uploadInstaLauncher을 launch
    uploadInstaLauncher.launch(instaIntent)
}

// 인스타그램 앱이 설치되어 있지 않은 경우 스토어 이동
private fun redirectToPlayStoreForInstagram() {
    val appStoreIntent = Intent(Intent.ACTION_VIEW, Uri.parse("https://play.google.com/store/apps/details?id=com.instagram.android"))
    appStoreIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
    startActivity(appStoreIntent)
}

배경 자산 및 스티커 자산 공유하기

배경 레이어 이미지 자산과 스티커 레이어 이미지 자산을 인스타그램으로 보내요.

//인스타 스토리 업로드 Launcher
private val  uploadInstaLauncher = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result ->
    //인스타 스토리 업로드 결과를 처리
}

override fun onCreate(savedInstanceState: Bundle?) {
    ...

    // 인스타 인텐트 생성
    val instaIntent = Intent("com.instagram.share.ADD_TO_STORY").apply {
        setDataAndType(null, "image/jpeg")
    }
    //인스타그램 설치 여부 확인
    if (instaIntent.resolveActivity(packageManager) != null){
        // 인스타그램 앱이 설치되어 있을 경우
    } else {
        //인스타그램 미설치
        redirectToPlayStoreForInstagram()
    }

    // 애플리케이션의 FB ID
    val sourceApplication = "1234567"
    // 배경 이미지 uri
    val backgroundAssetUri = Uri.parse("your-background-image-asset-uri-goes-here")
    // 스티커 이미지 uri
    val stickerAssetUri = Uri.parse("your-image-asset-uri-goes-here")

    instaIntent.apply {
        // 애플리케이션의 FB ID
        putExtra("source_application", sourceApplication)
        // 배경 이미지 uri와 타입
        setDataAndType(backgroundAssetUri, "image/jpeg")
        // 스티커 이미지 uri
        putExtra("interactive_asset_uri", stickerAssetUri)
        // 배경 이미지에 대한 URI 권한을 부여
        flags = Intent.FLAG_GRANT_READ_URI_PERMISSION
    }
    // 스티커 이미지에 대한 URI 권한을 부여
    grantUriPermission(
        "com.instagram.android", stickerAssetUri, Intent.FLAG_GRANT_READ_URI_PERMISSION
    )

    // uploadInstaLauncher을 launch
    uploadInstaLauncher.launch(instaIntent)
}

// 인스타그램 앱이 설치되어 있지 않은 경우 스토어 이동
private fun redirectToPlayStoreForInstagram() {
    val appStoreIntent = Intent(Intent.ACTION_VIEW, Uri.parse("https://play.google.com/store/apps/details?id=com.instagram.android"))
    appStoreIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
    startActivity(appStoreIntent)
}

참고문서

https://developers.facebook.com/docs/instagram/sharing-to-stories?locale=ko_KR

스토리에 공유하기 - Instagram 플랫폼 - 문서 - Meta for Developers

개요 Android 암시적 인텐트 및 iOS 맞춤 URL 스키마를 사용하면 앱에서 사진, 동영상과 스티커를 Instagram 앱으로 전달할 수 있습니다. Instagram 앱이 해당 콘텐츠를 받아서 스토리 작성기에 읽어들이

developers.facebook.com

'Android' 카테고리의 다른 글

[Android] 갤러리에서 사진 가져오기  (0) 2024.03.23
[Android] 카메라 앱으로 사진 촬영  (0) 2024.03.22