Статьи

Как использовать MongoDB Stitch в приложениях для Android

В MongoDB Atlas достаточно всего лишь нескольких кликов в браузере, чтобы запустить собственный кластер MongoDB и запустить его в облаке. Используя его, вы можете создавать приложения для Android и iOS, которые могут эффективно обслуживать миллионы пользователей. Однако вам по-прежнему нужен внутренний сервер, который может выступать в качестве посредника между устройствами ваших пользователей и вашим кластером. Он понадобится вам для обеспечения соблюдения политик безопасности, добавления уровня абстракции для ваших операций CRUD, планирования заданий и для множества других таких важных задач.

MongoDB Stitch — это мощная безсерверная платформа, которая может удовлетворить все ваши внутренние требования. Помимо обеспечения детального контроля доступа к данным в кластере MongoDB Atlas, он предлагает вычислительную среду на основе JavaScript, которую можно использовать для выполнения широкого спектра операций на стороне сервера. В этом уроке я собираюсь показать вам, как использовать платформу в приложении для Android.

Чтобы следовать, вам нужно:

  • учетная запись MongoDB Atlas
  • последняя версия Android Studio
  • устройство или эмулятор под управлением Android 5.0 или выше

MongoDB Stitch предназначен для использования с кластером MongoDB Atlas. Вы можете свободно использовать уже имеющийся кластер, но я предлагаю вам создать новый для этого урока.

Для начала войдите в свою учетную запись MongoDB Atlas и нажмите кнопку « Создать новый кластер» .

MongoDB Атлас домашняя страница

На следующем экране, который запрашивает подробную информацию о конфигурации вашего нового кластера, выберите любого облачного провайдера, регион, который предлагает бесплатный кластер уровня M0, и нажмите кнопку « Создать кластер» .

Мастер создания кластера

Через несколько минут у вас появится новый бесплатный кластер уровня с именем Cluster0 .

Чтобы связать приложение Stitch с вашим кластером, нажмите ссылку « Ссылка на приложение» . На открывшейся следующей странице нажмите кнопку « Создать новое приложение» .

Теперь вы можете ввести имя, которое вы хотите для вашего нового приложения Stitch. После этого убедитесь, что выбран правильный кластер, и нажмите кнопку « Создать» .

Новый диалог приложения Stitch

На данный момент ваше приложение Stitch — с очень щедрыми бесплатными квотами — готово.

Обзор приложения Stitch

Приложение имеет уникальный идентификатор, который понадобится вам при разработке приложения для Android. Чтобы узнать, что это такое, перейдите в раздел « Клиенты » и откройте вкладку Java (Android) .

ID приложения для стежка

Используя MongoDB Stitch, вы можете безопасно писать веб-и мобильный интерфейсный код для взаимодействия с вашим кластером MongoDB Atlas. Это возможно, потому что вам не нужно будет включать в код строку подключения, содержащую адрес сервера вашей базы данных, имя пользователя и пароль.

Аутентифицированные конечные пользователи вашего приложения Stitch автоматически получают доступ к вашей базе данных. Используя одно или несколько правил, вы можете точно контролировать, какие документы и поля они могут видеть или изменять .

Для аутентификации ваших пользователей Stitch предлагает несколько механизмов аутентификации, включая анонимную аутентификацию, аутентификацию по электронной почте / паролю и аутентификацию с использованием популярных федеративных провайдеров идентификации. В этом уроке мы будем использовать анонимную аутентификацию. Чтобы настроить его, перейдите в раздел « Пользователи » и откройте вкладку « Поставщики ».

Список провайдеров аутентификации

Затем выберите опцию « Разрешить пользователям анонимный вход» , включите ее и нажмите кнопку « Сохранить» .

Допустим, мы хотим разрешить нашим анонимным пользователям работать только с теми документами, которыми они владеют. Чтобы создать такое правило, перейдите в раздел « Правила ».

Поскольку правила применяются к коллекциям, нажмите кнопку Добавить коллекцию , чтобы создать новую коллекцию. В появившейся форме дайте ему имя и укажите, к какой базе данных он должен принадлежать. После этого выберите Пользователи могут только читать и писать свои собственные шаблоны правил данных .

