Как подписать приложение unity
На этой странице описан нативный код плагинов для Android.
Сборка плагина для Android
Чтобы построить плагин для Android, вы должны сначала получить Android NDK и ознакомиться с инструкцией по созданию общей библиотеки.
Если вы используете C++ (.cpp), при создании плагина вы должны убедиться, что функции объявлены с C-связями, чтобы избежать проблем с коверканьем имен.
Использование вашего плагина из C
Проекты библиотек для Android
Вы можете закинуть проекты прекомпилированной Android библиотеки в папку Assets->Plugins->Android . Прекомпилированная - значит все .java файлы должны быть скомпилированы в jar файлы, расположенные либо в папке bin/, либо в папке libs/ проекта. AndroidManifest.xml из этих папок будет автоматически объединяться с основным файлом манифеста при сборке проекта.
Смотрите Проекты библиотек для Android для большей информации.
Развертывание
Для кросс-платформенного развертывания, ваш проект должен включать плагины для каждой поддерживаемой платформы (т.е. libPlugin.so для Android, Plugin.bundle для Mac и Plugin.dll для Windows). Unity автоматически выбирает правильный плагин для целевой платформы и включает его с плеером.
For specific Android platform (armv7, x86), the libraries (lib*.so) should be placed in the following:
Использование плагинов Java
Механизм Android-плагина также обеспечивает Java, который будет использоваться для взаимодействия с ОС Android.
Сборка Java-плагина для Android
Есть несколько способов создать плагин Java, но результатом во всех случаях является файл .jar, содержащий файлы .class для вашего плагина. Один из подходов - скачать JDK, затем скомпилировать файлы .java из командной строки с javac. Это создаст файлы .class, которые затем можно упаковать в .jar из командной строки с утилитой jar. Другой вариант заключается в использовании Eclipse IDE вместе с ADT.
Примечание: Unity ожидает Java-плагины, которые будут построены с использованием JDK v1.6. Если вы используете v1.7, вы должны включить “-source 1,6 -target 1,6” в параметрах командной строки для компилятора.
Использование ваших Java-плагинов из нативного кода
После того как вы создали свой Java-плагин (.jar), вы должны скопировать его в папку Assets->Plugins->Android в проекте Unity. Unity упакует ваши файлы .class вместе с остальной частью Java-кода, а затем получить доступ к коду, используя Java Native Interface (JNI). JNI используется как при вызове нативного кода из Java, так и при взаимодействии с Java (или JavaVM) из нативного кода.
Чтобы найти Java код из нативной части, вы должны иметь доступ к Java VM. К счастью, доступ можно легко получить, добавив такую функцию в свой C/C++ код:
Это все, что необходимо, чтобы начать использовать Java из C/C++. Полное объяснение JNI выходит за рамки этого документа. Однако его использование, как правило, включает в себя поиск определения класса, поиск метода конструктора (<init>) и создание нового экземпляра объекта, как показано в этом примере:-
Использование Java-плагинов со вспомогательными классами
AndroidJNIHelper и AndroidJNI могут быть использованы для избавления от некоторых проблем с первичным JNI.
AndroidJavaObject и AndroidJavaClass автоматизируют множество задач и используют кэширование для ускорения вызовов к Java. Комбинация AndroidJavaObject и AndroidJavaClass надстраивается над AndroidJNI и AndroidJNIHelper , но также содержит много логики сама по себе (для управления автоматизацией). Эти классы также идут в ‘static’ версии для доступа к статическим членам Java классов.
Вы можете выбрать в зависимости от того, что вам подходит, будь то первичный JNI с помощью методов класса AndroidJNI , или AndroidJNIHelper вместе с AndroidJNI , и в конце концов AndroidJavaObject/AndroidJavaClass для максимальной автоматизации и удобства.
UnityEngine.AndroidJNI является оберткой для вызовов JNI доступных в C (как описано выше). Все методы этого класса являются статическими и соответствуют 1:1 Java Native Interface. UnityEngine.AndroidJNIHelper предоставляет вспомогательный модуль, используемый на следующем уровне, но предоставляется как открытые методы, потому что они могут быть полезны для некоторых частных случаев.
Экземпляры UnityEngine.AndroidJavaObject и UnityEngine.AndroidJavaClass соответствуют один-в-один экземпляру java.lang.Object и java.lang.Class (или их подклассов) на стороне Java, соответственно. Они по существу обеспечивают 3 типа взаимодействия с Java:-
- Вызов метода
- Получить значения поля
- Установить значение поля
Call (Вызов) разделяется на две категории: Call (Вызов) ‘void’ метода, и Call (Вызов) метода, возвращающего не-void тип. Универсальный тип используется для представления типа возвращаемого методами, которые возвращают не-void тип. Get и Set всегда берут универсальный тип, представляющий тип поля.
Пример 1
Здесь мы создаем экземпляр java.lang.String, инициализируемстроку на свой выбор и извлекаем хеш значение для этой строки.
Конструктор AndroidJavaObject принимает минимум один параметр, имя класса, экземпляр которого хотим создать. Любые параметры после имени класса предназначены для вызова конструктора объекта, в данном случае строка “some_string”. Последующий Call (Вызов) метода hashCode() возвращает ‘int’, который мы используем в качестве параметра универсального типа в Call (Вызове) метода.
Примечание: Вы не можете создать экземпляр вложенного класса Java с помощью разделения точкой. Внутренние классы должны использовать разделитель $, и это должно работать в точечном и слэш формате. Так \[android.view.ViewGroup$LayoutParams или android/view/ViewGroup$LayoutParams могут быть использованы, где LayoutParams класс вложенный в класс ViewGroup\] .
Пример 2
В этом случае, мы начинаем с AndroidJavaClass вместо AndroidJavaObject , потому что мы хотим получить доступ к статическому члену com.unity3d.player.UnityPlayer , а не создавать новый объект (экземпляр создается автоматически в Android UnityPlayer ). Затем мы получаем доступ к статическому полю “currentActivity”, но на этот раз мы используем AndroidJavaObject как универсальный параметр. Потому что фактический тип поля (android.app.Activity) - это подкласс java.lang.Object), и любой не-примитивный тип обязательно должен быть доступен как AndroidJavaObject . Исключением из этого правила являются строки, которые могут быть доступны непосредственно, даже если они не представляют собой примитивный тип в Java.
После чего это уже просто вопрос обхода Activity через getCacheDir() для получения объекта File, представляющего папку кэша с последующим вызовом getCanonicalPath() для получения строкового представления.
Конечно, в настоящее время вам не нужно делать этого, чтобы получить каталог кэша, поскольку Unity предоставляет доступ к директории кэша и файлов приложения с Application.temporaryCachePath и Application.persistentDataPath.
Пример 3
Наконец, здесь есть уловка для передачи данных из Java в код скрипта с помощью UnitySendMessage .
Класс Java com.unity3d.player.UnityPlayer теперь имеет статический метод UnitySendMessage , что эквивалентно функции UnitySendMessage в нативной части iOS. Он может быть использован в Java для передачи данных в код скрипта.
Лучшая практика при использовании плагинов Java с Unity
Так как этот раздел в основном ориентирован на людей, которые не имеют большого опыта работы с JNI, Java и Android, мы предполагаем, что подход с AndroidJavaObject/AndroidJavaClass был использован для взаимодействия с кодом Java из Unity.
Первое, что нужно отметить, это то, что любая операция выполненная с AndroidJavaObject или AndroidJavaClass дорогая в отношении производительности (как первичный JNI подход). Крайне желательно, чтобы количество переходов между управляемым и нативным/Java кодом было минимальным, ради производительности, а также ясности кода.
У вас может быть метод Java, чтобы сделать всю фактическую работу, а затем использовать AndroidJavaObject/AndroidJavaClass для взаимодействия с этим методом и получения результата. Однако стоит иметь в виду, что вспомогательные классы JNI попробуют кэшировать столько данных, сколько возможно, чтобы улучшить производительность.
Сборщик мусора Mono должен освободить все созданные экземпляры AndroidJavaObject и AndroidJavaClass после использования, но желательно держать их в операторе using()<> , чтобы они удалялись как можно скорее. Без этого вы не можете точно знать, когда они будут уничтожены. Если вы установите значение AndroidJNIHelper.debug в true, вы увидите запись деятельности сборщика мусора в журнале отладки.
Расширение Java-кода UnityPlayerActivity
С Unity Android можно расширить стандартный класс UnityPlayerActivity (основной класс Java для Unity плеера на Android, аналогично AppController.mm на Unity iOS).
Приложение может переопределить любые и все основные взаимодействия между ОС Android и Unity Android. Вы можете cделать это, создав новую Activity, которая является производной от UnityPlayerActivity(UnityPlayerActivity.java можно найти в /Applications/Unity/Unity.app/Contents/PlaybackEngines/AndroidPlayer/src/com/unity3d/player на Mac и обычно в C:\Program Files\Unity\Editor\Data\PlaybackEngines\AndroidPlayer\src\com\unity3d\player на Windows).
Чтобы сделать это, сначала найдите classes.jar , поставляемый с Unity Android. Он находится в папке установки (обычно C:\Program Files\Unity\Editor\Data (на Windows) или /Applications/Unity (на Mac)) в подпапке PlaybackEngines/AndroidPlayer/bin . Затем добавить PlaybackEngines/AndroidPlayer/bin в папку с классами, используемыми для компиляции новой Activity. Полученный(-ые) .class файл(ы) должны быть сжаты в .jar файл, а этот файл надо добавить в папку Assets->Plugins->Android . Поскольку манифест определяет запуск Activity, его также необходимо создать новый AndroidManifest.xml. Файл AndroidManifest.xml также должен быть помещен в папку Assets->Plugins->Android (размещение пользовательского манифеста полностью заменяет манифест Unity Android по умолчанию).
Новая Activity может выглядеть, как в следующем примере OverrideExample.java:
И соответствующий AndroidManifest.xml будет выглядеть так:
UnityPlayerNativeActivity
Кроме того, можно создать свой собственный подкласс UnityPlayerNativeActivity . Это будет иметь такой же эффект, как создать подкласс UnityPlayerActivity но с улучшенной задержкой ввода. Помните, однако, что NativeActivity был введен в Gingerbread и не работает со старыми устройствами. Поскольку события касания/движения обрабатываются в нативном коде, окна Java обычно не увидят эти события. Существует, однако, механизм переадресации в Unity, который позволяет, чтобы события распространялись на DalvikVM. Для доступа к этому механизму, необходимо изменить файл манифеста, выглядит следующим образом:-
Обратите внимание на атрибут “.OverrideExampleNative” в элементе Activity и два дополнительных элемента мета-данных. Первый элемент мета-данных является инструкцией по использованию библиотеки libunity.so для Unity. Второй обеспечивает события, которые будут переданы пользовательскому подклассу UnityPlayerNativeActivity.
Примеры
Пример нативного плагина
Простой пример использования кода нативного плагина можно найти здесь
В этом примере демонстрируется как код С может быть вызван из приложения Unity Android. Пакет содержит сцену, которая отображает сумму двух значений, рассчитанную нативным плагином. Пожалуйста, обратите внимание, что вам нужен будет Android NDKдля компиляции плагина.
Пример плагина Java
Используемый в примере код Java можно найти здесь
Всем привет! Решил поделиться своим опытом по добавлению игры в Google Play Console и настройке Play Games Plugin для Unity.
Начнем мы с настройки Unity.
Настройка Unity
Сначала нужно скачать и установить Play Games Plugin.
Для этого идем по этой ссылке, выкачиваем репозиторий, идем в папке current-build, открываем GooglePlayGamesPlugin и устанавливаем его. После этого Google Play Games должны появиться во вкладке Windows.
И должно появиться такое окошко
Перед созданием билда, нужно будет изменить пару настроек в Player Settings. Идем в Edit -> Project Settings -> Player.
Во вкладке Other Settings указываем следующие поля:
- Package name: Имя пакета вашей будущей игры
- Version: Версия приложения
- Bundle Version Code: На основе нее Google Play определяет какая версия приложения новее. Она не будет отображаться для пользователей
Здесь нам нужно создать keystore, (подробнее о keystore тут и тут чуть короче).
- Выбираем галочку Create a new keystore
- Выбираем далее Browse Keystore
- Задаем имя, сохраняем
- Заполняем поля с паролем
Keystore (по крайней мере в JKS формате), позволяет хранить несколько пар ключей и сертификатов. Для идентификации каждой пары или отдельного сертификата используется алиас. Алиас указывается в исходном коде при доступе к соответствующему ключу или сертификату. Доступ к каждому алиасу ограничивается паролем.
Теперь, каждый раз перед созданием нового билда, вам нужно будет заходить в эти настройки, и вводить пароли от ключей, так что сохраняйте ключи в надежном месте, в случае утраты будут большие проблемы с восстановлением.
Подробнее о всех настройках можно почитать на оф странице Unity.
Если появиться такое окошко после создания билда, то не переживайте, после настройки Google Service мы вернемся в Unity.
Настройка Google Play Console
Для начало нам нужно будет приобрести Google Developer Account, стоит он 25 долларов. Предположим что мы его уже купили.
Открываем ссылку на Google Play Console
Идем во вкладку Все приложения, нажимаем Новое приложение, вводите название, выбираете язык будущего приложения, нажимаете создать.
После создания приложения, откроется страница с вашим приложением.
Тут вам нужно будет заполнить все нужные поля чтобы можно было опубликовать приложение. Можете просто навести на треугольник, и он вам подскажет что вам нужно заполнить.
После заполнения всех необходимых полей, идем во вкладку Версии приложения,
тут вы решаете на какой стадии ваше приложение, и исходя из выбора, переходите во вкладку управление, в моем случае это Альфа тестирование.
Здесь выбираем создать выпуск, подключаем Google Play App Signing в следующем окне (если появилось). Выбираем наш apk файл, после загрузки файла, Google должен автоматически подтянуть версию приложения, и номер бандла (те настройки что вы указывали перед созданием билда) как показано на скриншноте.
И последнее что вам нужно сделать перед созданием выпуска, это заполнить поле “Что нового в этой версии” (не удаляйте тэги языка при заполнении). Нажимаем посмотреть, тут должно быть предупреждение такого типа:
Окей, вам нужно добавить тестировщиков до публикации приложения, сделать это можно в настройках. Выходим из вкладки приложения, на главную страницу, выбираем Настройки, переходим во вкладку Тестировщики и добавляем список (указываете просто почту).
Возвращаетесь в ваше приложение, нажимаем на Управление, тут выбираете каким будет тестирование, открытое или закрытое, выбираете ваш список тестировщиков, нажимаете сохранить.
Возвращаемся на страницу Версии приложения, нажимаем изменить версию, тут все сохранилось что вы делали до этого (включая ваше apk что вы загрузили), просто жмем просмотреть, и нажимает опубликовать (перед публикацией, убедитесь что приложение готово к публикации, иначе у вас будет недействительна кнопка публикации)
После этого проект должен перейти в стадию готовится к публикации, нужно будет подождать пару часов, пока наше приложение провериться.
А пока идет проверка, мы перейдем к настройке игровых сервисов.
Настройка Игровых Сервисов
Игровые сервисы позволяют вам добавлять в игру таблицы лидеров, облачные сохранения, достижения, квесты и т.д.
Переходим на главную страницу, идем во вкладку Игровые сервисы, нажимаем добавить игру, обязательно выбираете что вы не используете Google API пока, нажимаем продолжить.
Тут нам нужно будет привязать игру что мы загрузили ранее к сервису что мы только что создали. Идем во вкладку Связанные приложения и выбираем платформу (в моем случае Андроид), при нажатии на название пакета, должна появиться ваша игра, выбираем ее, крутим чуток ниже, и выбираем настройки которые вам нужны, после этого сохраняем.
После этого вы должны выполнить авторизацию приложения, нажимаете авторизовать и подтверждаете, чуть позже я расскажу об этом.
Если вы хотите использовать облачное сохранение, перейдите во вкладку Сведения об игре и там после описания игры, будет опция Сохраненные игры, включите ее и сохраните изменения (после выбора этой опции, ее нельзя будет изменить после публикации сервиса), тут же прокрутите страницу до конца и включите API Google Диска.
Теперь можете добавлять то что желаете, в моем случае добавлю одну таблицу лидеров.
После того как вы все сделали/добавили, переходим во вкладку Публикация, тут будет указано то что вы еще не сделали, нажимаем опубликовать игру.
Снова нужно будет подождать пару часов.
После публикации
Для этого идем в Управление релизом, Версии приложения, разворачиваем это окошко
После должно появиться окно что вы стали тестировщиком, на странице будут ссылки откуда вы можете скачать приложение.
Теперь вы можете скачать свое приложение, и протестировать.
Совет : чтобы быстро перейти на вашу страницу приложения в Google Play, наведите на иконку информация справа от названия вашего проекта, и нажмите Найти в Google Play.
Хорошо, вы теперь можете загружать своё приложения из Google Play. Следующий шаг это обновления приложения.
Обновление приложения
Допустим мы что то поменяли в приложении, и теперь мы хотим обновить версию приложения в Google Play.
Для это в Unity в обязательном порядке меняем Bundle Version Code (версию приложения менять не обязательно), и вводим пароли от ключей что были созданы до этого.
После создания билда, идем Google Play Console, открываем приложение что хотим обновить, переходим в Управление релизом -> Версии приложения -> переходим в Управление, Выбираем в правом верхнем углу Создать выпуск, загружаем наше apk, заполняем поле Что нового (можете скопировать из прошлой версии). Код версии берется из Bundle Version Code, в моем случае это 2.
Нажимаем сохранить, после Посмотреть и жмем опубликовать.
После обновления придется подождать около 30 минут до публикации приложения. После обновления приложения, новая версия должна пройти тестирование на 10 устройствах, вы можете в реальном времени смотреть как проходит тестирование, смотреть видео с запуском, и читать логи. Для этого переходим в приложение -> Управление релизом -> Отчет о тестировании. Здесь вы найдете список телефонов на которых проводится тестирование, и следить за статусом прохождения.
Чтобы посмотреть видео с запуском, выбираете устройство где тестирование уже завершилось, после этого должно открыться окно с характеристиками телефона, и видео.
п.с. Еще месяц назад можно было смотреть логи под видео, кто знает куда их Гугл подевал?
Обычно тестирование у меня занимает минут 20, после этого нужно еще подождать 10-15 минут до публикации на Google Play. Кстати, будьте аккуратны если вы загружаете несколько версий подряд, не факт что та версия которую вы скачиваете именно последняя, мой совет после публикации можно смело ждать около часа перед тестированием.
Ускоряем тестирование
Согласитесь, если вы тестируете Google Play Services то весь путь от загрузки и до скачивания занимает приличное количество времени (около 40 минут), что совсем не радует. Я сам прошел такой путь когда делал поддержку Google Play Services, было очень больно после каждого маленького изменения ждать 40 минут что бы это протестировать. Как то смотря видео про облачные сохранения, я увидел приложения Nox (ссылка, надеюсь не сочтут за рекламу), который отлично эмулирует Андроид, вы просто создаете новую версию приложения, устанавливаете его в Nox, и все, можете его спокойно тестировать, минуя при этом 30 минут времени, неплохо правда? Но вот есть еще одна загвоздка, сервисы Google Play не будут работать в том случае если вы скачали приложение не из Google Play, но, это можно легко обойти, на это я наткнулся так же в видео про облачные сохранения.
И так, перейдем, идем в приложение -> Управление релизом -> Подписи приложений, тут перед вами откроется 2 набора сертификатов, вам нужен SHA1 сертификат из раздела Загрузка сертификата, копируете его значение.
Теперь нужно поменять значение сертификата в Google API, для этого идем в Игровые сервисы, выбираем тот к которому привязано ваше приложение, открываем Сведения об игре, крутим в самый низ страницы и видим ссылку, переходим по ней (спасибо гуглу за такой клевый дизайн, иногда требуется несколько минут чтобы найти ссылку).
Откроется вот такая страница, здесь нас интересует раздел Учетные данные
Открываем нашу учетную запись и меняем значение SHA1 сертификата на тот что вы скопировали до этого, и сохраняете.
Важно! Не забудь перед публикацией релизной версии поменять значение сертификата SHA1 на то что из Сертификат для подписи приложения. Иначе у пользователей не будут работать сервисы.
Теперь мы сократили наше тестирование до 5-7 минут, неплохой результат!
Заканчиваем с настройкой Unity
После того как мы все сделали в Google Play Console, мы можем вернуться в Unity и закончить наши настройки.
Для начала откроем Google Play Console и пойдем в Игровые сервисы, и открываем что нибудь из того что мы создали (например рейтинг игроков) и видим там “Получить ресурсы”, нажимаем на нее, во вкладке Android копируем все, и открываем Unity.
Открываем Unity, идем во вкладку Window -> Google Play Games -> Setup -> Android setup
Должно будет появиться такое окно
В нем указываем куда сохраним класс, и имя класса, туда же вставляем то что мы скопировали до этого, и нажимаем Setup, должно будет появиться окно о том что настройка прошла успешна.
Вот и все, теперь в этом классе содержатся константы с id-шниками вещей что мы создали.
В конце, решил продублировать все ссылки что были в статье, а также дать ссылки на видео что будут полезны именно при настройке Google Services в коде.
Подпись приложения Apach Cordova для публикации в (Google Play)
Всем здравствуйте, подскажите, тыкнте носом, никак не могу разобраться как подписать APK созданный.
Перезалив приложения на Google Play
Подскажите пожалуйста. Планирую полностью переработать игровое приложение. Полностью изменить.
Публикация приложения в Google Play
У меня возникла проблема с публикацией приложения, выбрал вкладку релиза в Delphi, скомпилировал, и.
Выбрал хранилище ключей, ввел пароль, указал ключ, ввел пароль. Всё. Функцию подписания приложений в Google Play не используете ? Выгрузить получилось. Теперь гугл рекомендует загрузить файл деобфускации и файл с отладочными символами. Сгенерировал файл с символами, поставив галочку при билде, но он получился больше 300 мб. Как его можно уменьшить и еще как создать файл деобфускации ? Подскажи, пожалуйста, как ты выгрузил. Такая же проблема при выгрузке приложения. Пишет: "Набор app bundel не подписан"
Injenerker, apр бандл нужно менять, видимо ты его не изменяешь
плей маркету чтобы определить что это новая версия игры нужно, чтобы был новый номер бандла
вот посмотри где-то на 1:40 начинается заполнение полей Player Settings, запаузи и чекни какие он поля меняет для обновления
не помню где видел норм видос с публикацией в гугл плей
Добавлено через 7 минут
Вообщем в Project Settings -> Player -> Publishing settings найди строку Bundle Version code, каждый раз нужно его менять, если ты обновляешь игру в Google Play, это как показатель для плей маркета, что это новая версия игры и она подписана твоим ключом
Переход в Play Google из приложения
Во многих приложениях видел функции перехода из приложения в Play Google для покупки платной.
Обновление приложения из google play
Друзья, подскажите, вот у меня подходит к завершению написание простенького приложения, я.
Обновление приложения в Google Play
Я запустил свое приложение в Google Play. Сейчас нужно его обновить. Изменил содержимое. В самом.
Публикация приложения в Google play
Добрый день. При публикации приложения возникли некоторые проблемы. Приложение было удалено через.
Получить рейтинг приложения из google play
Здравствуйте. Подскажите, можно ли программно получить рейтинг своего приложения из google play?
Ошибка при загрузке приложения на Google Play
Здравствуйте. При попытке загрузки приложения на Google Play возникает ошибка: В.
Функция подписания приложений в Google Play позволяет Google управлять ключом подписи вашего приложения, а также защищать этот ключ и использовать его для оптимизированных APK-файлов, которые предназначены для распространения и генерируются из наборов App Bundle. Ключ подписи хранится в надежной инфраструктуре Google, и его можно обновить для большей безопасности.
Чтобы использовать эту функцию, вы должны быть владельцем аккаунта или иметь права на выпуск рабочей версии, исключение устройств и использование функции подписания приложений в Google Play. Кроме того, необходимо принять Условия использования.
Как это работает
Когда у вас включена функция подписания приложений в Google Play, для хранения ваших ключей используется та же безопасная инфраструктура, что и для хранения ключей Google, а их защиту обеспечивает специальный сервис управления ключами. Подробную информацию об инфраструктуре Google можно найти в документации по безопасности в Google Cloud.
Приложения для Android подписываются закрытым ключом. С каждым таким ключом связан открытый сертификат, с помощью которого устройства и сервисы могут проверять источник обновлений. На устройства устанавливаются только те обновления, подпись которых соответствует подписи установленного приложения. Если вы позволите Google управлять ключом подписи приложения, этот процесс станет безопаснее.
Примечание. Для приложений, созданных до августа 2021 года, по-прежнему можно загружать APK-файлы, а не наборы Android App Bundle и управлять собственными ключами, вместо того чтобы использовать функцию подписания приложений в Google Play. Однако если вы потеряете доступ к хранилищу ключей или оно будет взломано, то вы не сможете обновить свое приложение и вам придется опубликовать его заново с другим названием пакета. В таких случаях мы рекомендуем использовать функцию подписания приложений в Google Play и наборы App Bundle.
Ключ, используемый в Google Play для подписания APK-файлов, доставляемых на устройство пользователя. С функцией подписания приложений в Google Play вы можете либо загрузить существующий ключ подписи, либо использовать ключ, сгенерированный Google.
Ключ подписи никому нельзя передавать, но при необходимости вы можете поделиться открытым сертификатом приложения.
Ключ, которым вы подписываете набор App Bundle перед загрузкой в Google Play. Этот ключ никому нельзя передавать, но при необходимости вы можете поделиться открытым сертификатом приложения. В целях безопасности для подписания и загрузки приложения рекомендуется использовать разные ключи.
Сгенерировать ключ загрузки можно двумя способами:
- Используйте ключ подписи приложения. Если вы разрешили Google сгенерировать ключ подписи приложения, ключом загрузки станет ключ, использованный вами для подписания первого выпуска.
- Используйте отдельный ключ загрузки. Если вы предоставили собственный ключ подписи приложения, то для безопасности можете сгенерировать новый ключ загрузки. Если вы не хотите этого делать, используйте ключ подписи приложения в качестве ключа загрузки для подписания выпусков.
Сертификат, который содержит открытый ключ и дополнительную информацию о его владельце. Сертификат открытого ключа позволяет кому угодно узнать, кто подписал набор App Bundle или APK-файл. Этим сертификатом можно делиться, так как он не включает закрытый ключ.
Чтобы зарегистрировать ключи у поставщиков API, вы можете скачать открытый сертификат для ключа подписи и ключа загрузки на странице Функция подписания приложений в Google Play (Выпуск > Настройка > Целостность приложения) в Play Console. Сертификатом открытого ключа можно делиться со всеми, так как он не включает закрытый ключ.
Короткий и уникальный идентификатор сертификата. Цифровой отпечаток вместе с названием пакета часто запрашивают поставщики API для предоставления доступа к их услугам.
Цифровые отпечатки MD5, SHA-1 и SHA-256 сертификатов загрузки и подписи приложения можно найти на странице Функция подписания приложений в Google Play (Выпуск > Настройка > Целостность приложения) в Play Console. Вы также можете получить цифровой отпечаток другого типа. Для этого скачайте оригинальный сертификат в формате DER на той же странице.
Инструмент для экспорта закрытых ключей из хранилища Java и их шифрования для передачи в Google Play.
Когда вы предоставите Google ключ подписи приложения, выберите экспорт и загрузку собственного ключа (и при необходимости – его открытого сертификата), а затем, следуя инструкциям, скачайте инструмент и воспользуйтесь им. Вы также можете скачать, посмотреть и использовать открытый исходный код инструмента PEPK.
Вот как это работает:
- Вы подписываете набор App Bundle и загружаете его в Play Console.
- Google оптимизирует APK-файлы из вашего набора, а затем подписывает их с помощью ключа подписи приложения.
- Google добавляет к манифесту приложения две метки ( com.android.stamp.source и com.android.stamp.type ), используя инструмент apksigner, а затем подписывает APK-файлы с помощью ключа подписи приложения. Метки, добавленные через apksigner, позволяют определить, кто подписал APK-файлы.
- Google доставляет подписанные APK-файлы пользователям.
Как настроить функцию подписания приложений в Google Play
Шаг 1. Создайте ключ загрузки
- Создайте ключ загрузки, следуя инструкциям.
- Подпишите свой набор App Bundle с помощью ключа загрузки.
Шаг 2. Подготовьте выпуск
-
, следуя инструкциям.
- После того как вы выберете тип версии, в разделе "Целостность приложения" появится статус функции подписания приложений в Google Play.
- Чтобы продолжить с ключом подписи приложения, сгенерированным Google, загрузите набор App Bundle. Вы также можете нажать Изменить ключ подписи приложения для доступа к следующим вариантам:
- Использовать ключ подписи приложения, сгенерированный Google. Более чем в 90 % новых приложений используются ключи подписи, созданные Google. Такие ключи нельзя скачать. Это обеспечивает защиту от потери или раскрытия. Если вы выберете этот вариант, то сможете скачать из App Bundle Explorer APK-файлы распространения, которые подписаны с помощью ключа, сгенерированного Google, для других каналов распространения или использовать для них другой ключ.
- Использовать другой ключ подписи приложения. Вы можете использовать ключ подписи другого приложения в вашем аккаунте разработчика (например, если оно предустановлено на некоторых устройствах) или создать локальную копию ключа. В случае взлома копии, хранящейся за пределами серверов Google, повышаются риски безопасности. Если вы хотите использовать другой ключ подписи, доступны следующие варианты:
- Использовать ключ подписи другого приложения из этого аккаунта разработчика.
- Экспортировать и загрузить ключ из Java Keystore.
- Экспортировать и загрузить ключ (не использовать Java Keystore).
- Выполните оставшиеся действия для подготовки и внедрения выпуска.
Примечание. Чтобы продолжить, нужно принять Условия использования и включить функцию подписания приложений.
Шаг 3. Зарегистрируйте ключ подписи приложения у поставщиков API
Как правило, если в приложении используются API, необходимо зарегистрировать ключ подписи у их поставщиков в целях аутентификации. Для этого нужен цифровой отпечаток сертификата. Вот как найти сертификат:
- Откройте Play Console и перейдите на страницу Функция подписания приложений в Google Play (Выпуск > Настройка > Целостность приложения).
- Прокрутите страницу вниз до раздела "Сертификат для ключа подписи приложения" и скопируйте цифровые отпечатки (MD5, SHA-1 и SHA-256) сертификата подписания приложений.
- Если поставщик API требует другой тип цифрового отпечатка, вы можете скачать оригинальный сертификат в формате DER и преобразовать его с помощью необходимых инструментов.
Если вы решите использовать ключ, сгенерированный Google, для вас будет автоматически создан криптостойкий 4096-битный ключ RSA. Если вы хотите загрузить собственный ключ подписи приложения, используйте ключ RSA размером не менее 1024 бит.
Шаг 1. Настройте функцию подписания приложений в Google Play
- Откройте Play Console и перейдите на страницу Функция подписания приложений в Google Play (Выпуск > Настройка > Целостность приложения).
- Если вы ещё этого не сделали, ознакомьтесь с Условиями использования функции подписания приложений в Google Play и нажмите Принять.
Шаг 2. Отправьте в Google копию оригинального ключа и создайте ключ загрузки
- Найдите оригинальный ключ подписи приложения.
- Откройте Play Console и перейдите на страницу Функция подписания приложений в Google Play (Выпуск > Настройка > Целостность приложения).
- Экспортируйте и загрузите ключ подписи приложения тем способом, который больше всего подходит для вашего процесса выпуска.
Шаг 3. Создайте ключ загрузки (необязательно, но рекомендуется)
-
и загрузите сертификат в Google Play.
- В качестве ключа загрузки можно также использовать ключ подписи приложения.
- Скопируйте цифровые отпечатки (MD5, SHA-1 и SHA-256) сертификата подписания приложений.
- Для проведения тестирования вам может потребоваться зарегистрировать у поставщика API сертификат ключа загрузки с помощью цифрового отпечатка сертификата и ключа подписи приложения.
Шаг 4. Подпишите следующее обновление своего приложения ключом загрузки
Выпускаемые обновления приложения нужно подписывать ключом загрузки.
- Если вы не сгенерировали новый ключ загрузки, продолжайте использовать для наборов App Bundle оригинальный ключ подписи приложения. Если вы потеряете этот ключ подписи, то сможете сгенерировать новый ключ загрузки и зарегистрировать его в Google, чтобы и дальше выпускать обновления.
- Если вы сгенерировали новый ключ загрузки, используйте его для подписания наборов App Bundle. Google использует ключ загрузки для проверки вашей личности. Если вы потеряете ключ загрузки, обратитесь в службу поддержки, чтобы его сбросить.
Как создать ключ загрузки и обновить хранилища ключей
В целях безопасности рекомендуем подписывать приложение новым ключом загрузки, а не ключом подписи приложения.
Вы можете создать ключ загрузки, когда будете включать функцию подписания приложений в Google Play, или сгенерировать его позже на странице Функция подписания приложений в Google Play (Выпуск > Настройка > Целостность приложения).
Вот как создать ключ загрузки:
- Следуйте инструкциям на сайте для разработчиков Android. Храните ключ в безопасном месте.
- Экспортируйте сертификат для ключа загрузки в формате PEM. В следующем примере команды вместо аргументов, выделенных подчеркиванием, укажите свои значения:
- $ keytool -export -rfc -keystore upload-keystore.jks -alias upload -file upload_certificate.pem
Когда в процессе выпуска появится запрос, загрузите сертификат, чтобы зарегистрировать его в Google.
Если вы используете ключ загрузки:
- Ключ загрузки регистрируется в Google только для аутентификации личности создателя приложения.
- Ваша подпись удаляется из всех загруженных APK-файлов, прежде чем они попадают к пользователям.
- Ключом загрузки должен быть ключ RSA размером не менее 2048 бит.
Создав ключ загрузки, проверьте и при необходимости обновите следующие местоположения:
- локальная система;
- защищенный локальный сервер (с различными списками контроля доступа);
- облачная система (с различными списками контроля доступа);
- специальные сервисы по управлению ключами;
- репозитории Git.
Как обновить ключ подписи для новых установок приложения
В некоторых случаях вы можете запросить обновление ключа подписи приложения. Новый ключ будет использоваться для подписи новых установок и обновлений приложения, а устаревший – для обновлений подписанных им версий, которые уже установлены пользователями.
Для каждого приложения ключ подписи можно обновить только один раз. В маловероятном случае, когда вы используете один ключ подписи для нескольких приложений, чтобы запускать их в одном процессе, ключ нельзя обновить.
Запрашивать обновление ключа подписи приложения следует в таких случаях:
- Вам нужен более криптостойкий ключ.
- Ключ подписи приложения взломан.
Примечание. Запрос на обновление ключа подписи приложения в Play Console не связан с ротацией ключей в схеме подписания APK-файлов версии 3 для Android P и более поздних версий. В настоящее время такая ротация ключей не поддерживается Google Play.
Прежде чем запрашивать обновление ключа, важно понять, какие изменения это повлечет.
- Если вы применяете один ключ подписи для нескольких приложений, чтобы использовать в них одинаковые данные или код, обновите приложения. Тогда они смогут распознавать сертификаты как нового, так и устаревшего ключа.
- Если в приложении используются API, перед публикацией его обновления обязательно зарегистрируйте сертификаты для нового и устаревшего ключей подписи приложения у поставщиков API. Сертификаты доступны на странице Функция подписания приложений в Google Play (Выпуск > Настройка > Целостность приложения) в Play Console.
- Пользователи вашего приложения, которые скачивают обновления через файлообменные сети, смогут устанавливать только обновления, подписанные тем же ключом, что и версия приложения на их устройствах. Если приложения нельзя обновить, поскольку установленная версия подписана другим ключом, пользователи могут удалить и переустановить его, чтобы получать обновления.
- Откройте Play Console и перейдите на страницу Функция подписания приложений в Google Play (Выпуск > Настройка > Целостность приложения).
- В карте "Обновите ключ подписи для новых установок приложения" выберите Запросить обновление ключа.
- Выберите, что сделать с устройством.
- В зависимости от выбранного варианта, возможно, придется обратиться в службу поддержки, чтобы завершить запрос.
- Разрешите Google создать новый ключ подписи приложения (рекомендуется) или загрузите его.
- После обновления ключа подписи приложения, если он совпадал с ключом загрузки, вы можете и дальше использовать прежний ключ подписи приложения в качестве ключа загрузки или сгенерировать новый ключ загрузки.
- При необходимости зарегистрируйте новый ключ подписи приложения у поставщиков API.
Рекомендации
Что делать, если ключ загрузки утерян или взломан
Если вы потеряли доступ к закрытому ключу загрузки или он был взломан, создайте новый и попросите владельца вашего аккаунта обратиться в службу поддержки, чтобы сбросить ключ. При обращении в службу поддержки владелец аккаунта должен прикрепить файл upload_certificate.pem .
Когда команда службы поддержки зарегистрирует новый ключ загрузки, вы получите электронное письмо, а затем сможете обновить хранилища ключей и зарегистрировать ключ у поставщиков API.
Важно! Сброс ключа загрузки не затрагивает ключ подписи приложения, с помощью которого Google Play подписывает APK-файлы перед отправкой пользователям.
Схема подписи APK версии 4
Устройства с Android 11 и более поздними версиями поддерживают новую схему подписи APK версии 4. В рамках функции подписания приложений в Google Play будет выпущена подпись версии 4 для выбранных приложений. Благодаря этому в них можно будет использовать предстоящие функции повышения производительности, доступные на новых устройствах. Никаких действий со стороны разработчика не требуется, никакого влияния на пользователя не ожидается.
Используйте Android API level 16 (Android OS 4.1) и выше.
Используйте iOS 10.0 и выше. Вы можете интегрировать Appodeal SDK в приложения с меньшим значением минимальной версии iOS. На устройствах, не поддерживающих iOS 10.0+, Appodeal SDK будет отключен.
Используйте XCode 12.5 или выше.
HIGH-LEVEL Integration steps:
Шаг 1. Установка СДК
Шаг 2. Подготовка Приложения
Шаг 3. Инициализация СДК
Шаг 4. Конфигурация Типов Рекламы
Используйте эти инструкции для интеграции Appodeal SDK в ваши приложения.
Используйте наше демо приложение в качестве примера.
1.1 Скачайте Плагин
Загрузите Appodeal Unity Plugin 2.14.5 который включает в себя новейшие Android и IOS Appodeal SDK.
Appodeal Unity Plugin 2.14.5
1.2 Установите Плагин
Чтобы импортировать в проект Appodeal Unity Plugin, дважды щелкните по Appodeal-Unity-Plugin-2.14.5-11.11.2021.unitypackage файлу , или перейдите в Assets → Import Package → Custom Package . В открывшемся окне, нажмите на кнопку Import, оставив все файлы выделенными.
Используйте Appodeal SDK Manager для обновления до актуальной версии из Unity menu bar (Appodeal → Manage Appodeal SDK). Поддерживается с Unity 2018.3 и выше. Больше информации найдете в нашем блоге.
2.1 Настройки для Android Платформы
2.1.1 Обновите Версию Gradle Плагина
Подготовьте Gradle сборки для Android 11
В Android 11 изменился способ запроса приложений и взаимодействия с другими приложениями, установленными пользователем на устройстве. По этой причине убедитесь, что вы используете версию Gradle, которая соответствует одной из перечисленных здесь .
- Перейдите в Player Settings → Publishing Settings и включите Custom Gradle Template флаг.
- Перейдите в Assets → Plugins → Android → mainTemplate.gradle, откройте файл и измените classpath 'com.android.tools.build:gradle:3.4.0' на 'com.android.tools.build:gradle:3.4.3'.
- Перейдите в Player Settings → Publishing Settings и включите Custom Base Gradle Template флаг.
- Перейдите в Assets → Plugins → Android → baseProjectTemplate .gradle, откройте файл и измените classpath 'com.android.tools.build:gradle:3.4.0' на 'com.android.tools.build:gradle:3.4.3'.
- Перейдите в Player Settings → Publishing Settings и включите Custom Base Gradle Template флаг.
- Перейдите в Assets → Plugins → Android → baseProjectTemplate.gradle, откройте файл и измените classpath 'com.android.tools.build:gradle:3.6.0' на 'com.android.tools.build:gradle:3.6.4 '.
2.1.2 Настройте External Dependency Manager (Play Services Resolver)
External Dependency Manager включен в состав Unity плагина Appodeal. Для разрешения конфликтов зависимостей в вашем проекте выполните следующие шаги:
- После импорта плагина в редакторе Unity выберите File → Build Settings → Android.
- Добавьте флаг Custom Gradle Template для Unity 2017.4 - Unity 2019.2 версий или Custom Main Gradle Template для Unity 2019.3 или выше (Build Settings → Player Settings → Publishing settings).
- Включите настройку - "Patch mainTemplate.gradle" (Assets → External Dependency Manager → Android Resolver → Settings).
- Включите настройку - "Use Jetifier" (Assets → External Dependency Manager → Android Resolver → Settings).
- Затем выберите Assets → External Dependency Manager → Android Resolver и нажмите Resolve или Force Resolve.
- В результате модули, которые необходимы для работы Appodeal SDK будут импортированы в mainTemplate.gradle вашего проекта.
2.1.3 Сконфигурируйте AndroidManifest.xml
Мы различаем 2 типа разрешений: необходимые разрешения, без которых Appodeal SDK не может работать, и дополнительные разрешения, необходимые для улучшения таргетинга. Для получения дополнительной информации о назначении каждого из разрешений см. Раздел часто задаваемых вопросов .
Все необходимые и дополнительные разрешения были добавлены в AndroidManifest при интеграции плагина.
Если вы не хотите использовать дополнительные разрешения, перейдите в Plugins → Android → appodeal.androidlib директорию, откройте AndroidManifest.xml файл и удалите их.
Для корректной работы Appodeal SDK, не удаляйте необходимые разрешения из AndroidManifest.
Согласно политике Google , разрешения на определение местоположения могут запрашиваться только для предоставления функций, полезных для пользователя и имеющих отношение к основным функциям приложения. Вы не можете запрашивать доступ к данным о местоположении исключительно для целей рекламы или аналитики.
Если вы не используете местоположение для основных функций вашего приложения
- Удалите разрешения на доступ к местоположению из своего приложении, добавив следующий код в AndroidManifest.xml.
- Обновите приложение в Google Play. В процессе публикации убедитесь, что в Google Play Console нет предупреждений о местоположении.
Если вы используете местоположение для основных функций своего приложения
- Заполните форму декларации разрешений на доступ к местоположению в Google Play Console. Вы можете узнать больше о форме декларации здесь.
- Обновите приложение в Google Play. В процессе публикации убедитесь, что в Google Play Console нет предупреждений о местоположении.
Некоторые сети и сторонние зависимости (связанные с сетевыми зависимостями) могут включать собственные разрешения для манифеста. Если вы хотите принудительно удалить такие разрешения, вы можете обратиться к этому руководству. При этом стабильность работы таких сетей может быть нарушена.
2.1.4 Запрос Разрешений для Android Marshmallow и Выше (API 6.0+)
Расширьте ваш класс , добавив IPermissionGrantedListener :
Вызовите следующий метод внутри метода Awake() того класса, который загружается первым: Теперь вы можете использовать следующие методы обратного вызова для управления запросами WRITE_EXTERNAL_STORAGE и ACCESS_COARSE_LOCATION в Android Marshmallow и более поздних версиях:2.1.5 Отключение Проверки Разрешений
Вы можете отключить проверку наличия дополнительных разрешений, чтобы в приложении не отображались предупреждения, если разрешения не были предоставлены.
Обязательно добавьте Политику конфиденциальности к вашему приложению в Google Play, которая ссылается на Политику конфиденциальности Appodeal, чтобы избежать нарушения Google Play Developer Distribution Agreement.
2.1.6 Поддержка Multidex
- Если вы используете Unity версии 2019.2 или ниже, вам нужно добавить поддержку multidex в ваш проект. Следуйте этому руководству, чтобы добавить Multidex.
- Если вы используете Unity версии 2019.3 или выше, в Player Settings → Publishing Settings → Other Settings установите Minimum API Level 21 или выше .
2.2 Настройки для iOS Платформы
2.2.1 Настройте External Dependency Manager (Play Services Resolver)
External Dependency Manager включен в плагин Appodeal. Для разрешения зависимостей в вашем проекте выполните следующие шаги:
1. После импорта плагина в редакторе Unity выберите File → Build Settings → iOS.
2. Во время сборки проекта модули, которые необходимы для поддержки Appodeal SDK, будут импортированы в ваш проект. Вы можете отредактировать их или добавить другие модули в файле Assets → Appodeal → Editor → AppodealAdapterDependencies.xml .
Это все настройки, что должны быть выполнены на стороне Unity. Однако, вам также требуется выполнить некоторые шаги после экспорта XCode проекта.
2.2.2 Добавьте SKAdNetworkIds
Рекламные сети, используемые в Appodeal медиации поддерживают отслеживание конверсий с помощью Apple SKAdNetwork , что означает возможность отслеживания установок в том случае, когда IDFA недоступен. Для включения данного функционала вам необходимо обновить ключи SKAdNetworkItems добавив словарь(dictionary) в ваш Info.plist .
- Выберите файл Info.plist в Project navigator вашего Xcode проекта
- Нажмите Add button (+) в поле key вашего списка свойств и нажмите Return
- Введите имя поля SKAdNetworkItems
- Выберите тип Array
- Введите пару ключ-значение где ключ - это SKAdNetworkIdentifier, и значение - это идентификатор рекламной сети
Ниже представлена таблица рекламных сетей, которые поддерживают SKAdNetwork атрибуцию и SKAdNetworks идентификаторы в формате Info.plist:
2.2.3 Сконфигурируйте App Transport Security
Для предоставления рекламы, Appodeal SDK необходимо разрешение на произвольные загрузки. Добавьте следующие ключи в info.plist вашего приложения:
- В файле info.plist нажмите Add+ в любом поле первой колонки.
- Добавьте App Transport Security Settings key. В качестве его типа во второй колонке выберите Dictionary .
- Нажмите Add+ в конце строки App Transport Security Settings key и выберите Allow Arbitrary loads . Установите тип Boolean и значение Yes .
Вы можете добавить ключ непосредственно в файл info.plist с помощью следующего кода:
2.2.4 Дополнительные Разрешения
Следующие ключи помогут улучшить производительность рекламных СДК:
- NSUserTrackingUsageDescription - Начиная с iOS 14 использование IDFA требует разрешения от конечного пользователя. Добавление описания поможет объяснить пользователю необходимость данного разрешения.
- NSLocationWhenInUseUsageDescription - Необходимо добавлять если ваше приложение позволяет Appodeal SDK использовать данные геолокации.
- NSCalendarsUsageDescription - Добавление данного ключа рекомендовано рекламными сетями.
Возможные Неполадки
1. Ошибка в Работе AdColony
AdColony [*** ERROR ***] : AdColony has ads, but could not display them. AdColony was unable to find the currently visible UIViewController for your app. Please ensure that your key UIWindow has a rootViewController .Это означает, что rootViewController , использованный в showAd не принадлежит к первому окну в списке.
2.3 Добавление Admob App ID Ключей
Выполняйте этот шаг только если используете Admob или A4G адаптеры. В случае отсутствия ключей, приложение будет крашиться при запуске.
Добавьте Admob App Id в Unity Menu bar Appodeal → AdMob Settings для каждой платформы.
AdMob App ID - это уникальный идентификатор, присвоенный вашему приложению.
Чтобы найти AdMob App ID в своем аккаунте AdMob, перейдите в Apps → Ваше приложение → App settings и скопируйте AdMob App ID.
Подробнее о синхронизации с Admob в FAQ.
Перед тем, как начать загрузку рекламы, вам необходимо инициализировать Appodeal SDK следующим образом:
3.1 Добавьте Следующие Пространства Имен :
3.2 Д обавьте Следующий Код в Метод Start() Главного Скрипта MonoBehavior:
consentValue имеет булевое значени е, где 'false' означает, что пользователь отказался дать согласие на обработку персональных данных. Ознакомьтесь с нашим руководством для получения согласия тут. Замените YOUR_APPODEAL_APP_KEY на ключ вашего приложения.Используйте коды типов ниже, чтобы установить предпочтительный формат рекламы:
- Appodeal.INTERSTITIAL для полноэкранной рекламы;
- Appodeal.REWARDED_VIDEO для видео с вознаграждением;
- Appodeal.NON_SKIPPABLE_VIDEO для видео без возможности отключения;
- Appodeal.BANNER для банеров;
- Appodeal.MREC для банеров размером 300*250.
Типы рекламы могут быть объединены при помощи оператора "|". Например, Appodeal.INTERSTITIAL | Appodeal.REWARDED_VIDEO.
Видео без возможности пропуска и видео с наградой за просмотр не могут быть использованы одновременно. Чтобы определиться, какой формат рекламного объявления выбрать, обратитесь к нашему разделу FAQ .
Appodeal SDK импортирован в ваш проект и вы готовы реализовать показ рекламы. Appodeal предоставляет множество рекламных форматов, вы можете выбрать те, которые наиболее оптимально подходят вашему приложению.
Полноэкранные объявления, содержащие статическое изображение или видео с возможностью пропуска.
Реализация полноэкранной рекламы
Традиционный рекламные объявления, которые занимают место сверху или снизу разметки приложения.
Объявления размером 300x250, которые отображаются внутри содержимого приложения.
Видео без возможности пропуска, которые пользователи должны посмотреть до конца, чтобы получить вознаграждение.
Читайте также: