라이브, 콘텐츠, 채널 공유하기

- 파라미터 키, 값 각각 인코딩 적용
This commit is contained in:
klaus 2025-03-07 02:50:36 +09:00
parent 415383393a
commit 7885200af4
6 changed files with 55 additions and 29 deletions

View File

@ -35,7 +35,7 @@ android {
applicationId "kr.co.vividnext.sodalive" applicationId "kr.co.vividnext.sodalive"
minSdk 23 minSdk 23
targetSdk 34 targetSdk 34
versionCode 148 versionCode 149
versionName "1.30.0" versionName "1.30.0"
} }

View File

@ -10,6 +10,7 @@ import kr.co.vividnext.sodalive.audio_content.comment.AudioContentCommentReposit
import kr.co.vividnext.sodalive.audio_content.order.OrderType import kr.co.vividnext.sodalive.audio_content.order.OrderType
import kr.co.vividnext.sodalive.base.BaseViewModel import kr.co.vividnext.sodalive.base.BaseViewModel
import kr.co.vividnext.sodalive.common.SharedPreferenceManager import kr.co.vividnext.sodalive.common.SharedPreferenceManager
import kr.co.vividnext.sodalive.common.Utils
import kr.co.vividnext.sodalive.extensions.moneyFormat import kr.co.vividnext.sodalive.extensions.moneyFormat
import kr.co.vividnext.sodalive.mypage.auth.AuthRepository import kr.co.vividnext.sodalive.mypage.auth.AuthRepository
import kr.co.vividnext.sodalive.mypage.auth.AuthVerifyRequest import kr.co.vividnext.sodalive.mypage.auth.AuthVerifyRequest
@ -302,13 +303,16 @@ class AudioContentDetailViewModel(
contentTitle: String, contentTitle: String,
onSuccess: (String) -> Unit onSuccess: (String) -> Unit
) { ) {
val shareUrl = "https://voiceon.onelink.me/RkTm?" + val params = mapOf(
"af_dp=voiceon://" + "af_dp" to "voiceon://",
"&deep_link_value=content" + "deep_link_value" to "content",
"&deep_link_sub5=$audioContentId" + "deep_link_sub5" to "$audioContentId",
"&af_og_title=$contentTitle" + "af_og_title" to contentTitle,
"&af_og_description=지금 보이스온에서 이 콘텐츠 감상하기" + "af_og_description" to "지금 보이스온에서 이 콘텐츠 감상하기",
"&af_og_image=$contentImage" "af_og_image" to contentImage
)
val shareUrl = Utils.createOneLinkUrl(params = params)
onSuccess(shareUrl) onSuccess(shareUrl)
} }

View File

@ -1,5 +1,8 @@
package kr.co.vividnext.sodalive.common package kr.co.vividnext.sodalive.common
import java.net.URLEncoder
import java.nio.charset.StandardCharsets
object Utils { object Utils {
fun convertDurationToString(duration: Int, showHours: Boolean = true): String { fun convertDurationToString(duration: Int, showHours: Boolean = true): String {
val durationSeconds = duration / 1000 val durationSeconds = duration / 1000
@ -26,4 +29,13 @@ object Utils {
return 1000 * (hours * 3600 + minutes * 60 + seconds) return 1000 * (hours * 3600 + minutes * 60 + seconds)
} }
fun createOneLinkUrl(params: Map<String, String>): String {
val encodedParams = params.map { (key, value) ->
"${URLEncoder.encode(key, StandardCharsets.UTF_8.toString())}=" +
URLEncoder.encode(value, StandardCharsets.UTF_8.toString())
}.joinToString("&")
return "https://voiceon.onelink.me/RkTm?$encodedParams"
}
} }

View File

@ -7,6 +7,7 @@ import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers
import io.reactivex.rxjava3.schedulers.Schedulers import io.reactivex.rxjava3.schedulers.Schedulers
import kr.co.vividnext.sodalive.base.BaseViewModel import kr.co.vividnext.sodalive.base.BaseViewModel
import kr.co.vividnext.sodalive.common.SharedPreferenceManager import kr.co.vividnext.sodalive.common.SharedPreferenceManager
import kr.co.vividnext.sodalive.common.Utils
import kr.co.vividnext.sodalive.explorer.ExplorerRepository import kr.co.vividnext.sodalive.explorer.ExplorerRepository
import kr.co.vividnext.sodalive.explorer.profile.cheers.PutModifyCheersRequest import kr.co.vividnext.sodalive.explorer.profile.cheers.PutModifyCheersRequest
import kr.co.vividnext.sodalive.report.ReportRepository import kr.co.vividnext.sodalive.report.ReportRepository
@ -270,14 +271,15 @@ class UserProfileViewModel(
profileImage: String, profileImage: String,
onSuccess: (String) -> Unit onSuccess: (String) -> Unit
) { ) {
val shareUrl = "https://voiceon.onelink.me/RkTm?" + val params = mapOf(
"af_dp=voiceon://" + "af_dp" to "voiceon://",
"&deep_link_value=channel" + "deep_link_value" to "channel",
"&deep_link_sub5=$userId" + "deep_link_sub5" to "$userId",
"&af_og_title=보이스온" + "af_og_title" to "보이스온",
"&af_og_description=보이스온 ${nickname}님의 채널입니다." + "af_og_description" to "보이스온 ${nickname}님의 채널입니다.",
"&af_og_image=$profileImage" "af_og_image" to profileImage
)
val shareUrl = Utils.createOneLinkUrl(params = params)
onSuccess("보이스온 ${nickname}님의 채널입니다.\n$shareUrl") onSuccess("보이스온 ${nickname}님의 채널입니다.\n$shareUrl")
} }

View File

@ -11,6 +11,7 @@ import kotlinx.coroutines.sync.Mutex
import kotlinx.coroutines.sync.withLock import kotlinx.coroutines.sync.withLock
import kr.co.vividnext.sodalive.base.BaseViewModel import kr.co.vividnext.sodalive.base.BaseViewModel
import kr.co.vividnext.sodalive.common.SharedPreferenceManager import kr.co.vividnext.sodalive.common.SharedPreferenceManager
import kr.co.vividnext.sodalive.common.Utils
import kr.co.vividnext.sodalive.live.LiveRepository import kr.co.vividnext.sodalive.live.LiveRepository
import kr.co.vividnext.sodalive.live.room.donation.GetLiveRoomDonationStatusResponse import kr.co.vividnext.sodalive.live.room.donation.GetLiveRoomDonationStatusResponse
import kr.co.vividnext.sodalive.live.room.donation.LiveRoomDonationResponse import kr.co.vividnext.sodalive.live.room.donation.LiveRoomDonationResponse
@ -302,13 +303,16 @@ class LiveRoomViewModel(
coverImage: String, coverImage: String,
onSuccess: (String) -> Unit onSuccess: (String) -> Unit
) { ) {
val shareUrl = "https://voiceon.onelink.me/RkTm?" + val params = mapOf(
"af_dp=voiceon://" + "af_dp" to "voiceon://",
"&deep_link_value=live" + "deep_link_value" to "live",
"&deep_link_sub5=$roomId" + "deep_link_sub5" to "$roomId",
"&af_og_title=보이스온" + "af_og_title" to "보이스온",
"&af_og_description=지금 보이스온에서 라이브 참여하기" + "af_og_description" to "지금 보이스온에서 라이브 참여하기",
"&af_og_image=$coverImage" "af_og_image" to coverImage
)
val shareUrl = Utils.createOneLinkUrl(params = params)
val message = if (isPrivateRoom) { val message = if (isPrivateRoom) {
"${SharedPreferenceManager.nickname}님이 귀하를 " + "${SharedPreferenceManager.nickname}님이 귀하를 " +

View File

@ -7,6 +7,7 @@ import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers
import io.reactivex.rxjava3.schedulers.Schedulers import io.reactivex.rxjava3.schedulers.Schedulers
import kr.co.vividnext.sodalive.base.BaseViewModel import kr.co.vividnext.sodalive.base.BaseViewModel
import kr.co.vividnext.sodalive.common.SharedPreferenceManager import kr.co.vividnext.sodalive.common.SharedPreferenceManager
import kr.co.vividnext.sodalive.common.Utils
import kr.co.vividnext.sodalive.live.LiveRepository import kr.co.vividnext.sodalive.live.LiveRepository
class LiveRoomDetailViewModel(private val repository: LiveRepository) : BaseViewModel() { class LiveRoomDetailViewModel(private val repository: LiveRepository) : BaseViewModel() {
@ -63,12 +64,15 @@ class LiveRoomDetailViewModel(private val repository: LiveRepository) : BaseView
password: Int?, password: Int?,
onSuccess: (String) -> Unit onSuccess: (String) -> Unit
) { ) {
val shareUrl = "https://voiceon.onelink.me/RkTm?" + val params = mapOf(
"af_dp=voiceon://" + "af_dp" to "voiceon://",
"&deep_link_value=live" + "deep_link_value" to "live",
"&deep_link_sub5=$roomId" + "deep_link_sub5" to "$roomId",
"&af_og_title=보이스온" + "af_og_title" to "보이스온",
"&af_og_description=지금 보이스온에서 라이브 참여하기" "af_og_description" to "지금 보이스온에서 라이브 참여하기"
)
val shareUrl = Utils.createOneLinkUrl(params = params)
val message = if (isPrivateRoom) { val message = if (isPrivateRoom) {
"${SharedPreferenceManager.nickname}님이 귀하를 " + "${SharedPreferenceManager.nickname}님이 귀하를 " +