Skip to content

Commit

Permalink
Release 0.0.1-alpha
Browse files Browse the repository at this point in the history
  • Loading branch information
Sergey Golovin committed Oct 18, 2023
1 parent 6799c15 commit 6c127b0
Show file tree
Hide file tree
Showing 121 changed files with 5,674 additions and 2 deletions.
43 changes: 43 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
.gradle
/local.properties
/.idea/workspace.xml
.DS_Store

# built application files
*.apk
*.ap_

# files for the dex VM
*.dex

# Java class files
*.class

# generated files
bin/
gen/

# Local configuration file (sdk path, etc)
local.properties

# Eclipse project files
.classpath
.project

# Proguard folder generated by Eclipse
proguard/

# Intellij project files
*.iml
*.ipr
*.iws
.idea/

# Gradle
build/

# Maven
target/
build-maven

!gradle
3 changes: 3 additions & 0 deletions .gitlab/CODEOWNERS
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
# ===== CODE OWNERS =====
*gradle.lockfile @co-is @co-is-required
*settings.gradle.kts @co-is @co-is-required
58 changes: 58 additions & 0 deletions .gitlab/merge_request_templates /Default.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
## Чеклист для влития
<!--
Список шагов, которые необходимо проверить перед влитием этого MR.
Если какой-то шаг выполнять не нужно, оставьте галку пустой и укажите причину.
-->
* [ ] Ветка сделана от свежей версии девелопа
* [ ] Код проверен на тестовом окружении
* [ ] Код покрыт тестами, по возможности
* [ ] В демку внесены изменения, по возможности
* [ ] Изменения описаны в документации
* [ ] Задача находится в статусе Verified или у нее стоит тег dev_test

## Какиe изменения сделаны?
<!--
Вкратце изложите суть изменений.
Здесь могут быть указаны:
- Список проделанных изменений
- Ошибки, которые были исправлены
- Описание добавленных функций и их назначение
- Проделанные оптимизации
-->

## Зачем сделаны изменения?
<!--
Расскажите о цели внесения изменений.
Здесь могут быть указаны:
- Причины внесения изменений
- Как изменения улучшают проект
- Требования и запросы пользователей, которые были решены
-->

## Как реализованы изменения?
<!--
Укажите реализацию изменений.
Здесь могут быть указаны:
- Используемые технологии, методы или алгоритмы
- Вспомогательные материалы, такие как диаграммы, схемы или ссылки на документацию
- Скриншоты из демки, если были изменения UI
Для этого скопируйте <img src="/uploads/hash/image.png" width="400"/> и замените hash на хэш изображения.
-->

## Как проводилось тестирование?
<!--
Опишите метод проверки изменений.
Здесь могут быть указаны:
- Добавленные тесты, их объем и описание
- Функционал, проверенный ручным тестированием
- Автотесты, запущенные на измененном коде
- Необходимые для проведения тестирования нестройки, например тестовые пользователи или фиче-тоглы
-->

## На что обратить внимание?
<!--
Добавьте дополнительные примечания для проведения ревью.
Здесь могут быть указаны:
- Инструкции для ревьюера
- Известные ограничения, проблемы или замечания
-->
8 changes: 8 additions & 0 deletions CODE_STYLE.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
# Code Style

