안녕하세요.
오늘은 인스타그램 스토리에 공유하는 기능을 구현해보려고 해요.
문서에는 Java코드로 되어있지만, 저는 Kotlin코드로 구현해 볼게요.
시작하기 전에
https://developers.facebook.com/docs/android/getting-started
우선 해당 기능개발 이전에 해당 문서를 참고해서 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
'Android' 카테고리의 다른 글
[Android] 갤러리에서 사진 가져오기 (0) | 2024.03.23 |
---|---|
[Android] 카메라 앱으로 사진 촬영 (0) | 2024.03.22 |