Добавить новую страницу коллекции

При выборе шаблона вам будет предложено указать имя поля в документе, в котором вы будете хранить автоматически созданный пользователем идентификатор авторизации Stitch. Stitch будет использовать это поле при принятии решения, принадлежит ли документ пользователю или нет. Скажите, что имя user_id и отправьте форму.

На открывшейся следующей странице вы теперь можете подтвердить, что только владельцы документов в вашей коллекции могут выполнять над ними операции чтения и записи.

Страница разрешений для коллекций

Чтобы иметь возможность использовать Stitch в своем проекте Android Studio, вы должны добавить его официальный SDK в качестве зависимости implementation в файле build.gradle модуля app .

1
implementation ‘org.mongodb:stitch-android-sdk:4.0.5’

Кроме того, вы должны указать уникальный идентификатор вашего приложения Stitch в своем проекте. Перейдите в файл res / values ​​/ strings.xml и добавьте его в виде <string> .

1
<string name=»my_app_id»>mystitchapp-qwern</string>

С экземпляром класса StitchAppClient вы можете легко использовать все функции платформы Stitch. Для инициализации инициализации StitchAppClient необходимо вызвать метод initializeDefaultAppClient() и передать ему идентификатор приложения Stitch. Это должно быть сделано только один раз в вашем приложении, желательно сразу после его запуска.

Как только он будет готов, вы можете вызвать метод getDefaultAppClient() чтобы получить ссылку на клиента. Следующий код, который вы можете добавить к onCreate() вашей деятельности, показывает, как это сделать:

1
2
3
4
5
Stitch.initializeDefaultAppClient(
    resources.getString(R.string.my_app_id)
)
 
val stitchAppClient = Stitch.getDefaultAppClient()

Если ваш пользователь не вошел в ваше приложение Stitch, вы не сможете выполнять какие-либо полезные операции на вашем кластере MongoDB Atlas. Следовательно, теперь вы должны войти в систему, вызвав метод loginWithCredential() , который работает асинхронно и возвращает объект Task . Кроме того, поскольку вы выбрали анонимную аутентификацию в качестве механизма аутентификации в веб-консоли Stitch, убедитесь, что вы передали экземпляр класса AnonymousCredential методу.

1
2
3
4
stitchAppClient.auth.loginWithCredential(AnonymousCredential())
       .addOnSuccessListener {
           // More code here
       }

На этом этапе, если вы запустите приложение, Stitch автоматически зарегистрирует вас как нового пользователя, а также зарегистрирует вас в приложении. Более того, если вы вернетесь в веб-консоль Stitch и откроете раздел « Пользователи », вы увидите, что в список пользователей добавлена ​​новая запись.

Список аутентифицированных пользователей

После успешной аутентификации вы можете продолжить и получить экземпляр класса RemoteMongoClient чтобы начать взаимодействие с вашим кластером MongoDB Atlas. Для этого вы можете вызвать метод getServiceClient() и указать, что имя mongodb-atlas вам службы — « mongodb-atlas ». Вот как:

1
2
3
4
val mongoClient = stitchAppClient.getServiceClient(
                   RemoteMongoClient.factory,
                   «mongodb-atlas»
                 )

Помните, что благодаря правилу, которое вы создали ранее в этом руководстве, ваш пользователь может выполнять операции чтения и записи только для своих данных. Кроме того, ваш пользователь может работать только с той базой данных и коллекцией, которые вы упомянули в веб-консоли Stitch.

Чтобы получить ссылку на базу данных, вызовите метод getDatabase() и передайте ему имя. Аналогично, чтобы получить ссылку на коллекцию, вызовите метод getCollection() , который возвращает объект RemoteMongoCollection .

1
2
val myCollection = mongoClient.getDatabase(«test»)
                             .getCollection(«my_collection»)

То, что вы добавляете в коллекцию, конечно, зависит от вас. В качестве примера, скажем, мы хотим добавить документы, содержащие временные метки всех времен, когда пользователь открывал приложение.

