Firebase DynamicLink(동적링크) - 1편(Firebase 환경설정): https://minchanyoun.tistory.com/103
Firebase DynamicLink(동적링크) - 2편(안드로이드 앱 구축): https://minchanyoun.tistory.com/104
Firebase DynamicLink(동적링크)에 대해서 알아보겠습니다.
Firebase DynamicLink(동적링크)는 앱 설치 여부에 관계 없이 여러 플랫폼에서 원하는 대로 작동하는 링크입니다.
동적 링크를 사용하면 사용자가 링크를 연 플랫폼에 가장 적합한 환경을 제공할 수 있습니다. iOS 또는 Android에서 동적 링크를 연 사용자를 네이티브 앱 내 링크된 콘텐츠로 곧장 이동시킬 수 있습니다. 같은 동적 링크를 데스크톱 브라우저에서 열었다면 웹사이트 내 해당 콘텐츠로 안내할 수 있습니다.
또한 동적 링크는 앱 설치 여부에 따라 적절히 작동합니다. iOS 또는 Android에서 앱을 설치하지 않은 사용자가 동적 링크를 열면 앱을 설치하는 화면으로 안내됩니다. 앱을 설치하고 나서 동적 링크를 열면 앱이 시작되고 링크에 액세스할 수 있습니다.
<참고자료>
Firebase Google -> https://firebase.google.com/docs/dynamic-links?hl=ko
Android App 설정
Android App 설정부분을 코드를 보면서 따라가겠습니다.
AndroidManifest.xml
*DynamicLink <intent-filter> 추가
...
<!-- DynamicLink -->
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="https" android:host="shopping.naver.com/home"/>
<data android:scheme="http" android:host="shopping.naver.com/home"/>
</intent-filter>
...
build.gradle(Project)
*빌드 종속항목 추가
...
buildscript {
dependencies {
classpath 'com.google.gms:google-services:4.3.10' //DynamicLink
}
}
...
build.gradle(Module)
*plugins, dependencies 추가
plugins {
...
id 'com.google.gms.google-services' //DynamicLink
}
dependencies {
...
//TODO: DynamicLink관련 / Firebase 및 동적 링크 SDK 설정
implementation platform('com.google.firebase:firebase-bom:29.1.0')
implementation 'com.google.firebase:firebase-dynamic-links'
implementation 'com.google.firebase:firebase-analytics-ktx'
...
}
MainActivity.kt
* 딥링크 수신, 다이나믹링크 생성 코드작성
class MainActivity : AppCompatActivity() {
lateinit var binding: ActivityMainBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root)
//딩링크 수신
initDynamicLinks()
//동적링크만들기
// var deepLinkStr = createDynamicLink()
// Log.e("YMC", "DeepLinkStr: ${deepLinkStr}")
}
/** DynamicLink */
/** Firebase쪽 부분이 제대로 설정이 되었다는 전제
* (설명)
* 단축URL: https://dynamiclink2022.page.link/main ("~~~.page.link" -> firebase쪽에서 제공하는 url)
* 딥링크: https://shopping.naver.com/home/p/index.naver (앱내 딥링크가 존재하지 않을시 다른URL로 돌아가는 것을 확인하기 위해 naverShopping으로 임시 지정)
*
* 단축URL을 앱 또는 브라우저에서 실행 시 -> Firebase쪽에서 수신을 통해 딥링크로 변경을 해줌
* firebase쪽에서 Flow가 어떻게 돌아가는지 확인 할 수 있으며
* 또 해당 딥링크로 변환했을시 앱에서 scheme를 "https", host를 "shopping.naver.com/home"으로 해당되는 딥링크를 수신처리
* 만약 해당되는 앱이 없을 시 딥링크 URL를 그대로 띄우거나 구글, 앱 스토어마켓으로 이동시킴! */
fun initDynamicLinks() {
/** 딥링크 수신*/
FirebaseDynamicLinks.getInstance()
.getDynamicLink(intent)
.addOnSuccessListener {
var dynamicLink: Uri? = null
if (it != null) {
/** 딥링크 데이터 수신성공 */
dynamicLink = it.link
Log.e("YMC","dynamicLink: $dynamicLink")
Log.e("YMC","path: ${dynamicLink?.path}")
binding.tvDynamicLinkReceive.text = "다이나믹링크 수신받은 데이터: ${dynamicLink?.path}" //ex) "/home/p/index.naver"
// val eventNo = dynamicLink?.path!!.replace("/data/", "")
// Log.e("YMC","eventNo: ${eventNo}")
} else {
/** 딥링크 데이터 수신실패 */
// handle
}
}
.addOnFailureListener {
// handle
}
}
/**긴 동적 링크만들기 - Firebase에서 직접만들면 이코드는 필요 없음!
* https://dynamiclink2022.page.link/main?apn=com.example.dynamiclink_kotlin&link=https%3A%2F%2Fshopping.naver.com%2Fhome%2Fp%2Findex.naver/event/1 */
private val DEEPLINK_URL = "https://shopping.naver.com/home/p/index.naver" //딥 링크
private val SHORT_DYNAMIC_LINK = "https://dynamiclink2022.page.link/main" //짧은 동적 링크
private val PACKAGE_NAME = "com.example.dynamiclink_kotlin"
private fun createDynamicLink(): String {
return FirebaseDynamicLinks.getInstance()
.createDynamicLink()
.setLink(Uri.parse(DEEPLINK_URL))
.setDomainUriPrefix(SHORT_DYNAMIC_LINK)
.setAndroidParameters(
DynamicLink.AndroidParameters.Builder(PACKAGE_NAME)
.build()
)
.buildDynamicLink()
.uri.toString()
// .uri.toString() + "/event/1" // https://DEEPLINK_URL/event/1 의 형태로 만들기 위해 추가
}
//
//구 버전 백업
// private val DEEPLINK_URL = "https://deeplink2022.page.link/data/123" //딥 링크
// private val SHORT_DYNAMIC_LINK = "https://deeplink2022.page.link/1" //짧은 동적 링크
// private val PACKAGE_NAME = "com.example.deeplink_receive"
//
// private fun createDynamicLink(): String {
// return FirebaseDynamicLinks.getInstance()
// .createDynamicLink()
// .setLink(Uri.parse(DEEPLINK_URL))
// .setDomainUriPrefix(SHORT_DYNAMIC_LINK)
// .setAndroidParameters(
// DynamicLink.AndroidParameters.Builder(PACKAGE_NAME)
// .build()
// )
// .buildDynamicLink()
// .uri.toString()
//// .uri.toString() + "/event/1" // https://URL/event/3 의 형태로 만들기 위해 추가
// }
}
구현화면
* DynamicLink 수신 전 / 후
<총 정리>
예를 들면 firebase에 등록된 단축URL: "https://dynamiclink2022.page.link/main"을 호출하면 firebase에서 확인하여 딥링크인 "https://shopping.naver.com/home/p/index.naver"으로 딥링크를 변환해준다.
앱 내부에서는 https 스키마와 shopping.naver.com인 host를 확인하고 실제 그뒤로부터있는 home/p/index.naver를 데이터로 인식
글 정리 & 소스코드
[정리]
Firebase DynamicLink(동적링크) - 1편(Firebase 환경설정): https://minchanyoun.tistory.com/103
Firebase DynamicLink(동적링크) - 2편(안드로이드 앱 구축): https://minchanyoun.tistory.com/104
[소스코드]
https://github.com/younminchan/kotlin-study/tree/main/DynamicLink_kotlin
질문 또는 궁굼한 부분은 댓글을 남겨주세요! 친절하게 답변드리겠습니다!
응원의 댓글은 저에게 큰 힘이 된답니다! :)
즐거운 하루되세요!
깃허브 보러 놀러오세요 👇 (맞팔환영)
https://github.com/younminchan
'🖥 Programming > 📱 Android (Kotlin)' 카테고리의 다른 글
[Android][kotlin] Firebase Crashlytics 연동방법 (0) | 2022.03.24 |
---|---|
[Android][kotlin] Firebase Android App 등록방법 (0) | 2022.03.24 |
[Android] Firebase 프로젝트 추가방법 (0) | 2022.03.24 |
[Android][kotlin] 상단 바[타이틀(Title), 바(Bar) , 탭(Tab)] 없애기 (0) | 2022.03.16 |
[Android][kotlin] Firebase DynamicLink (동적링크) 만들기 - 1편 (2) | 2022.02.28 |
[Android][kotlin] FCM(Firebase Cloud Message) 구현하기! - 2편 (2) | 2022.02.25 |
[Android][kotlin] FCM(Firebase Cloud Message) 구현하기! - 1편 (0) | 2022.02.24 |
[Andorid][kotlin] DeepLink 딥링크 알아보기 - 2편 (0) | 2022.02.22 |