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

- 파라미터 키, 값 각각 인코딩 적용
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"
minSdk 23
targetSdk 34
versionCode 148
versionCode 149
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.base.BaseViewModel
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.mypage.auth.AuthRepository
import kr.co.vividnext.sodalive.mypage.auth.AuthVerifyRequest
@ -302,13 +303,16 @@ class AudioContentDetailViewModel(
contentTitle: String,
onSuccess: (String) -> Unit
) {
val shareUrl = "https://voiceon.onelink.me/RkTm?" +
"af_dp=voiceon://" +
"&deep_link_value=content" +
"&deep_link_sub5=$audioContentId" +
"&af_og_title=$contentTitle" +
"&af_og_description=지금 보이스온에서 이 콘텐츠 감상하기" +
"&af_og_image=$contentImage"
val params = mapOf(
"af_dp" to "voiceon://",
"deep_link_value" to "content",
"deep_link_sub5" to "$audioContentId",
"af_og_title" to contentTitle,
"af_og_description" to "지금 보이스온에서 이 콘텐츠 감상하기",
"af_og_image" to contentImage
)
val shareUrl = Utils.createOneLinkUrl(params = params)
onSuccess(shareUrl)
}

View File

@ -1,5 +1,8 @@
package kr.co.vividnext.sodalive.common
import java.net.URLEncoder
import java.nio.charset.StandardCharsets
object Utils {
fun convertDurationToString(duration: Int, showHours: Boolean = true): String {
val durationSeconds = duration / 1000
@ -26,4 +29,13 @@ object Utils {
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 kr.co.vividnext.sodalive.base.BaseViewModel
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.profile.cheers.PutModifyCheersRequest
import kr.co.vividnext.sodalive.report.ReportRepository
@ -270,14 +271,15 @@ class UserProfileViewModel(
profileImage: String,
onSuccess: (String) -> Unit
) {
val shareUrl = "https://voiceon.onelink.me/RkTm?" +
"af_dp=voiceon://" +
"&deep_link_value=channel" +
"&deep_link_sub5=$userId" +
"&af_og_title=보이스온" +
"&af_og_description=보이스온 ${nickname}님의 채널입니다." +
"&af_og_image=$profileImage"
val params = mapOf(
"af_dp" to "voiceon://",
"deep_link_value" to "channel",
"deep_link_sub5" to "$userId",
"af_og_title" to "보이스온",
"af_og_description" to "보이스온 ${nickname}님의 채널입니다.",
"af_og_image" to profileImage
)
val shareUrl = Utils.createOneLinkUrl(params = params)
onSuccess("보이스온 ${nickname}님의 채널입니다.\n$shareUrl")
}

View File

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

View File

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