feat: add terms and conditions
This commit is contained in:
@@ -28,6 +28,7 @@ import com.approagency.pharmacy.domain.usecase.SearchDrugsYabUseCase
|
||||
import com.approagency.pharmacy.domain.usecase.SearchTestsUseCase
|
||||
import com.approagency.pharmacy.presentation.account.AccountSheetController
|
||||
import com.approagency.pharmacy.presentation.account.OtpAutoFillBus
|
||||
import com.approagency.pharmacy.presentation.legal.TermsController
|
||||
import com.approagency.pharmacy.presentation.viewModel.AccountViewModel
|
||||
import com.approagency.pharmacy.presentation.viewModel.DrugDetailViewModel
|
||||
import com.approagency.pharmacy.presentation.viewModel.HomeViewModel
|
||||
@@ -191,6 +192,9 @@ val appModule= module {
|
||||
// پلِ تحویل کدِ خواندهشده از پیامک به شیت ورود
|
||||
single { OtpAutoFillBus() }
|
||||
|
||||
// کنترلر نمایش صفحهٔ شرایط و قوانین
|
||||
single { TermsController() }
|
||||
|
||||
viewModel {
|
||||
AccountViewModel(get(), get(), get())
|
||||
}
|
||||
|
||||
@@ -11,7 +11,9 @@ import androidx.compose.material3.MaterialTheme
|
||||
import androidx.compose.material3.Text
|
||||
import androidx.compose.material3.TopAppBar
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.ui.res.stringResource
|
||||
import androidx.compose.ui.text.style.TextAlign
|
||||
import com.approagency.pharmacy.R
|
||||
import com.approagency.pharmacy.data.local.AccountState
|
||||
|
||||
/**
|
||||
@@ -51,7 +53,7 @@ fun AccountAppBar(
|
||||
)
|
||||
}
|
||||
} else {
|
||||
Text(text = "دارویاب", style = MaterialTheme.typography.titleMedium)
|
||||
Text(text = stringResource(R.string.app_name), style = MaterialTheme.typography.titleMedium)
|
||||
}
|
||||
},
|
||||
actions = {
|
||||
|
||||
@@ -23,6 +23,8 @@ import com.approagency.pharmacy.presentation.account.AccountDrawer
|
||||
import com.approagency.pharmacy.presentation.account.AccountSheet
|
||||
import com.approagency.pharmacy.presentation.account.AccountSheetController
|
||||
import com.approagency.pharmacy.presentation.common.ConfirmBottomSheet
|
||||
import com.approagency.pharmacy.presentation.legal.TermsController
|
||||
import com.approagency.pharmacy.presentation.legal.TermsDialog
|
||||
import kotlinx.coroutines.launch
|
||||
import org.koin.compose.koinInject
|
||||
|
||||
@@ -34,10 +36,12 @@ fun MainContainer(
|
||||
) {
|
||||
val session: SessionManager = koinInject()
|
||||
val sheetController: AccountSheetController = koinInject()
|
||||
val termsController: TermsController = koinInject()
|
||||
val authRepository: AuthRepository = koinInject()
|
||||
|
||||
val account by session.account.collectAsState()
|
||||
val sheetVisible by sheetController.visible.collectAsState()
|
||||
val termsVisible by termsController.visible.collectAsState()
|
||||
val themeMode by session.themeMode.collectAsState()
|
||||
val fontScale by session.fontScale.collectAsState()
|
||||
|
||||
@@ -62,6 +66,10 @@ fun MainContainer(
|
||||
onThemeModeChange = { session.setThemeMode(it) },
|
||||
fontScale = fontScale,
|
||||
onFontScaleChange = { session.setFontScale(it) },
|
||||
onShowTerms = {
|
||||
scope.launch { drawerState.close() }
|
||||
termsController.show()
|
||||
},
|
||||
onLogout = { showLogoutConfirm = true }
|
||||
)
|
||||
}
|
||||
@@ -86,6 +94,10 @@ fun MainContainer(
|
||||
AccountSheet(onDismiss = { sheetController.hide() })
|
||||
}
|
||||
|
||||
if (termsVisible) {
|
||||
TermsDialog(onDismiss = { termsController.hide() })
|
||||
}
|
||||
|
||||
if (showLogoutConfirm) {
|
||||
ConfirmBottomSheet(
|
||||
title = "خروج از حساب",
|
||||
|
||||
@@ -16,6 +16,7 @@ import androidx.compose.foundation.layout.size
|
||||
import androidx.compose.foundation.layout.width
|
||||
import androidx.compose.foundation.shape.CircleShape
|
||||
import androidx.compose.material.icons.Icons
|
||||
import androidx.compose.material.icons.automirrored.filled.Article
|
||||
import androidx.compose.material.icons.automirrored.filled.Logout
|
||||
import androidx.compose.material.icons.filled.BrightnessAuto
|
||||
import androidx.compose.material.icons.filled.CalendarMonth
|
||||
@@ -35,6 +36,7 @@ import androidx.compose.material3.SegmentedButtonDefaults
|
||||
import androidx.compose.material3.SingleChoiceSegmentedButtonRow
|
||||
import androidx.compose.material3.Surface
|
||||
import androidx.compose.material3.Text
|
||||
import androidx.compose.material3.TextButton
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.runtime.CompositionLocalProvider
|
||||
import androidx.compose.ui.Alignment
|
||||
@@ -65,6 +67,7 @@ fun AccountDrawer(
|
||||
onThemeModeChange: (ThemeMode) -> Unit,
|
||||
fontScale: FontScale,
|
||||
onFontScaleChange: (FontScale) -> Unit,
|
||||
onShowTerms: () -> Unit,
|
||||
onLogout: () -> Unit
|
||||
) {
|
||||
ModalDrawerSheet(
|
||||
@@ -138,7 +141,26 @@ fun AccountDrawer(
|
||||
Spacer(Modifier.height(MaterialTheme.dime.sm))
|
||||
FontScaleSelector(selected = fontScale, onSelect = onFontScaleChange)
|
||||
|
||||
Spacer(Modifier.height(MaterialTheme.dime.xl))
|
||||
Spacer(Modifier.height(MaterialTheme.dime.lg))
|
||||
|
||||
TextButton(
|
||||
onClick = onShowTerms,
|
||||
modifier = Modifier.fillMaxWidth()
|
||||
) {
|
||||
Icon(
|
||||
imageVector = Icons.AutoMirrored.Filled.Article,
|
||||
contentDescription = null,
|
||||
tint = MaterialTheme.colorScheme.onSurfaceVariant
|
||||
)
|
||||
Spacer(Modifier.width(MaterialTheme.dime.sm))
|
||||
Text(
|
||||
text = "شرایط و قوانین",
|
||||
color = MaterialTheme.colorScheme.onSurface,
|
||||
modifier = Modifier.weight(1f)
|
||||
)
|
||||
}
|
||||
|
||||
Spacer(Modifier.height(MaterialTheme.dime.md))
|
||||
|
||||
if (account.isLoggedIn) {
|
||||
OutlinedButton(
|
||||
|
||||
@@ -35,6 +35,7 @@ import androidx.compose.ui.unit.dp
|
||||
import com.approagency.pharmacy.presentation.common.CustomModalBottomSheet
|
||||
import com.approagency.pharmacy.presentation.common.OtpTextField
|
||||
import com.approagency.pharmacy.presentation.common.PrimaryButton
|
||||
import com.approagency.pharmacy.presentation.legal.TermsController
|
||||
import com.approagency.pharmacy.presentation.viewModel.AccountPhase
|
||||
import com.approagency.pharmacy.presentation.viewModel.AccountViewModel
|
||||
import com.vada.caller.ui.theme.dime
|
||||
@@ -51,6 +52,7 @@ fun AccountSheet(
|
||||
val account by viewModel.account.collectAsState()
|
||||
val activity = LocalContext.current as? Activity
|
||||
val otpAutoFillBus: OtpAutoFillBus = koinInject()
|
||||
val termsController: TermsController = koinInject()
|
||||
|
||||
LaunchedEffect(Unit) { viewModel.onSheetOpened() }
|
||||
|
||||
@@ -109,6 +111,7 @@ fun AccountSheet(
|
||||
}
|
||||
Spacer(Modifier.height(MaterialTheme.dime.md))
|
||||
PrimaryButton(text = "ارسال کد", isLoading = ui.busy, onClick = { viewModel.sendOtp() })
|
||||
TermsConsentNote(onShowTerms = { termsController.show() })
|
||||
}
|
||||
|
||||
AccountPhase.EnterOtp -> {
|
||||
@@ -199,3 +202,15 @@ private fun SheetTitle(text: String) {
|
||||
Text(text = text, style = MaterialTheme.typography.titleLarge, fontWeight = FontWeight.Bold)
|
||||
Spacer(Modifier.height(MaterialTheme.dime.xs))
|
||||
}
|
||||
|
||||
/** لینکِ «شرایط و قوانین» زیر فرمِ ورود (برای دسترسی و بازبینیِ فروشگاه). */
|
||||
@Composable
|
||||
private fun TermsConsentNote(onShowTerms: () -> Unit) {
|
||||
TextButton(onClick = onShowTerms, modifier = Modifier.fillMaxWidth()) {
|
||||
Text(
|
||||
text = "با ادامه، شرایط و قوانین را میپذیرید",
|
||||
style = MaterialTheme.typography.labelMedium,
|
||||
color = MaterialTheme.colorScheme.primary
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,100 @@
|
||||
package com.approagency.pharmacy.presentation.legal
|
||||
|
||||
/** یک بخش از سند شرایط و قوانین. */
|
||||
data class LegalSection(
|
||||
val title: String,
|
||||
val items: List<String>
|
||||
)
|
||||
|
||||
/** محتوای شرایط و قوانینِ اپلیکیشن داروچی (برای نمایش درونبرنامهای). */
|
||||
object AppLegal {
|
||||
|
||||
const val LAST_UPDATED = "۱۴۰۵/۰۳/۲۴"
|
||||
const val SUPPORT_EMAIL = "approagency@gmail.com"
|
||||
|
||||
const val INTRO =
|
||||
"استفاده از اپلیکیشن «داروچی» (که از این پس «برنامه» نامیده میشود) بهمنزلهٔ " +
|
||||
"مطالعه و پذیرشِ کاملِ شرایط و قوانین زیر است. در صورتی که با هر بخشی از این " +
|
||||
"قوانین موافق نیستید، لطفاً از برنامه استفاده نکنید."
|
||||
|
||||
val sections: List<LegalSection> = listOf(
|
||||
LegalSection(
|
||||
title = "۱. معرفی خدمات",
|
||||
items = listOf(
|
||||
"برنامه ابزاری اطلاعرسانی است که امکاناتِ جستوجوی دارو و مشاهدهٔ اطلاعات دارویی، مشاهدهٔ موجودی دارو در داروخانهها و مشاهدهٔ اطلاعات آزمایشهای پزشکی را فراهم میکند.",
|
||||
"این خدمات صرفاً جنبهٔ آموزشی و اطلاعرسانی دارند."
|
||||
)
|
||||
),
|
||||
LegalSection(
|
||||
title = "۲. سلب مسئولیت پزشکی (بسیار مهم)",
|
||||
items = listOf(
|
||||
"اطلاعاتِ ارائهشده در برنامه جایگزینِ مشاورهٔ پزشک، داروساز یا کادر درمان نیست و نباید مبنای تشخیص، تجویز یا قطع/شروع مصرف دارو قرار گیرد.",
|
||||
"مصرفِ هر دارو باید زیر نظر پزشک یا داروساز و مطابق نسخه و دستور ایشان انجام شود.",
|
||||
"اطلاعاتِ دارویی ممکن است کامل، بهروز یا بدون خطا نباشد و مسئولیتِ استفاده از آن بر عهدهٔ کاربر است.",
|
||||
"موجودیِ نمایشدادهشدهٔ داروها بر اساس دادههای منابعِ ثالث است و پیش از مراجعه باید از داروخانه تأیید شود.",
|
||||
"در شرایطِ اورژانسی یا بروزِ عوارض، فوراً به پزشک یا اورژانس مراجعه کنید."
|
||||
)
|
||||
),
|
||||
LegalSection(
|
||||
title = "۳. حساب کاربری و ورود",
|
||||
items = listOf(
|
||||
"ورود به برنامه از طریق شماره موبایل و کدِ یکبارمصرف (OTP) انجام میشود.",
|
||||
"مسئولیتِ حفظِ شماره موبایل، دستگاه و کدِ تأیید بر عهدهٔ کاربر است.",
|
||||
"کاربر موظف است اطلاعاتِ صحیح ارائه دهد و حساب را در اختیار دیگران قرار ندهد."
|
||||
)
|
||||
),
|
||||
LegalSection(
|
||||
title = "۴. جستوجوی رایگان، اشتراک و پرداخت",
|
||||
items = listOf(
|
||||
"برنامه تعدادی جستوجوی رایگان در اختیار کاربر قرار میدهد؛ پس از پایانِ سهمیهٔ رایگان، برای استفادهٔ نامحدود تهیهٔ اشتراک لازم است.",
|
||||
"خرید و پرداختِ اشتراک از طریق درگاهِ پرداختِ درونبرنامهایِ فروشگاه (کافهبازار) انجام میشود و تابعِ قوانینِ همان فروشگاه است.",
|
||||
"قیمت و مدتِ اشتراک پیش از خرید به کاربر نمایش داده میشود.",
|
||||
"بازگشتِ وجه تابعِ سیاستهای فروشگاهِ کافهبازار است و از طریق همان فروشگاه پیگیری میشود.",
|
||||
"در صورتی که پس از پرداختِ موفق اشتراک فعال نشد، با پشتیبانیِ ما تماس بگیرید."
|
||||
)
|
||||
),
|
||||
LegalSection(
|
||||
title = "۵. حریم خصوصی و دادهها",
|
||||
items = listOf(
|
||||
"برای ارائهٔ خدمات، حداقلِ اطلاعاتِ لازم (از جمله شماره موبایل و وضعیتِ اشتراک) دریافت و نگهداری میشود.",
|
||||
"اطلاعاتِ خرید (توکنِ خرید) صرفاً برای فعالسازیِ اشتراک به سرور ارسال میشود.",
|
||||
"اطلاعاتِ کاربران بدون رضایتِ ایشان در اختیارِ اشخاصِ ثالثِ غیرمرتبط قرار نمیگیرد، مگر در مواردی که قانون الزام کند."
|
||||
)
|
||||
),
|
||||
LegalSection(
|
||||
title = "۶. تعهدات کاربر",
|
||||
items = listOf(
|
||||
"استفاده از برنامه صرفاً برای اهدافِ قانونی و شخصی.",
|
||||
"ایجادنکردنِ اخلال در عملکردِ برنامه و خودداری از مهندسیِ معکوس یا دورزدنِ محدودیتها.",
|
||||
"بازنشر یا تجاریسازیِ محتوای برنامه بدون اجازه ممنوع است."
|
||||
)
|
||||
),
|
||||
LegalSection(
|
||||
title = "۷. مالکیت فکری",
|
||||
items = listOf(
|
||||
"تمامِ حقوقِ مربوط به برنامه، نام، نشان، رابط کاربری و محتوای آن متعلق به مالکِ برنامه است و هرگونه استفادهٔ غیرمجاز پیگردِ قانونی دارد."
|
||||
)
|
||||
),
|
||||
LegalSection(
|
||||
title = "۸. محدودیت مسئولیت",
|
||||
items = listOf(
|
||||
"برنامه «همانگونه که هست» ارائه میشود و تضمینی نسبت به بینقص بودن، دردسترس بودنِ دائمی یا صحتِ کاملِ اطلاعات داده نمیشود.",
|
||||
"مالکِ برنامه در قبالِ خساراتِ مستقیم یا غیرمستقیمِ ناشی از استفاده یا اتکا به اطلاعاتِ برنامه مسئولیتی نمیپذیرد."
|
||||
)
|
||||
),
|
||||
LegalSection(
|
||||
title = "۹. تعلیق، تغییرات و قانونِ حاکم",
|
||||
items = listOf(
|
||||
"در صورتِ نقضِ این قوانین، دسترسیِ کاربر ممکن است محدود یا مسدود شود.",
|
||||
"این شرایط ممکن است بهروزرسانی شود و ادامهٔ استفاده بهمنزلهٔ پذیرشِ تغییرات است.",
|
||||
"این شرایط تابعِ قوانینِ جمهوریِ اسلامیِ ایران است."
|
||||
)
|
||||
),
|
||||
LegalSection(
|
||||
title = "۱۰. ارتباط با ما",
|
||||
items = listOf(
|
||||
"در صورتِ هرگونه پرسش یا مشکل از طریقِ ایمیلِ $SUPPORT_EMAIL با ما در تماس باشید."
|
||||
)
|
||||
)
|
||||
)
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
package com.approagency.pharmacy.presentation.legal
|
||||
|
||||
import kotlinx.coroutines.flow.MutableStateFlow
|
||||
import kotlinx.coroutines.flow.StateFlow
|
||||
import kotlinx.coroutines.flow.asStateFlow
|
||||
|
||||
/**
|
||||
* کنترلر سراسریِ نمایشِ صفحهٔ «شرایط و قوانین».
|
||||
* هم کشوی کناری و هم شیتِ ورود میتوانند آن را با [show] باز کنند.
|
||||
*/
|
||||
class TermsController {
|
||||
private val _visible = MutableStateFlow(false)
|
||||
val visible: StateFlow<Boolean> = _visible.asStateFlow()
|
||||
|
||||
fun show() { _visible.value = true }
|
||||
fun hide() { _visible.value = false }
|
||||
}
|
||||
@@ -0,0 +1,97 @@
|
||||
package com.approagency.pharmacy.presentation.legal
|
||||
|
||||
import androidx.compose.foundation.layout.Arrangement
|
||||
import androidx.compose.foundation.layout.Column
|
||||
import androidx.compose.foundation.layout.Spacer
|
||||
import androidx.compose.foundation.layout.fillMaxSize
|
||||
import androidx.compose.foundation.layout.fillMaxWidth
|
||||
import androidx.compose.foundation.layout.height
|
||||
import androidx.compose.foundation.layout.padding
|
||||
import androidx.compose.foundation.rememberScrollState
|
||||
import androidx.compose.foundation.verticalScroll
|
||||
import androidx.compose.material.icons.Icons
|
||||
import androidx.compose.material.icons.filled.Close
|
||||
import androidx.compose.material3.ExperimentalMaterial3Api
|
||||
import androidx.compose.material3.Icon
|
||||
import androidx.compose.material3.IconButton
|
||||
import androidx.compose.material3.MaterialTheme
|
||||
import androidx.compose.material3.Surface
|
||||
import androidx.compose.material3.Text
|
||||
import androidx.compose.material3.TopAppBar
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.runtime.CompositionLocalProvider
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.platform.LocalLayoutDirection
|
||||
import androidx.compose.ui.text.font.FontWeight
|
||||
import androidx.compose.ui.unit.LayoutDirection
|
||||
import androidx.compose.ui.window.Dialog
|
||||
import androidx.compose.ui.window.DialogProperties
|
||||
import com.vada.caller.ui.theme.dime
|
||||
|
||||
/** صفحهٔ تمامصفحهٔ «شرایط و قوانین». */
|
||||
@OptIn(ExperimentalMaterial3Api::class)
|
||||
@Composable
|
||||
fun TermsDialog(onDismiss: () -> Unit) {
|
||||
Dialog(
|
||||
onDismissRequest = onDismiss,
|
||||
properties = DialogProperties(usePlatformDefaultWidth = false)
|
||||
) {
|
||||
Surface(modifier = Modifier.fillMaxSize(), color = MaterialTheme.colorScheme.surface) {
|
||||
CompositionLocalProvider(LocalLayoutDirection provides LayoutDirection.Rtl) {
|
||||
Column(modifier = Modifier.fillMaxSize()) {
|
||||
TopAppBar(
|
||||
title = {
|
||||
Text(
|
||||
"شرایط و قوانین",
|
||||
style = MaterialTheme.typography.titleMedium,
|
||||
fontWeight = FontWeight.Bold
|
||||
)
|
||||
},
|
||||
navigationIcon = {
|
||||
IconButton(onClick = onDismiss) {
|
||||
Icon(Icons.Filled.Close, contentDescription = "بستن")
|
||||
}
|
||||
}
|
||||
)
|
||||
|
||||
Column(
|
||||
modifier = Modifier
|
||||
.fillMaxWidth()
|
||||
.verticalScroll(rememberScrollState())
|
||||
.padding(MaterialTheme.dime.lg),
|
||||
verticalArrangement = Arrangement.spacedBy(MaterialTheme.dime.md)
|
||||
) {
|
||||
Text(
|
||||
text = "آخرین بهروزرسانی: ${AppLegal.LAST_UPDATED}",
|
||||
style = MaterialTheme.typography.labelSmall,
|
||||
color = MaterialTheme.colorScheme.onSurfaceVariant
|
||||
)
|
||||
Text(
|
||||
text = AppLegal.INTRO,
|
||||
style = MaterialTheme.typography.bodyMedium,
|
||||
color = MaterialTheme.colorScheme.onSurfaceVariant
|
||||
)
|
||||
|
||||
AppLegal.sections.forEach { section ->
|
||||
Spacer(Modifier.height(MaterialTheme.dime.xs))
|
||||
Text(
|
||||
text = section.title,
|
||||
style = MaterialTheme.typography.titleSmall,
|
||||
fontWeight = FontWeight.Bold,
|
||||
color = MaterialTheme.colorScheme.primary
|
||||
)
|
||||
section.items.forEach { item ->
|
||||
Text(
|
||||
text = "• $item",
|
||||
style = MaterialTheme.typography.bodyMedium,
|
||||
color = MaterialTheme.colorScheme.onSurface
|
||||
)
|
||||
}
|
||||
}
|
||||
Spacer(Modifier.height(MaterialTheme.dime.lg))
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,99 @@
|
||||
# شرایط و قوانین استفاده از اپلیکیشن داروچی
|
||||
|
||||
آخرین بهروزرسانی: ۱۴۰۵/۰۳/۲۴
|
||||
|
||||
استفاده از اپلیکیشن «داروچی» (که از این پس «برنامه» نامیده میشود) بهمنزلهٔ
|
||||
مطالعه و پذیرشِ کاملِ شرایط و قوانین زیر است. در صورتی که با هر بخشی از این
|
||||
قوانین موافق نیستید، لطفاً از برنامه استفاده نکنید.
|
||||
|
||||
## ۱. معرفی خدمات
|
||||
|
||||
برنامه ابزاری اطلاعرسانی است که امکانات زیر را در اختیار کاربر قرار میدهد:
|
||||
|
||||
- جستوجوی دارو و مشاهدهٔ اطلاعات دارویی (موارد مصرف، مقدار مصرف، عوارض،
|
||||
تداخلات، هشدارها و موارد مشابه).
|
||||
- مشاهدهٔ موجودی دارو در داروخانهها.
|
||||
- مشاهدهٔ اطلاعات آزمایشها و تستهای پزشکی.
|
||||
|
||||
این خدمات صرفاً جنبهٔ آموزشی و اطلاعرسانی دارند.
|
||||
|
||||
## ۲. سلب مسئولیت پزشکی (بسیار مهم)
|
||||
|
||||
- اطلاعاتِ ارائهشده در برنامه **جایگزینِ مشاورهٔ پزشک، داروساز یا کادر درمان
|
||||
نیست** و نباید مبنای تشخیص، تجویز یا قطع/شروع مصرف دارو قرار گیرد.
|
||||
- مصرفِ هر دارو باید **زیر نظر پزشک یا داروساز** و مطابق نسخه و دستور ایشان
|
||||
انجام شود.
|
||||
- اطلاعاتِ دارویی ممکن است کامل، بهروز یا بدون خطا نباشد. مسئولیتِ هرگونه
|
||||
استفاده از این اطلاعات بر عهدهٔ کاربر است.
|
||||
- موجودیِ نمایشدادهشدهٔ داروها در داروخانهها بر اساس دادههای منابعِ ثالث
|
||||
است و ممکن است با وضعیتِ واقعی متفاوت باشد؛ پیش از مراجعه، موجودی را از
|
||||
داروخانه تأیید کنید.
|
||||
- در شرایطِ اورژانسی یا بروزِ عوارض، فوراً به پزشک یا اورژانس مراجعه کنید.
|
||||
|
||||
## ۳. حساب کاربری و ورود
|
||||
|
||||
- ورود به برنامه از طریق شماره موبایل و کدِ یکبارمصرف (OTP) انجام میشود.
|
||||
- مسئولیتِ حفظِ شماره موبایل، دسترسی به دستگاه و کدِ تأیید بر عهدهٔ کاربر است.
|
||||
- کاربر موظف است اطلاعاتِ صحیح ارائه دهد و حساب را در اختیار دیگران قرار ندهد.
|
||||
|
||||
## ۴. جستوجوی رایگان، اشتراک و پرداخت
|
||||
|
||||
- برنامه تعدادی **جستوجوی رایگان** در اختیار کاربر قرار میدهد. پس از پایانِ
|
||||
سهمیهٔ رایگان، برای ادامهٔ استفادهٔ نامحدود، تهیهٔ **اشتراک** لازم است.
|
||||
- خرید و پرداختِ اشتراک از طریق **درگاهِ پرداختِ درونبرنامهایِ فروشگاه
|
||||
(کافهبازار)** انجام میشود و تابعِ قوانین و شرایطِ همان فروشگاه است.
|
||||
- قیمت و مدتِ اشتراک پیش از خرید به کاربر نمایش داده میشود.
|
||||
- **بازگشتِ وجه** تابعِ سیاستهای فروشگاهِ کافهبازار است. درخواستهای مربوط به
|
||||
عودتِ وجهِ خریدهای درونبرنامهای از طریق همان فروشگاه پیگیری میشود.
|
||||
- در صورتی که پس از پرداختِ موفق، اشتراک فعال نشد، با پشتیبانیِ ما تماس بگیرید.
|
||||
|
||||
## ۵. حریم خصوصی و دادهها
|
||||
|
||||
- برای ارائهٔ خدمات، حداقلِ اطلاعاتِ لازم (از جمله **شماره موبایل** و وضعیتِ
|
||||
اشتراک) دریافت و نگهداری میشود.
|
||||
- اطلاعاتِ خرید (توکنِ خرید) صرفاً برای فعالسازیِ اشتراک به سرور ارسال میشود.
|
||||
- اطلاعاتِ کاربران بدون رضایتِ ایشان در اختیارِ اشخاصِ ثالثِ غیرمرتبط قرار
|
||||
نمیگیرد، مگر در مواردی که قانون الزام کند.
|
||||
- برای آگاهیِ بیشتر، به سند **حریم خصوصی** برنامه مراجعه کنید.
|
||||
|
||||
## ۶. تعهدات کاربر
|
||||
|
||||
کاربر متعهد میشود که:
|
||||
|
||||
- از برنامه صرفاً برای اهدافِ قانونی و شخصی استفاده کند.
|
||||
- در عملکردِ برنامه اخلال ایجاد نکند و از روشهای نفوذ، مهندسیِ معکوس یا دورزدنِ
|
||||
محدودیتها استفاده نکند.
|
||||
- محتوای برنامه را بدون اجازه بازنشر یا تجاریسازی نکند.
|
||||
|
||||
## ۷. مالکیت فکری
|
||||
|
||||
تمامِ حقوقِ مربوط به برنامه، نام، نشان (لوگو)، رابط کاربری و محتوای آن متعلق به
|
||||
مالکِ برنامه است و هرگونه استفادهٔ غیرمجاز پیگردِ قانونی دارد.
|
||||
|
||||
## ۸. محدودیت مسئولیت
|
||||
|
||||
- برنامه «همانگونه که هست» ارائه میشود و هیچ تضمینی نسبت به بینقص بودن،
|
||||
دردسترس بودنِ دائمی یا صحتِ کاملِ اطلاعات داده نمیشود.
|
||||
- مالکِ برنامه در قبالِ خساراتِ مستقیم یا غیرمستقیمِ ناشی از استفاده یا عدمِ
|
||||
امکانِ استفاده از برنامه، یا اتکا به اطلاعاتِ آن، مسئولیتی نمیپذیرد.
|
||||
|
||||
## ۹. تعلیق و خاتمه
|
||||
|
||||
در صورتِ نقضِ این قوانین، دسترسیِ کاربر به برنامه ممکن است بدونِ اطلاعِ قبلی
|
||||
محدود یا مسدود شود.
|
||||
|
||||
## ۱۰. تغییر قوانین
|
||||
|
||||
این شرایط ممکن است در آینده بهروزرسانی شود. ادامهٔ استفاده از برنامه پس از
|
||||
انتشارِ نسخهٔ جدید، بهمنزلهٔ پذیرشِ تغییرات است.
|
||||
|
||||
## ۱۱. قانونِ حاکم
|
||||
|
||||
این شرایط تابعِ قوانینِ جمهوریِ اسلامیِ ایران است و اختلافاتِ احتمالی مطابقِ همین
|
||||
قوانین حلوفصل میشود.
|
||||
|
||||
## ۱۲. ارتباط با ما
|
||||
|
||||
در صورتِ هرگونه پرسش یا مشکل، از طریقِ راههای زیر با ما در تماس باشید:
|
||||
|
||||
- ایمیل پشتیبانی: approagency@gmail.com
|
||||
Reference in New Issue
Block a user