Чтобы создать новый документ BSON , вы должны использовать конструктор класса Document . Поскольку объекты Document очень похожи на карты, вы можете использовать оператор [] для добавления к ним пар ключ-значение.

Следующий код показывает, как создать новый документ и добавить к нему метку времени:

1
2
val myFirstDocument = Document()
myFirstDocument[«time»] = Date().time

В дополнение к вашим данным, все ваши документы должны содержать идентификатор авторизации пользователя Stitch. Без этого ваши операции вставки не удастся. Чтобы получить идентификатор аутентификации, вы можете напрямую использовать свойство id неявного объекта it доступного внутри прослушивателя при успешном завершении.

1
myFirstDocument[«user_id»] = it.id

Теперь вы можете вставить документ, вызвав метод insertOne() . (Вы можете прочитать о insertOne() и других операциях записи в документации MongoDB для драйвера Java .) Поскольку он выполняется асинхронно, вам потребуется другой прослушиватель при успешном завершении, чтобы проверить, успешно ли выполнена операция вставки.

1
2
3
4
myCollection.insertOne(myFirstDocument)
           .addOnSuccessListener {
               Log.d(«STITCH», «One document inserted»)
           }

Если вы сейчас запустите приложение и откроете панель Logcat в Android Studio, вы должны увидеть запись журнала, которая выглядит следующим образом:

Панель Logcat, отображающая сообщение об успехе

Вызвав метод find() вашего объекта RemoteMongoCollection , вы можете создать запрос. (Вы можете узнать больше о find() и других операциях запроса в документации драйвера MongoDB Java .) Метод возвращает объект RemoteFindIterable , для которого вы можете вызывать больше методов, таких как sort() и limit() для управления результатами запрос. Например, следующий код создает запрос для поиска последних пяти документов, созданных пользователем:

1
2
3
val query = myCollection.find()
                       .sort( Document(«time», -1) )
                       .limit(5)

Чтобы фактически выполнить запрос, вы можете вызвать его метод into() , который ожидает список в качестве аргумента. Как следует из его названия, он загружает результаты запроса, которые являются ничем иным, как объектами Document , в список, который вы ему передаете. Он работает асинхронно, поэтому вы можете начать использовать список только в случае успешного прослушивателя.

1
2
3
4
5
val result = mutableListOf<Document>()
 
query.into(result).addOnSuccessListener {
    // More code here
}

А пока, для простоты, давайте использовать виджет TextView для отображения результатов запроса. Поэтому добавьте следующий код в XML-файл макета вашей деятельности:

1
2
3
4
5
<TextView
   android:layout_width=»match_parent»
   android:layout_height=»wrap_content»
   android:id=»@+id/viewer»
   />

Вернувшись в прослушиватель при успешном выполнении, вы можете теперь пройтись по списку и создать объединенную строку, содержащую все метки времени. При желании вы можете передать метки времени getRelativeDateTimeString() класса DateUtils чтобы сделать их более читабельными. Как только строка готова, вы можете напрямую назначить ее виджету TextView . Вот как:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
val output = StringBuilder(«You opened this app: \n\n»)
 
// Loop through the results
result.forEach {
    output.append(
        DateUtils.getRelativeDateTimeString(
            this@MainActivity,
            it[«time»] as Long, // Get value of ‘time’ field
            DateUtils.SECOND_IN_MILLIS,
            DateUtils.WEEK_IN_MILLIS,
            0
        )
    ).append(«\n»)
}
 
// Update the TextView
viewer.text = output

Если вы снова запустите приложение, вы должны увидеть что-то вроде этого на вашем устройстве:

Приложение отображает список временных меток

MongoDB Stitch — это серверная платформа, которую вы можете использовать для создания современных приложений, которые легко масштабируются для обработки больших объемов пользовательских данных. Из этого руководства вы узнали, как использовать его для анонимной аутентификации пользователей ваших приложений Android и предоставления им возможности безопасного выполнения операций чтения и записи в ваших кластерах MongoDB Atlas.

Чтобы узнать больше о MongoDB Stitch, обратитесь к официальной документации .