본인인증 추가
This commit is contained in:
parent
8e0a5ccc91
commit
bf7a7d69a2
|
@ -49,6 +49,7 @@ android {
|
|||
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
|
||||
|
||||
buildConfigField 'String', 'BASE_URL', '"https://api.sodalive.net"'
|
||||
buildConfigField 'String', 'BOOTPAY_APP_ID', '"64c35be1d25985001dc50c87"'
|
||||
}
|
||||
|
||||
debug {
|
||||
|
@ -57,6 +58,7 @@ android {
|
|||
applicationIdSuffix '.debug'
|
||||
|
||||
buildConfigField 'String', 'BASE_URL', '"https://test-api.sodalive.net"'
|
||||
buildConfigField 'String', 'BOOTPAY_APP_ID', '"6242a7772701800023f68b2e"'
|
||||
}
|
||||
}
|
||||
compileOptions {
|
||||
|
@ -126,4 +128,7 @@ dependencies {
|
|||
implementation 'com.google.firebase:firebase-analytics-ktx'
|
||||
implementation 'com.google.firebase:firebase-messaging-ktx'
|
||||
implementation 'com.google.firebase:firebase-config-ktx'
|
||||
|
||||
// bootpay
|
||||
implementation "io.github.bootpay:android:4.3.4"
|
||||
}
|
||||
|
|
|
@ -11,6 +11,8 @@ import kr.co.vividnext.sodalive.live.recommend.LiveRecommendApi
|
|||
import kr.co.vividnext.sodalive.live.recommend.LiveRecommendRepository
|
||||
import kr.co.vividnext.sodalive.main.MainViewModel
|
||||
import kr.co.vividnext.sodalive.mypage.MyPageViewModel
|
||||
import kr.co.vividnext.sodalive.mypage.auth.AuthApi
|
||||
import kr.co.vividnext.sodalive.mypage.auth.AuthRepository
|
||||
import kr.co.vividnext.sodalive.network.TokenAuthenticator
|
||||
import kr.co.vividnext.sodalive.settings.event.EventApi
|
||||
import kr.co.vividnext.sodalive.settings.event.EventRepository
|
||||
|
@ -69,6 +71,7 @@ class AppDI(private val context: Context, isDebugMode: Boolean) {
|
|||
single { ApiBuilder().build(get(), LiveApi::class.java) }
|
||||
single { ApiBuilder().build(get(), EventApi::class.java) }
|
||||
single { ApiBuilder().build(get(), LiveRecommendApi::class.java) }
|
||||
single { ApiBuilder().build(get(), AuthApi::class.java) }
|
||||
}
|
||||
|
||||
private val viewModelModule = module {
|
||||
|
@ -78,7 +81,7 @@ class AppDI(private val context: Context, isDebugMode: Boolean) {
|
|||
viewModel { FindPasswordViewModel(get()) }
|
||||
viewModel { MainViewModel(get()) }
|
||||
viewModel { LiveViewModel(get(), get(), get()) }
|
||||
viewModel { MyPageViewModel(get()) }
|
||||
viewModel { MyPageViewModel(get(), get()) }
|
||||
}
|
||||
|
||||
private val repositoryModule = module {
|
||||
|
@ -87,6 +90,7 @@ class AppDI(private val context: Context, isDebugMode: Boolean) {
|
|||
factory { LiveRepository(get()) }
|
||||
factory { EventRepository(get()) }
|
||||
factory { LiveRecommendRepository(get()) }
|
||||
factory { AuthRepository(get()) }
|
||||
}
|
||||
|
||||
private val moduleList = listOf(
|
||||
|
|
|
@ -9,12 +9,16 @@ import android.webkit.URLUtil
|
|||
import android.widget.Toast
|
||||
import coil.load
|
||||
import coil.transform.CircleCropTransformation
|
||||
import com.google.gson.Gson
|
||||
import kr.co.vividnext.sodalive.R
|
||||
import kr.co.vividnext.sodalive.base.BaseFragment
|
||||
import kr.co.vividnext.sodalive.common.LoadingDialog
|
||||
import kr.co.vividnext.sodalive.common.SharedPreferenceManager
|
||||
import kr.co.vividnext.sodalive.databinding.FragmentMyBinding
|
||||
import kr.co.vividnext.sodalive.extensions.moneyFormat
|
||||
import kr.co.vividnext.sodalive.mypage.auth.Auth
|
||||
import kr.co.vividnext.sodalive.mypage.auth.AuthVerifyRequest
|
||||
import kr.co.vividnext.sodalive.mypage.auth.BootpayResponse
|
||||
import kr.co.vividnext.sodalive.settings.notification.MemberRole
|
||||
import org.koin.android.ext.android.inject
|
||||
|
||||
|
@ -50,7 +54,15 @@ class MyPageFragment : BaseFragment<FragmentMyBinding>(FragmentMyBinding::inflat
|
|||
|
||||
binding.rlServiceCenter.setOnClickListener {}
|
||||
|
||||
binding.tvAuth.setOnClickListener {}
|
||||
binding.tvAuth.setOnClickListener {
|
||||
Auth.auth(requireActivity(), requireContext()) {
|
||||
val bootpayResponse = Gson().fromJson(it, BootpayResponse::class.java)
|
||||
val request = AuthVerifyRequest(receiptId = bootpayResponse.data.receiptId)
|
||||
requireActivity().runOnUiThread {
|
||||
viewModel.authVerify(request)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (SharedPreferenceManager.role == MemberRole.CREATOR.name) {
|
||||
binding.tvMyChannel.visibility = View.VISIBLE
|
||||
|
|
|
@ -7,11 +7,14 @@ 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.mypage.auth.AuthRepository
|
||||
import kr.co.vividnext.sodalive.mypage.auth.AuthVerifyRequest
|
||||
import kr.co.vividnext.sodalive.user.UserRepository
|
||||
|
||||
class MyPageViewModel(
|
||||
private val userRepository: UserRepository
|
||||
): BaseViewModel() {
|
||||
private val userRepository: UserRepository,
|
||||
private val authRepository: AuthRepository
|
||||
) : BaseViewModel() {
|
||||
private val _toastLiveData = MutableLiveData<String?>()
|
||||
val toastLiveData: LiveData<String?>
|
||||
get() = _toastLiveData
|
||||
|
@ -56,4 +59,38 @@ class MyPageViewModel(
|
|||
)
|
||||
)
|
||||
}
|
||||
|
||||
fun authVerify(request: AuthVerifyRequest) {
|
||||
if (!_isLoading.value!!) {
|
||||
_isLoading.value = true
|
||||
}
|
||||
|
||||
compositeDisposable.add(
|
||||
authRepository.verify(request, "Bearer ${SharedPreferenceManager.token}")
|
||||
.subscribeOn(Schedulers.io())
|
||||
.observeOn(AndroidSchedulers.mainThread())
|
||||
.subscribe(
|
||||
{
|
||||
if (it.success) {
|
||||
getUserInfo()
|
||||
} 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("알 수 없는 오류가 발생했습니다. 다시 시도해 주세요.")
|
||||
}
|
||||
)
|
||||
)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,60 @@
|
|||
package kr.co.vividnext.sodalive.mypage.auth
|
||||
|
||||
import android.app.Activity
|
||||
import android.content.Context
|
||||
import android.widget.Toast
|
||||
import com.orhanobut.logger.Logger
|
||||
import kr.co.bootpay.android.Bootpay
|
||||
import kr.co.bootpay.android.events.BootpayEventListener
|
||||
import kr.co.bootpay.android.models.Payload
|
||||
import kr.co.vividnext.sodalive.BuildConfig
|
||||
import kr.co.vividnext.sodalive.common.SharedPreferenceManager
|
||||
import java.util.Date
|
||||
|
||||
object Auth {
|
||||
fun auth(activity: Activity, context: Context, verifyAuth: (String) -> Unit) {
|
||||
val authenticationId = "soda_${SharedPreferenceManager.userId}_" +
|
||||
"${SharedPreferenceManager.nickname}_${Date().time}"
|
||||
|
||||
val payload = Payload()
|
||||
.setApplicationId(BuildConfig.BOOTPAY_APP_ID)
|
||||
.setOrderName("본인인증")
|
||||
.setPg("다날")
|
||||
.setMethod("본인인증")
|
||||
.setAuthenticationId(authenticationId)
|
||||
.setPrice(0.toDouble())
|
||||
|
||||
Bootpay.init(activity, context)
|
||||
.setPayload(payload)
|
||||
.setEventListener(object : BootpayEventListener {
|
||||
override fun onCancel(data: String) {
|
||||
Logger.e("onCancel: $data")
|
||||
}
|
||||
|
||||
override fun onError(data: String) {
|
||||
Logger.e("onError: $data")
|
||||
Toast.makeText(activity, data, Toast.LENGTH_LONG).show()
|
||||
}
|
||||
|
||||
override fun onClose() {
|
||||
Logger.e("onClose")
|
||||
Bootpay.removePaymentWindow()
|
||||
}
|
||||
|
||||
override fun onIssued(data: String) {
|
||||
Logger.e("onIssued: $data")
|
||||
}
|
||||
|
||||
override fun onConfirm(data: String): Boolean {
|
||||
Logger.e("onConfirm: $data")
|
||||
return true
|
||||
}
|
||||
|
||||
override fun onDone(data: String) {
|
||||
Logger.e("onDone: $data")
|
||||
verifyAuth(data)
|
||||
Bootpay.removePaymentWindow()
|
||||
}
|
||||
}).requestAuthentication()
|
||||
}
|
||||
}
|
|
@ -0,0 +1,15 @@
|
|||
package kr.co.vividnext.sodalive.mypage.auth
|
||||
|
||||
import io.reactivex.rxjava3.core.Single
|
||||
import kr.co.vividnext.sodalive.common.ApiResponse
|
||||
import retrofit2.http.Body
|
||||
import retrofit2.http.Header
|
||||
import retrofit2.http.POST
|
||||
|
||||
interface AuthApi {
|
||||
@POST("/auth")
|
||||
fun verify(
|
||||
@Body request: AuthVerifyRequest,
|
||||
@Header("Authorization") authHeader: String
|
||||
): Single<ApiResponse<Any>>
|
||||
}
|
|
@ -0,0 +1,5 @@
|
|||
package kr.co.vividnext.sodalive.mypage.auth
|
||||
|
||||
class AuthRepository(private val api: AuthApi) {
|
||||
fun verify(request: AuthVerifyRequest, token: String) = api.verify(request, token)
|
||||
}
|
|
@ -0,0 +1,8 @@
|
|||
package kr.co.vividnext.sodalive.mypage.auth
|
||||
|
||||
import com.google.gson.annotations.SerializedName
|
||||
|
||||
data class AuthVerifyRequest(
|
||||
@SerializedName("receipt_id")
|
||||
val receiptId: String
|
||||
)
|
|
@ -0,0 +1,17 @@
|
|||
package kr.co.vividnext.sodalive.mypage.auth
|
||||
|
||||
import com.google.gson.annotations.SerializedName
|
||||
|
||||
data class BootpayResponse(
|
||||
@SerializedName("event")
|
||||
val event: String,
|
||||
@SerializedName("data")
|
||||
val data: BootpayResponseData
|
||||
) {
|
||||
data class BootpayResponseData(
|
||||
@SerializedName("receipt_id")
|
||||
val receiptId: String,
|
||||
@SerializedName("order_id")
|
||||
val orderId: String,
|
||||
)
|
||||
}
|
Loading…
Reference in New Issue