Visavi клиент для Android

Печать RSS
61

Автор
2000 лет д.н.э.
+3
Делал чисто ради интереса, и наглядного примера возможностей нейросетей в кодинге
Для авторизации нужен API ключ который можно взять тут на сайте в самом низу страницы https://visavi.net/accounts Ваш API-токен (создать, скопировать, вставить в приложение)
Из возможностей:
Просмотр профилей пользователей (нет списка всех пользователей ввиду отсутствия реальной необходимости) например в форуме или привате.
Чтение и отправка личных сообщений, уведомления о новых сообщениях (андроид стал особенно жестко гнобить фоновые сервисы, могут быть затыки, но вроде не должно быть)
Чтение Форума, Разделы, подразделы, темы, сообщения.
Доступа у приложения ни куда нет и не просит, можете не переживать, обращается к апи https://visavi.net/api , хранит в своей системной папке настройки и аватары, и все.
Интерфейс сыроват, по мере появления свободного времени и желания буду подравнивать
______________________________
Обновление: v 0.8.4
Исправил дублирование фонового сервиса проверки сообщений,
Исправил краш из-за парсинга неправильной последовательности тегов типа: [сode][quоte]123[/сode][/quоte]
Изменил способ передачи токена теперь в GET запросе не будет ключа, более безопасно в плане перехвата запроса.
Немного дизайн подправил
_____________
Обновление: v 0.8.5
Добавил отметки о прочтении в диалогах,
указания входящее или исходящее последнее сообщение,
Подсветку своих сообщений в переписке и в темах форума (Ник красным цветом)
Подсветка ссылок и жирного текста,
Сменил иконку в уведомлениях на аналогичную иконке самого приложения
Убрал поле ввода ответа для диалогов в которых нельзя ответить (Система или блок типа ЧС)
Добавил принудительное обновление списка диалогов даже при открытии из "кэша" (кнопки назад) если последнее обновление было более 30 сек назад
69b69a0fa053a267050175.jpg
69b69a0fa053a267050175.jpg 69b69a1f8e64d260894326.jpg 69b69a232462e140446068.jpg 69b69a26e1f1a561639901.jpg 69b69a2d3d046716959051.jpg 69b69a31de70b989020443.jpg 69b69a360077a973947571.jpg
Изменил: ramzes

Пришелец
0
Приложение чисто для просмотра visavi? Или для своего сайта на движке ротор тоже можно юзать?
Автор
2000 лет д.н.э.
+2
ну вообще для visavi но фактически можно под любой ротор с тем же апи заточить,
/**
 * API сервис Visavi.net
 * RotorCMS v12.7.0
 */
interface VisaviApiService {
    /** Данные текущего пользователя */
    @GET("api/user")
    suspend fun getUser(@Query("token") token: String): Response<ApiData>

    /** Данные пользователя по логину */
    @GET("api/users/{login}")
    suspend fun getUserByLogin(
        @Path("login") login: String,
        @Query("token") token: String
    ): Response<ApiData>

    /** Диалоги с пользователями */
    @GET("api/dialogues")
    suspend fun getDialogues(
        @Query("token") token: String,
        @Query("page") page: Int = 1,
        @Query("per_page") perPage: Int = 50
    ): Response<DialoguesData>

    /** Приватные письма пользователя */
    @GET("api/talk/{login}")
    suspend fun getTalk(
        @Path("login") login: String,
        @Query("token") token: String,
        @Query("page") page: Int = 1,
        @Query("per_page") perPage: Int = 50
    ): Response<MessagesData>

    /** Отправка сообщения */
    @POST("api/messages/send")
    suspend fun sendMessage(
        @Body request: SendMessageRequest,
        @Query("token") token: String
    ): Response<SendMessageResponse>

    /** Проверка новых сообщений */
    @GET("api/messages/new")
    suspend fun getNewMessages(
        @Query("token") token: String
    ): Response<NewMessagesResponse>

    /** Список корневых разделов форума */
    @GET("api/forums")
    suspend fun getForumSections(
        @Query("token") token: String
    ): Response<ForumSectionsData>

    /** Раздел форума с темами (если раздел имеет подразделы, они возвращаются в children) */
    @GET("api/forums/{id}")
    suspend fun getForumSection(
        @Path("id") sectionId: Int,
        @Query("token") token: String,
        @Query("page") page: Int = 1,
        @Query("per_page") perPage: Int = 50
    ): Response<ForumTopicsData>

    /** Список сообщений темы форума */
    @GET("api/topics/{id}")
    suspend fun getTopicPosts(
        @Path("id") topicId: Int,
        @Query("token") token: String,
        @Query("page") page: Int = 1,
        @Query("per_page") perPage: Int = 50,
        @Query("order") order: String = "desc"
    ): Response<ForumPostsData>
}

/**
 * Singleton для доступа к API
 */
object VisaviApi {
    private const val BASE_URL = "https://visavi.net/"

    val instance: VisaviApiService by lazy {
        val logging = HttpLoggingInterceptor().apply {
            level = HttpLoggingInterceptor.Level.BODY
        }
        val client = OkHttpClient.Builder()
            .addInterceptor(logging)
            .build()

        Retrofit.Builder()
            .baseUrl(BASE_URL)
            .client(client)
            .addConverterFactory(GsonConverterFactory.create())
            .build()
            .create(VisaviApiService::class.java)
    }
}
Автор
2000 лет д.н.э.
+1
Приложение создает отдельный сервис проверки сообщений, так что даже если оно закрыто (кроме принудительного закрытия из окна информации о программе) уведомления о новых сообщениях будут приходить исправно
69bc42a852504857309859.jpg
Стикеры / Теги / Правила