В проекте используется detekt и [ktlint](https://detekt.dev/docs/rules/formatting/)-плагин для него.
Ktlint это чуть более строгие стандартные [котлиновские гайдлайны](https://kotlinlang.org/docs/coding-conventions.html).

И детект и форматтер запускаются одной командой `./gradlew detekt` — форматтер постарается сразу исправить то, что сможет, но ошибки покажет в любом случае, даже если все исправил.

Чтобы detekt запускался перед каждым пушем, выполните скрипт `sudo bash scripts/install-git-hooks.sh` — может понадобиться sudo так как гит-хуки это исполняемые файлы.
87 changes: 87 additions & 0 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,87 @@
# Contributing

## ⏳ Подготовка к разработке
Для начала работы нужно склонировать репозиторий и перейти в созданную директорию

```bash
git clone [email protected]:vk-ecosystem/shared/vk-id.git
cd android-sdk
```
Так же можно сделать форк и склонировать его

## 🐶 Базовые команды
> Все команды запускаются из корня проекта
1. `./gradlew build` - полная сборка проекта
2. `./gradlew test` - прогон unit тестов
3. `./gradlew lint` - запуск android линта
4. `./gradlew detekt` - запуск detekt для проверки качества кода

## 🪵 Создание ветки

Ветки создаются от `develop`.

Для названия веток используется специальный шаблон:

```
{username}/{task_type}/{issue_number}/{description}
Где:
- {username} - Ник пользователя в свободном формате, латиницей
- {task_type} - "fix", если это испарвление бага и "feature", если это полноценная доработка
- {issue_number} - VKIDSDK-XXX для разработчиков VK и ISSUE-XXX для внешних контрибьютеров
- {description} - Краткое описание проделанной работы
```

Пример:
```bash
git checkout develop
git pull
git checkout -b u.name/feature/some-feature/ISSUE-0000
```

Для веток будет сделана проверка формата в хуке `commit-msg`, которая провалидирует соответствие названия ветки шаблону

## 📝 Создание коммита

Сообщение в коммите должно соответствовать шаблону:

```
{issue_number}: {commit_description}
Где:
- {issue_number} - VKIDSDK-XXX для разработчиков VK и ISSUE-XXX для внешних контрибьютеров
- {commit_description} - Краткое описание коммита на английском языке
```

Для коммитов будет добавлен линтер на хук `commit-msg`, который проверяет, соответствует ли сообщение в коммите шаблону

Пример:
```bash
git checkout develop
git add -A
git commit -m "ISSUE-0000: some commit description"
```

## 😸 Подготовка Merge Request

Заголовок мра должен быть сделан по следующему шаблону:
```
{issue_number}: {commit_description}
Где:
- {issue_number} - VKIDSDK-XXX для разработчиков VK и ISSUE-XXX для внешних контрибьютеров
- {commit_description} - Краткое описание коммита на английском языке
```

Пример:
```
ISSUE-000: Some issue description
```

Для того, чтобы подготовить Merge Request, необходимо пройти [Чеклист](.gitlab/Default.md)

## 🚅 Релизы версий
### <span style="color:green">TODO, добавить после публикации релизов</span>

## 🖊️ Документация
### <span style="color:green">TODO, добавить после поддержки генерации документации</span>
4 changes: 4 additions & 0 deletions LICENSE
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
Copyright © 2023 V Kontakte LLC
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
106 changes: 104 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,106 @@
# VK ID
<div align="center">
<h1 align="center">
<img src="logo.svg" width="150" alt="VK ID SDK Logo">
</h1>
<p align="center">
VK ID SDK — библиотека для авторизации пользователей Android-приложений с помощью аккаунта VK ID.
</p>
</div>

VK ID - SDK для авторизации пользователей Android приложений с помощью аккаунта VK.
## Предварительно

Что такое VK ID и как интегрировать его в приложение читайте здесь https://id.vk.com/business/go/docs/vkid/latest/start-page.

Чтобы подключить VK ID SDK, сначала получите ID приложения (app_id) и защищенный ключ (client_secret). Для этого создайте приложение в [кабинете подключения VK ID](https://id.vk.com/business/go/docs/vkid/latest/create-application).


## Установка

Для начала работы добавьте репозиторий:
```kotlin
maven {
url("https://artifactory-external.vkpartner.ru/artifactory/vkid-sdk-andorid/")
}
```

Подключите библиотеку:
```kotlin
implementation("com.vk.id:vkid:${sdkVersion}")
```

И пропишите плейсхолдеры манифеста в секции `android` в `build.gradle.kts`:
```kotlin
android {
//...
addManifestPlaceholders(mapOf(
"VKIDClientID" to "1233445", // ID вашего приложения (app_id).
"VKIDClientSecret" to "000000000000", // Ваш защищенный ключ (client_secret).
"VKIDRedirectHost" to "vk.com", // Обычно используется vk.com.
"VKIDRedirectScheme" to "vk1233445", // Обычно используется vk{ID приложения}.
))
}
```

## Интеграция
### Инициализация VK ID SDK
Инициализируйте работу VK ID SDK через объект `VKID`.
```kotlin
val vkid = VKID(context)
```
### Авторизация
Результат авторизации передается в коллбэк `VKID.AuthCallback`, поэтому его нужно объявить:
```kotlin
private val vkAuthCallback = object : VKID.AuthCallback {
override fun onSuccess(accessToken: AccessToken) {
val token = accessToken.token
//...
}

override fun onFail(fail: VKIDAuthFail) {
when (fail) {
is VKIDAuthFail.Canceled -> { /*...*/ }
else -> {
//...
}
}
}
}
```
Авторизация запускается с помощью метода authorize(), у которого есть два варианта вызова:
```kotlin
viewModelScope.launch {
vkid.authorize(vkAuthCallback)
}
```
или с передачей LifecycleOwner:
```kotlin
vkid.authorize(this@MainActivity, vkAuthCallback) // Первый параметр LifecycleOwner, например активити.
```

## Демонстрация

SDK поставляется с [тестовым примером приложения](sample), где можно посмотреть работу авторизации.
Чтобы получить токен, создайте файл secrets.properties и пропишите в нем client_id и client_secret вашего приложения VK ID:


Файл `secrets.properties`:
```
VKIDClientSecret=Ваш защищённый ключ
VKIDClientID=Ваш ID приложения
```

## Документация

- [Что такое VK ID](https://id.vk.com/business/go/docs/vkid/latest/start-page)
- [Создание приложения](https://platform.vk.com/docs/vkid/latest/create-application)
- [Требования к дизайну](https://platform.vk.com/docs/vkid/latest/guidelines/design-rules)

## Contributing
Проект VK ID SDK имеет открытый исходный код на GitHub, и вы можете присоединиться к его доработке — мы будем благодарны за внесение улучшений и исправление возможных ошибок.

### Code of Conduct
Если вы собираетесь вносить изменения в проект VK ID SDK, следуйте [правилам разработки](CODE_OF_CONDUCT.md). Они помогут понять, какие действия возможны, а какие недопустимы.

### Contributing Guide
В [руководстве](CONTRIBUTING.md) вы можете подробно ознакомиться с процессом разработки и узнать, как предлагать улучшения и исправления, а ещё — как добавлять и тестировать свои изменения в VK ID SDK.
Также рекомендуем ознакомиться с общими [правилами оформления кода](CODE_STYLE.md) в проекте.
54 changes: 54 additions & 0 deletions build-logic/convention/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile

plugins {
`kotlin-dsl`
}

group = "com.vk.id.buildlogic"

// Configure the build-logic plugins to target JDK 17
// This matches the JDK used to build the project, and is not related to what is running on device.
java {
sourceCompatibility = JavaVersion.VERSION_17
targetCompatibility = JavaVersion.VERSION_17
}
tasks.withType<KotlinCompile>().configureEach {
kotlinOptions {
jvmTarget = JavaVersion.VERSION_17.toString()
}
}

dependencies {
compileOnly(libs.android.gradlePlugin)
compileOnly(libs.kotlin.gradlePlugin)
compileOnly(libs.ksp.gradlePlugin)
compileOnly(libs.detekt.gradlePlugin)
}

gradlePlugin {
plugins {
register("androidApplication") {
id = "vkid.android.application"
implementationClass = "AndroidApplicationConventionPlugin"
}
register("androidApplicationCompose") {
id = "vkid.android.application.compose"
implementationClass = "AndroidApplicationComposeConventionPlugin"
}
register("androidLibrary") {
id = "vkid.android.library"
implementationClass = "VKIDLibraryConventionPlugin"
}
register("vkidPublish") {
id = "vkid.android.publish"
implementationClass = "VKIDPublishConventionPlugin"
}
register("vkidDependencyLock") {
id = "vkid.android.dependency.lock"
implementationClass = "DependencyLockPlugin"
description = """Helper to create lockfiles for all modules with one command.
|Usage: `./gradlew allDependencies --write-locks`""".trimMargin()
}
}
}

Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
import com.android.build.api.dsl.ApplicationExtension
import com.vk.id.configureAndroidCompose
import com.vk.id.configureDetekt
import org.gradle.api.Plugin
import org.gradle.api.Project
import org.gradle.kotlin.dsl.getByType

class AndroidApplicationComposeConventionPlugin : Plugin<Project> {
override fun apply(target: Project) {
with(target) {
pluginManager.apply("vkid.android.application")
val extension = extensions.getByType<ApplicationExtension>()
configureAndroidCompose(extension)
configureDetekt(isCompose = true)
}
}
}
Loading

0 comments on commit 6c127b0

Please sign in to comment.