파이어베이스 다이나믹 링크 제거
This commit is contained in:
		@@ -122,6 +122,7 @@ class AudioContentDetailActivity : BaseActivity<ActivityAudioContentDetailBindin
 | 
			
		||||
        viewModel.getAudioContentDetail(audioContentId = audioContentId) { finish() }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @SuppressLint("UnspecifiedRegisterReceiverFlag")
 | 
			
		||||
    override fun onResume() {
 | 
			
		||||
        super.onResume()
 | 
			
		||||
        val intentFilter = IntentFilter(Constants.ACTION_AUDIO_CONTENT_RECEIVER)
 | 
			
		||||
@@ -775,20 +776,7 @@ class AudioContentDetailActivity : BaseActivity<ActivityAudioContentDetailBindin
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            binding.tvShare.visibility = View.VISIBLE
 | 
			
		||||
            binding.tvShare.setOnClickListener {
 | 
			
		||||
                viewModel.shareAudioContent(
 | 
			
		||||
                    audioContentId = audioContentId,
 | 
			
		||||
                    contentImage = response.coverImageUrl,
 | 
			
		||||
                    contentTitle = "${response.title} - ${response.creator.nickname}"
 | 
			
		||||
                ) {
 | 
			
		||||
                    val intent = Intent(Intent.ACTION_SEND)
 | 
			
		||||
                    intent.type = "text/plain"
 | 
			
		||||
                    intent.putExtra(Intent.EXTRA_TEXT, it)
 | 
			
		||||
 | 
			
		||||
                    val shareIntent = Intent.createChooser(intent, "오디오콘텐츠 공유")
 | 
			
		||||
                    startActivity(shareIntent)
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            binding.tvShare.setOnClickListener {}
 | 
			
		||||
        } else {
 | 
			
		||||
            binding.svActionButtons.visibility = View.GONE
 | 
			
		||||
            binding.llLike.visibility = View.GONE
 | 
			
		||||
 
 | 
			
		||||
@@ -1,16 +1,7 @@
 | 
			
		||||
package kr.co.vividnext.sodalive.audio_content.detail
 | 
			
		||||
 | 
			
		||||
import android.net.Uri
 | 
			
		||||
import androidx.core.net.toUri
 | 
			
		||||
import androidx.lifecycle.LiveData
 | 
			
		||||
import androidx.lifecycle.MutableLiveData
 | 
			
		||||
import com.google.firebase.dynamiclinks.ShortDynamicLink
 | 
			
		||||
import com.google.firebase.dynamiclinks.ktx.androidParameters
 | 
			
		||||
import com.google.firebase.dynamiclinks.ktx.dynamicLinks
 | 
			
		||||
import com.google.firebase.dynamiclinks.ktx.iosParameters
 | 
			
		||||
import com.google.firebase.dynamiclinks.ktx.shortLinkAsync
 | 
			
		||||
import com.google.firebase.dynamiclinks.ktx.socialMetaTagParameters
 | 
			
		||||
import com.google.firebase.ktx.Firebase
 | 
			
		||||
import com.orhanobut.logger.Logger
 | 
			
		||||
import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers
 | 
			
		||||
import io.reactivex.rxjava3.schedulers.Schedulers
 | 
			
		||||
@@ -139,72 +130,6 @@ class AudioContentDetailViewModel(
 | 
			
		||||
        )
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    fun registerNotification(contentId: Long, creatorId: Long) {
 | 
			
		||||
        isLoading.value = true
 | 
			
		||||
        compositeDisposable.add(
 | 
			
		||||
            repository.registerNotification(
 | 
			
		||||
                creatorId,
 | 
			
		||||
                "Bearer ${SharedPreferenceManager.token}"
 | 
			
		||||
            )
 | 
			
		||||
                .subscribeOn(Schedulers.io())
 | 
			
		||||
                .observeOn(AndroidSchedulers.mainThread())
 | 
			
		||||
                .subscribe(
 | 
			
		||||
                    {
 | 
			
		||||
                        if (it.success && it.data != null) {
 | 
			
		||||
                            getAudioContentDetail(contentId)
 | 
			
		||||
                        } else {
 | 
			
		||||
                            if (it.message != null) {
 | 
			
		||||
                                _toastLiveData.postValue(it.message)
 | 
			
		||||
                            } else {
 | 
			
		||||
                                _toastLiveData.postValue(
 | 
			
		||||
                                    "알 수 없는 오류가 발생했습니다. 다시 시도해 주세요."
 | 
			
		||||
                                )
 | 
			
		||||
                            }
 | 
			
		||||
                        }
 | 
			
		||||
                        isLoading.value = false
 | 
			
		||||
                    },
 | 
			
		||||
                    {
 | 
			
		||||
                        isLoading.value = false
 | 
			
		||||
                        it.message?.let { message -> Logger.e(message) }
 | 
			
		||||
                        _toastLiveData.postValue("알 수 없는 오류가 발생했습니다. 다시 시도해 주세요.")
 | 
			
		||||
                    }
 | 
			
		||||
                )
 | 
			
		||||
        )
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    fun unRegisterNotification(contentId: Long, creatorId: Long) {
 | 
			
		||||
        isLoading.value = true
 | 
			
		||||
        compositeDisposable.add(
 | 
			
		||||
            repository.unRegisterNotification(
 | 
			
		||||
                creatorId,
 | 
			
		||||
                "Bearer ${SharedPreferenceManager.token}"
 | 
			
		||||
            )
 | 
			
		||||
                .subscribeOn(Schedulers.io())
 | 
			
		||||
                .observeOn(AndroidSchedulers.mainThread())
 | 
			
		||||
                .subscribe(
 | 
			
		||||
                    {
 | 
			
		||||
                        if (it.success && it.data != null) {
 | 
			
		||||
                            getAudioContentDetail(contentId)
 | 
			
		||||
                        } else {
 | 
			
		||||
                            if (it.message != null) {
 | 
			
		||||
                                _toastLiveData.postValue(it.message)
 | 
			
		||||
                            } else {
 | 
			
		||||
                                _toastLiveData.postValue(
 | 
			
		||||
                                    "알 수 없는 오류가 발생했습니다. 다시 시도해 주세요."
 | 
			
		||||
                                )
 | 
			
		||||
                            }
 | 
			
		||||
                        }
 | 
			
		||||
                        isLoading.value = false
 | 
			
		||||
                    },
 | 
			
		||||
                    {
 | 
			
		||||
                        isLoading.value = false
 | 
			
		||||
                        it.message?.let { message -> Logger.e(message) }
 | 
			
		||||
                        _toastLiveData.postValue("알 수 없는 오류가 발생했습니다. 다시 시도해 주세요.")
 | 
			
		||||
                    }
 | 
			
		||||
                )
 | 
			
		||||
        )
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    fun toggleExpandDetail() {
 | 
			
		||||
        _isExpandDetail.value = !_isExpandDetail.value!!
 | 
			
		||||
    }
 | 
			
		||||
@@ -371,40 +296,6 @@ class AudioContentDetailViewModel(
 | 
			
		||||
        )
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    fun shareAudioContent(
 | 
			
		||||
        audioContentId: Long,
 | 
			
		||||
        contentImage: String,
 | 
			
		||||
        contentTitle: String,
 | 
			
		||||
        onSuccess: (String) -> Unit
 | 
			
		||||
    ) {
 | 
			
		||||
        isLoading.value = true
 | 
			
		||||
        Firebase.dynamicLinks.shortLinkAsync(ShortDynamicLink.Suffix.SHORT) {
 | 
			
		||||
            link = Uri.parse("https://sodalive.net/?audio_content_id=$audioContentId")
 | 
			
		||||
            domainUriPrefix = "https://sodalive.page.link"
 | 
			
		||||
            androidParameters { }
 | 
			
		||||
            iosParameters("kr.co.vividnext.sodalive") {
 | 
			
		||||
                appStoreId = "6461721697"
 | 
			
		||||
            }
 | 
			
		||||
            socialMetaTagParameters {
 | 
			
		||||
                title = contentTitle
 | 
			
		||||
                description = "지금 보이스온에서 이 콘텐츠 감상하기"
 | 
			
		||||
                imageUrl = contentImage.toUri()
 | 
			
		||||
            }
 | 
			
		||||
        }.addOnSuccessListener {
 | 
			
		||||
            val uri = it.shortLink
 | 
			
		||||
            if (uri != null) {
 | 
			
		||||
                val message = uri.toString()
 | 
			
		||||
                onSuccess(message)
 | 
			
		||||
            } else {
 | 
			
		||||
                _toastLiveData.postValue("공유링크를 생성하지 못했습니다.\n다시 시도해 주세요.")
 | 
			
		||||
            }
 | 
			
		||||
        }.addOnFailureListener {
 | 
			
		||||
            _toastLiveData.postValue("공유링크를 생성하지 못했습니다.\n다시 시도해 주세요.")
 | 
			
		||||
        }.addOnCompleteListener {
 | 
			
		||||
            isLoading.value = false
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    fun deleteAudioContent(audioContentId: Long, onSuccess: () -> Unit) {
 | 
			
		||||
        isLoading.value = true
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -116,16 +116,7 @@ class UserProfileActivity : BaseActivity<ActivityUserProfileBinding>(
 | 
			
		||||
                binding.ivMenu,
 | 
			
		||||
            )
 | 
			
		||||
        }
 | 
			
		||||
        binding.layoutUserProfile.ivShare.setOnClickListener {
 | 
			
		||||
            viewModel.shareChannel(userId = userId) {
 | 
			
		||||
                val intent = Intent(Intent.ACTION_SEND)
 | 
			
		||||
                intent.type = "text/plain"
 | 
			
		||||
                intent.putExtra(Intent.EXTRA_TEXT, it)
 | 
			
		||||
 | 
			
		||||
                val shareIntent = Intent.createChooser(intent, "채널 공유")
 | 
			
		||||
                startActivity(shareIntent)
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        binding.layoutUserProfile.ivShare.setOnClickListener {}
 | 
			
		||||
 | 
			
		||||
        setupLiveView()
 | 
			
		||||
        setupDonationView()
 | 
			
		||||
@@ -621,7 +612,7 @@ class UserProfileActivity : BaseActivity<ActivityUserProfileBinding>(
 | 
			
		||||
        binding.tvContentCount.text = activitySummary.contentCount.moneyFormat()
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @SuppressLint("NotifyDataSetChanged")
 | 
			
		||||
    @SuppressLint("NotifyDataSetChanged", "SetTextI18n")
 | 
			
		||||
    private fun setCheers(cheers: GetCheersResponse) {
 | 
			
		||||
        binding.layoutUserProfileFanTalk.etCheer.setText("")
 | 
			
		||||
        cheersAdapter.items.clear()
 | 
			
		||||
 
 | 
			
		||||
@@ -1,14 +1,7 @@
 | 
			
		||||
package kr.co.vividnext.sodalive.explorer.profile
 | 
			
		||||
 | 
			
		||||
import android.net.Uri
 | 
			
		||||
import androidx.lifecycle.LiveData
 | 
			
		||||
import androidx.lifecycle.MutableLiveData
 | 
			
		||||
import com.google.firebase.dynamiclinks.ShortDynamicLink
 | 
			
		||||
import com.google.firebase.dynamiclinks.ktx.androidParameters
 | 
			
		||||
import com.google.firebase.dynamiclinks.ktx.dynamicLinks
 | 
			
		||||
import com.google.firebase.dynamiclinks.ktx.iosParameters
 | 
			
		||||
import com.google.firebase.dynamiclinks.ktx.shortLinkAsync
 | 
			
		||||
import com.google.firebase.ktx.Firebase
 | 
			
		||||
import com.orhanobut.logger.Logger
 | 
			
		||||
import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers
 | 
			
		||||
import io.reactivex.rxjava3.schedulers.Schedulers
 | 
			
		||||
@@ -181,39 +174,6 @@ class UserProfileViewModel(
 | 
			
		||||
        )
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    fun unFollow(creatorId: Long) {
 | 
			
		||||
        _isLoading.value = true
 | 
			
		||||
        compositeDisposable.add(
 | 
			
		||||
            userRepository.creatorUnFollow(
 | 
			
		||||
                creatorId,
 | 
			
		||||
                "Bearer ${SharedPreferenceManager.token}"
 | 
			
		||||
            )
 | 
			
		||||
                .subscribeOn(Schedulers.io())
 | 
			
		||||
                .observeOn(AndroidSchedulers.mainThread())
 | 
			
		||||
                .subscribe(
 | 
			
		||||
                    {
 | 
			
		||||
                        if (it.success && it.data != null) {
 | 
			
		||||
                            getCreatorProfile(creatorId)
 | 
			
		||||
                        } else {
 | 
			
		||||
                            if (it.message != null) {
 | 
			
		||||
                                _toastLiveData.postValue(it.message)
 | 
			
		||||
                            } else {
 | 
			
		||||
                                _toastLiveData.postValue(
 | 
			
		||||
                                    "알 수 없는 오류가 발생했습니다. 다시 시도해 주세요."
 | 
			
		||||
                                )
 | 
			
		||||
                            }
 | 
			
		||||
                        }
 | 
			
		||||
                        _isLoading.value = false
 | 
			
		||||
                    },
 | 
			
		||||
                    {
 | 
			
		||||
                        _isLoading.value = false
 | 
			
		||||
                        it.message?.let { message -> Logger.e(message) }
 | 
			
		||||
                        _toastLiveData.postValue("알 수 없는 오류가 발생했습니다. 다시 시도해 주세요.")
 | 
			
		||||
                    }
 | 
			
		||||
                )
 | 
			
		||||
        )
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    fun writeCheers(parentCheersId: Long? = null, creatorId: Long, cheersContent: String) {
 | 
			
		||||
        if (cheersContent.isBlank()) {
 | 
			
		||||
            _toastLiveData.postValue("내용을 입력하세요")
 | 
			
		||||
@@ -306,27 +266,6 @@ class UserProfileViewModel(
 | 
			
		||||
        )
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    fun shareChannel(userId: Long, onSuccess: (String) -> Unit) {
 | 
			
		||||
        _isLoading.value = true
 | 
			
		||||
        Firebase.dynamicLinks.shortLinkAsync(ShortDynamicLink.Suffix.SHORT) {
 | 
			
		||||
            link = Uri.parse("https://sodalive.net/?channel_id=$userId")
 | 
			
		||||
            domainUriPrefix = "https://sodalive.page.link"
 | 
			
		||||
            androidParameters { }
 | 
			
		||||
            iosParameters("kr.co.vividnext.sodalive") {
 | 
			
		||||
                appStoreId = "6461721697"
 | 
			
		||||
            }
 | 
			
		||||
        }.addOnSuccessListener {
 | 
			
		||||
            val uri = it.shortLink
 | 
			
		||||
            if (uri != null) {
 | 
			
		||||
                onSuccess("보이스온 ${creatorNickname}님의 채널입니다.\n$uri")
 | 
			
		||||
            }
 | 
			
		||||
        }.addOnFailureListener {
 | 
			
		||||
            _toastLiveData.postValue("공유링크를 생성하지 못했습니다.\n다시 시도해 주세요.")
 | 
			
		||||
        }.addOnCompleteListener {
 | 
			
		||||
            _isLoading.value = false
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    fun userBlock(userId: Long) {
 | 
			
		||||
        _isLoading.value = true
 | 
			
		||||
        compositeDisposable.add(
 | 
			
		||||
 
 | 
			
		||||
@@ -1001,20 +1001,7 @@ class LiveRoomActivity : BaseActivity<ActivityLiveRoomBinding>(ActivityLiveRoomB
 | 
			
		||||
                binding.ivEdit.visibility = View.GONE
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            binding.ivShare.setOnClickListener {
 | 
			
		||||
                viewModel.shareRoomLink(
 | 
			
		||||
                    response.roomId,
 | 
			
		||||
                    response.isPrivateRoom,
 | 
			
		||||
                    response.password
 | 
			
		||||
                ) {
 | 
			
		||||
                    val intent = Intent(Intent.ACTION_SEND)
 | 
			
		||||
                    intent.type = "text/plain"
 | 
			
		||||
                    intent.putExtra(Intent.EXTRA_TEXT, it)
 | 
			
		||||
 | 
			
		||||
                    val shareIntent = Intent.createChooser(intent, "라이브 공유")
 | 
			
		||||
                    startActivity(shareIntent)
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            binding.ivShare.setOnClickListener {}
 | 
			
		||||
 | 
			
		||||
            if (response.creatorId == SharedPreferenceManager.userId) {
 | 
			
		||||
                binding.llViewUsers.visibility = View.VISIBLE
 | 
			
		||||
 
 | 
			
		||||
@@ -3,12 +3,6 @@ package kr.co.vividnext.sodalive.live.room
 | 
			
		||||
import android.net.Uri
 | 
			
		||||
import androidx.lifecycle.LiveData
 | 
			
		||||
import androidx.lifecycle.MutableLiveData
 | 
			
		||||
import com.google.firebase.dynamiclinks.ShortDynamicLink
 | 
			
		||||
import com.google.firebase.dynamiclinks.ktx.androidParameters
 | 
			
		||||
import com.google.firebase.dynamiclinks.ktx.dynamicLinks
 | 
			
		||||
import com.google.firebase.dynamiclinks.ktx.iosParameters
 | 
			
		||||
import com.google.firebase.dynamiclinks.ktx.shortLinkAsync
 | 
			
		||||
import com.google.firebase.ktx.Firebase
 | 
			
		||||
import com.google.gson.Gson
 | 
			
		||||
import com.orhanobut.logger.Logger
 | 
			
		||||
import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers
 | 
			
		||||
@@ -301,43 +295,6 @@ class LiveRoomViewModel(
 | 
			
		||||
        )
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    fun shareRoomLink(
 | 
			
		||||
        roomId: Long,
 | 
			
		||||
        isPrivateRoom: Boolean,
 | 
			
		||||
        password: String?,
 | 
			
		||||
        onSuccess: (String) -> Unit
 | 
			
		||||
    ) {
 | 
			
		||||
        _isLoading.value = true
 | 
			
		||||
        Firebase.dynamicLinks.shortLinkAsync(ShortDynamicLink.Suffix.SHORT) {
 | 
			
		||||
            link = Uri.parse("https://sodalive.net/?room_id=$roomId")
 | 
			
		||||
            domainUriPrefix = "https://sodalive.page.link"
 | 
			
		||||
            androidParameters { }
 | 
			
		||||
            iosParameters("kr.co.vividnext.sodalive") {
 | 
			
		||||
                appStoreId = "6461721697"
 | 
			
		||||
            }
 | 
			
		||||
        }.addOnSuccessListener {
 | 
			
		||||
            val uri = it.shortLink
 | 
			
		||||
            if (uri != null) {
 | 
			
		||||
                val message = if (isPrivateRoom) {
 | 
			
		||||
                    "${SharedPreferenceManager.nickname}님이 귀하를 " +
 | 
			
		||||
                        "보이스온의 비공개라이브에 초대하였습니다.\n" +
 | 
			
		||||
                        "※ 라이브 참여: $uri\n" +
 | 
			
		||||
                        "(입장 비밀번호 : $password)"
 | 
			
		||||
                } else {
 | 
			
		||||
                    "${SharedPreferenceManager.nickname}님이 귀하를 " +
 | 
			
		||||
                        "보이스온의 공개라이브에 초대하였습니다.\n" +
 | 
			
		||||
                        "※ 라이브 참여: $uri"
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                onSuccess(message)
 | 
			
		||||
            }
 | 
			
		||||
        }.addOnFailureListener {
 | 
			
		||||
            _toastLiveData.postValue("공유링크를 생성하지 못했습니다.\n다시 시도해 주세요.")
 | 
			
		||||
        }.addOnCompleteListener {
 | 
			
		||||
            _isLoading.value = false
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    fun creatorFollow(creatorId: Long, roomId: Long, isGetUserProfile: Boolean = false) {
 | 
			
		||||
        _isLoading.value = true
 | 
			
		||||
        compositeDisposable.add(
 | 
			
		||||
 
 | 
			
		||||
@@ -349,17 +349,5 @@ class LiveRoomDetailFragment(
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private fun shareRoom(response: GetRoomDetailResponse) {
 | 
			
		||||
        viewModel.shareRoomLink(
 | 
			
		||||
            response.roomId,
 | 
			
		||||
            response.isPrivateRoom,
 | 
			
		||||
            response.password
 | 
			
		||||
        ) {
 | 
			
		||||
            val intent = Intent(Intent.ACTION_SEND)
 | 
			
		||||
            intent.type = "text/plain"
 | 
			
		||||
            intent.putExtra(Intent.EXTRA_TEXT, it)
 | 
			
		||||
 | 
			
		||||
            val shareIntent = Intent.createChooser(intent, "라이브 공유")
 | 
			
		||||
            startActivity(shareIntent)
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -1,14 +1,7 @@
 | 
			
		||||
package kr.co.vividnext.sodalive.live.room.detail
 | 
			
		||||
 | 
			
		||||
import android.net.Uri
 | 
			
		||||
import androidx.lifecycle.LiveData
 | 
			
		||||
import androidx.lifecycle.MutableLiveData
 | 
			
		||||
import com.google.firebase.dynamiclinks.ShortDynamicLink
 | 
			
		||||
import com.google.firebase.dynamiclinks.ktx.androidParameters
 | 
			
		||||
import com.google.firebase.dynamiclinks.ktx.dynamicLinks
 | 
			
		||||
import com.google.firebase.dynamiclinks.ktx.iosParameters
 | 
			
		||||
import com.google.firebase.dynamiclinks.ktx.shortLinkAsync
 | 
			
		||||
import com.google.firebase.ktx.Firebase
 | 
			
		||||
import com.orhanobut.logger.Logger
 | 
			
		||||
import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers
 | 
			
		||||
import io.reactivex.rxjava3.schedulers.Schedulers
 | 
			
		||||
@@ -63,41 +56,4 @@ class LiveRoomDetailViewModel(private val repository: LiveRepository) : BaseView
 | 
			
		||||
                )
 | 
			
		||||
        )
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    fun shareRoomLink(
 | 
			
		||||
        roomId: Long,
 | 
			
		||||
        isPrivateRoom: Boolean,
 | 
			
		||||
        password: Int?,
 | 
			
		||||
        onSuccess: (String) -> Unit
 | 
			
		||||
    ) {
 | 
			
		||||
        _isLoading.value = true
 | 
			
		||||
        Firebase.dynamicLinks.shortLinkAsync(ShortDynamicLink.Suffix.SHORT) {
 | 
			
		||||
            link = Uri.parse("https://sodalive.net/?room_id=$roomId")
 | 
			
		||||
            domainUriPrefix = "https://sodalive.page.link"
 | 
			
		||||
            androidParameters { }
 | 
			
		||||
            iosParameters("kr.co.vividnext.sodalive") {
 | 
			
		||||
                appStoreId = "6461721697"
 | 
			
		||||
            }
 | 
			
		||||
        }.addOnSuccessListener {
 | 
			
		||||
            val uri = it.shortLink
 | 
			
		||||
            if (uri != null) {
 | 
			
		||||
                val message = if (isPrivateRoom) {
 | 
			
		||||
                    "${SharedPreferenceManager.nickname}님이 귀하를 " +
 | 
			
		||||
                        "보이스온의 비공개라이브에 초대하였습니다.\n" +
 | 
			
		||||
                        "※ 라이브 참여: $uri\n" +
 | 
			
		||||
                        "(입장 비밀번호 : $password)"
 | 
			
		||||
                } else {
 | 
			
		||||
                    "${SharedPreferenceManager.nickname}님이 귀하를 " +
 | 
			
		||||
                        "보이스온의 공개라이브에 초대하였습니다.\n" +
 | 
			
		||||
                        "※ 라이브 참여: $uri"
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                onSuccess(message)
 | 
			
		||||
            }
 | 
			
		||||
        }.addOnFailureListener {
 | 
			
		||||
            _toastLiveData.postValue("공유링크를 생성하지 못했습니다.\n다시 시도해 주세요.")
 | 
			
		||||
        }.addOnCompleteListener {
 | 
			
		||||
            _isLoading.value = false
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -9,10 +9,7 @@ import android.os.Looper
 | 
			
		||||
import android.widget.ImageView
 | 
			
		||||
import androidx.annotation.OptIn
 | 
			
		||||
import androidx.constraintlayout.widget.ConstraintLayout
 | 
			
		||||
import androidx.core.os.bundleOf
 | 
			
		||||
import androidx.media3.common.util.UnstableApi
 | 
			
		||||
import com.google.firebase.dynamiclinks.PendingDynamicLinkData
 | 
			
		||||
import com.google.firebase.dynamiclinks.ktx.dynamicLinks
 | 
			
		||||
import com.google.firebase.ktx.Firebase
 | 
			
		||||
import com.google.firebase.remoteconfig.ktx.get
 | 
			
		||||
import com.google.firebase.remoteconfig.ktx.remoteConfig
 | 
			
		||||
@@ -98,7 +95,7 @@ class SplashActivity : BaseActivity<ActivitySplashBinding>(ActivitySplashBinding
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
                } else {
 | 
			
		||||
                    checkFirebaseDynamicLink()
 | 
			
		||||
                    startNextActivity()
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
    }
 | 
			
		||||
@@ -121,10 +118,10 @@ class SplashActivity : BaseActivity<ActivitySplashBinding>(ActivitySplashBinding
 | 
			
		||||
            } else if (latestMajor == major && latestMinor == minor && latestPatch > patch) {
 | 
			
		||||
                showUpdateDialog(isEssential = false)
 | 
			
		||||
            } else {
 | 
			
		||||
                checkFirebaseDynamicLink()
 | 
			
		||||
                startNextActivity()
 | 
			
		||||
            }
 | 
			
		||||
        } else {
 | 
			
		||||
            checkFirebaseDynamicLink()
 | 
			
		||||
            startNextActivity()
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@@ -136,7 +133,7 @@ class SplashActivity : BaseActivity<ActivitySplashBinding>(ActivitySplashBinding
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        val cancelButtonClick = if (!isEssential) {
 | 
			
		||||
            { checkFirebaseDynamicLink() }
 | 
			
		||||
            { startNextActivity() }
 | 
			
		||||
        } else {
 | 
			
		||||
            null
 | 
			
		||||
        }
 | 
			
		||||
@@ -165,49 +162,7 @@ class SplashActivity : BaseActivity<ActivitySplashBinding>(ActivitySplashBinding
 | 
			
		||||
        ).show(screenWidth)
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private fun checkFirebaseDynamicLink() {
 | 
			
		||||
        Firebase.dynamicLinks
 | 
			
		||||
            .getDynamicLink(intent)
 | 
			
		||||
            .addOnSuccessListener(this) { getDynamicLinkSuccess(it) }
 | 
			
		||||
            .addOnFailureListener(this) { getDynamicLinkFailure() }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private fun getDynamicLinkSuccess(pendingDynamicLinkData: PendingDynamicLinkData?) {
 | 
			
		||||
        var deepLink: Uri? = null
 | 
			
		||||
        if (pendingDynamicLinkData != null) {
 | 
			
		||||
            deepLink = pendingDynamicLinkData.link
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        val extras = if (deepLink != null) {
 | 
			
		||||
            val roomIdString = deepLink.getQueryParameter("room_id")
 | 
			
		||||
            val channelIdString = deepLink.getQueryParameter("channel_id")
 | 
			
		||||
            val audioContentIdString = deepLink.getQueryParameter("audio_content_id")
 | 
			
		||||
 | 
			
		||||
            if (roomIdString != null) {
 | 
			
		||||
                bundleOf(
 | 
			
		||||
                    Constants.EXTRA_ROOM_ID to roomIdString.toLong()
 | 
			
		||||
                )
 | 
			
		||||
            } else if (channelIdString != null) {
 | 
			
		||||
                bundleOf(
 | 
			
		||||
                    Constants.EXTRA_USER_ID to channelIdString.toLong()
 | 
			
		||||
                )
 | 
			
		||||
            } else if (audioContentIdString != null) {
 | 
			
		||||
                bundleOf(
 | 
			
		||||
                    Constants.EXTRA_AUDIO_CONTENT_ID to audioContentIdString.toLong()
 | 
			
		||||
                )
 | 
			
		||||
            } else {
 | 
			
		||||
                null
 | 
			
		||||
            }
 | 
			
		||||
        } else if (intent.extras != null) {
 | 
			
		||||
            intent.extras
 | 
			
		||||
        } else {
 | 
			
		||||
            null
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        startNextActivity(extras = extras)
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private fun getDynamicLinkFailure() {
 | 
			
		||||
    private fun startNextActivity() {
 | 
			
		||||
        val extras = intent.getBundleExtra(Constants.EXTRA_DATA)
 | 
			
		||||
            ?: if (intent.extras != null) {
 | 
			
		||||
                intent.extras
 | 
			
		||||
@@ -215,10 +170,6 @@ class SplashActivity : BaseActivity<ActivitySplashBinding>(ActivitySplashBinding
 | 
			
		||||
                null
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
        startNextActivity(extras = extras)
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private fun startNextActivity(extras: Bundle? = null) {
 | 
			
		||||
        if (SharedPreferenceManager.isViewedOnboardingTutorial) {
 | 
			
		||||
            if (SharedPreferenceManager.token.isBlank()) {
 | 
			
		||||
                showLoginActivity(extras)
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user