Как построить и запустить релиз-приложение iOS в Cordova

👁 194 просмотров
1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (Пока оценок нет)
Загрузка...

Будем исходить из того, что вы написали свое первое приложение под Android на Windows, используя, к примеру, редактор Visual Code и теперь хотите на основе уже написанного кода построить приложение под iOS, перекинув все исходник на ваш Mac — машину, где мы будет подготавливать, построить и подписывать приложение под iOS, прибегнув к помощи XCode.

Здесь представлен текст описания одного из вариантов построения приложения Cordova для платформы iOS. Перед началом работы условимся, что у  нас в инструментарии есть следующие необходимые условия:

  • у нас есть Mac OS High Sierra(или неважно какая версия, но чтобы работала стабильно);
  • на нашем Mac OS установлен XCode последней версии(или неважно какой версии, но чтобы работало стабильно);
  • на нашем Mac OS установлен Node.js v8 и выше(или неважно какой версии, но чтобы работало стабильно);
  • на нашем Node.js установлен Cordova;
  • у нас есть годовая подписка на возможность разрабатывать приложения под продукты Apple. Стоит это удовольствие $99, без этого ваш проект так и будет на стадии дебагинга, без возможности устанавливать на сторонние устройства или загружать на App Store.

Это все элементарные элементы, которые понятны для настройки любому разработчику, принявшегося серьезно разработать под iOS и останавливаться, подробно описывая каждый шаг, я не буду.

Подписка на Apple Developer

Особо следует остановиться на покупку лицензии разработки в виде подписки, потому что без этого никак, если вы хотите подписать приложение и распространять его. У Apple распространители делятся на 4 категории:

  1. Sign in with Apple ID — распространители, которые имеют возможность использовать разработку только в режиме тестирования. Т.е., вы не можете распространять ваши приложения за пределы эмулятора на вашем Mac или вашего личного устройства, но весь функционал разработки вам все равно доступен. Стоит $0;
  2. Individual — распространитель в виде индивидуального разработчика. Apple выдает вам сертификат, в котором прописаны ваши личные данные, как физического лица. Стоит $99;
  3. Organization — распространитель от имени организации. Apple выдает вам сертификат, в котором прописаны вашей организации. Стоит $99;
  4. Enterprise Program — распространитель корпоративного ПО. Стоит $299.

Подробно про фичи разработки под тем или иной подпиской можно почитать по ссылке.

Настройка проекта Cordova

Добавляем платформу iOS и подготавливаем проект для XCode

cordova platform add ios
cordova prepare              # или "cordova build"

Развертывание проекта в Cordova

Примечание. Этап развертывания средствами Cordova можно пропустить, так как дальнейщую работу с проектом мы будем производить в XCode.

Дополнительно будет полезно установить вспомогательные утилиты, которые пригодятся в работе c эмуляторами

npm install -g ios-sim
npm install -g ios-deploy

В данной статье мы не будем работать через эти утилиты, а будем работать через XCode. Также через командную строку мы можем задеплоить приложение.

Для развертывания приложения на подключенном iOS устройстве:

cordova run ios --device

Для развертывания приложения на iOS эмуляторе по умолчанию:

cordova emulate ios

Можно использовать cordova run android —list чтобы увидеть все доступные цели и cordova run android —target=имя_устройства для запуска приложения на конкретном устройстве или эмуляторе (например, cordova run android --target="Nexus4_emulator").

Чтобы увидеть дополнительные параметры построения и запуска также можно использовать cordova run —help.

Работа с проектом в XCode iOS SDK

Первым делом открываем сгенерированный проект XCode в директории проекта Cordova по пути ProjectName/platforms/ios/PrjectName.xcpdeproj

Здесь следует рассмотреть несколько пунктов настройки, чтобы сгенерировать релиз проекта.

Первым делом выбираем модуль Cordova в списке и при его контексте нажимаем на вкладку General, где устанавливаем галочку на автоуправление подпиской и в выпадающем нижнем списке выбираем команду разработки. В данном случае там указываем вашу купленную подписку разработчика у Apple

Первым делом выбираем конечное устройство в виде физического устройства

Далее заходим в настройку схемы проекты и там должен быть выбран название проекта,а  не библиотека Cordova

Если он не установлен, то заходим в Edit Scheme и во всех вкладках устанавливаем конфигурацию Build Configuration в режим Release, кроме вкладки Test

Теперь, нам нужно сначала почистить проект нажав на Clean, построить, нажав на Build и архивировать, нажав на Archive

Если мы все правильно настроили в проекте, то проект должен удачно архивировать в формат *.xcarchive по пути проекта ProjectName/platforms/ios/PrjectName.xcarchive

Чтобы увидеть все сгенерированные архивы проектов необходимо найти в верхнем меню Window > Organizer

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

В способе распространения *.ipa выбираем нужный вариант. Если хотим распространить через App Store, о выбираем первый пункт. Второй пунтк — это распространение подписанного приложения с возможность индивидуальной установки без App Store. Другие можно понять по их кратким описаниям, но основные — это 2 первых, если вы новоиспеченный разработчик iOS.

К примеру выберем тип распространения Ad Hoc и жмем на Next и в следующем диалоге у нас будет возможность выбрать какое-то специфическое устройство или все поддерживающие данной разработкой устройства все сразу, также есть возможность добавить файл манифеста, который даст возможность установить приложение только из определенной ссылки скачивания и жмем на Next

В данном шаге необходимо выбрать режим подписи. Оставим автоподпись средой XCode и жмем на Next

Дальше среда будет генерировать подписанные дистрибутивы под разные устройства iOS

По окончании процесса среда выдаст подробную информацию о сборке

Жмем на кнопку Export и среда нас запросит выбрать место хранения сгенерированных подписанных дистрибутивов *.ipa

После сохранения создастся отдельная папка, в которой будут все наши подписанные дистрибутивы iOS

 

Чат на PHP, Ajax, HTML, CSS

👁 293 просмотров
1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (Пока оценок нет)
Загрузка...

Разделим код проекта на несколько частей: база данных, серверная и клиентская.

Клиентская часть

Клиентский интерфейс взимодействия

<!DOCTYPE HTML>
    <html>
    <head>
        <title>PhpAjaxChat</title>
        <!-- У нас всё работает в UTF-8 -->
        <meta http-equiv="content-type" content="text/html; charset=UTF-8">

        <!-- Загружаем стили для чата -->
        <link rel="stylesheet" type="text/css" media="screen" href="style.css" />

        <!-- Подключаем jQuery -->
        <script src="jquery.js"></script>
        <!-- Подключаем скрипт чата -->
        <script src="script.js"></script>
    </head>
    <body>
        <div style="padding: 100px;">
            <h1>Php Ajax Chat</h1>
            <!-- Вот в этих 2-х div-ах будут идти наши сообщения из чата -->
            <div class="chat r4">
                <div id="chat_area"><!-- Сюда мы будем добавлять новые сообщения --></div>
            </div>
            <form id="pac_form" action=""><!-- Наша форма с именем, сообщением и кнопкой для отправки -->
                <table style="width: 100%;">
                    <tr>
                        <td>Имя:</td>
                        <td>Сообщение:</td>
                        <td></td>
                    </tr>
                    <tr>
                        <!-- Поле ввода имени -->
                        <td><input type="text" id="pac_name" class="r4" value="Гость"></td>
    
                        <!-- Поле ввода сообщения -->
                        <td style="width: 80%;"><input type="text" id="pac_text" class="r4" value=""></td>
    
                        <!-- Кнопка "Отправить" -->
                        <td><input type="submit" value="Отправить"></td>
                    </tr>
                </table>
            </form>
        </div>
    </body>
</html>

Скрипт работы на стороне клиента на JQuery/JavaScript

$(document).ready(function () {
                $("#pac_form").submit(Send); // вешаем на форму с именем и сообщением событие которое срабатывает когда нажата кнопка "Отправить" или "Enter"
                $("#pac_text").focus(); // по поле ввода сообщения ставим фокус
                setInterval("Load();", 2000); // создаём таймер который будет вызывать загрузку сообщений каждые 2 секунды (2000 миллисекунд)
            });

            // Функция для отправки сообщения
            function Send() {
                // Выполняем запрос к серверу с помощью jquery ajax: $.post(адрес, {параметры запроса}, функция которая вызывается по завершению запроса)
                $.post("ajax.php",
                        {
                            act: "send",  // указываем скрипту, что мы отправляем новое сообщение и его нужно записать
                            name: $("#pac_name").val(), // имя пользователя
                            text: $("#pac_text").val() //  сам текст сообщения
                        },
                        Load ); // по завершению отправки вызываем функцию загрузки новых сообщений Load()

                $("#pac_text").val(""); // очистим поле ввода сообщения
                $("#pac_text").focus(); // и поставим на него фокус

                return false; // очень важно из Send() вернуть false. Если этого не сделать то произойдёт отправка нашей формы, те страница перезагрузится
            }

            var last_message_id = 0; // номер последнего сообщения, что получил пользователь
            var load_in_process = false; // можем ли мы выполнять сейчас загрузку сообщений. Сначала стоит false, что значит - да, можем

            // Функция для загрузки сообщений
            function Load() {
                // Проверяем можем ли мы загружать сообщения. Это сделано для того, чтобы мы не начали загрузку заново, если старая загрузка ещё не закончилась.
                if(!load_in_process)
                {
                    load_in_process = true; // загрузка началась
                    // отсылаем запрос серверу, который вернёт нам javascript
                    $.post("ajax.php",
                            {
                                act: "load", // указываем на то что это загрузка сообщений
                                last: last_message_id, // передаём номер последнего сообщения который получил пользователь в прошлую загрузку
                                rand: (new Date()).getTime()
                            },
                            function (result) { // в эту функцию в качестве параметра передаётся javascript код, который мы должны выполнить
                                $(".chat").scrollTop($(".chat").get(0).scrollHeight); // прокручиваем сообщения вниз
                                load_in_process = false; // говорим что загрузка закончилась, можем теперь начать новую загрузку
                            });
                }
            }

Стили интерфейса

* {
    margin: 0;
    padding: 0;
    }

    body {
    font: normal normal normal 16px "Trebuchet MS", Arial, Times;
    color: #000000;
    }

    /* Важное свойство */
    .chat {
    height: 500px;
    overflow: auto; /* Это позволяет отображать полосу прокрутки */
    position: relative; /* Это позволяет съезжать тексту в слое, не растягивая страницу */
    text-align: left;
    border: solid #818181 1px;
    }

    .chat div {
    position: absolute; /* Страница остаётся того же размера */
    }

    .chat span {
    display: block;
    }

    input[type=text],textarea {
    width: 100%;
    font: normal normal normal 16px "Trebuchet MS", Arial, Times;
    border: solid #818181 1px;
    }

    /* Для CSS 3 */
    .r4 {
    -moz-border-radius: 4px;
    -khtml-border-radius: 4px;
    -webkit-border-radius: 4px;
    border-radius: 4px;
    }

База данных

В этой таблице у нас будут храниться сообщения чата:

  • id – номер сообщения, он должен быть помечен как AUTO_INCREMENT для того что бы для каждого сообщения создавался уникальный индекс
  • name – имя пользователя отправившего сообщение
  • text – само сообщение
CREATE TABLE `messages` (
    `id` int(5) NOT NULL AUTO_INCREMENT,
    `name` char(255) character SET utf8 NOT NULL,
    `text` text character SET utf8,
    PRIMARY KEY  (`id`)
    );

 

Серверная часть

<?php
// настройки для подключения к MySQl
$config = array('hostname' => 'localhost', 'username' => 'root', 'password' => '', 'dbname' => 'pacdb');

// подключаемся к MySQL, если не вышло то выходим
if (!mysql_connect($config['hostname'], $config['username'], $config['password'])) {
    exit();
}
// Выбираем базу данных, если не вышло то выходим
if (!mysql_select_db($config['dbname'])) {
    exit();
}
mysql_query("SET NAMES 'utf8'"); // говорим MySQl'у то что мы будем работать с UTF-8

Header("Cache-Control: no-cache, must-revalidate"); // говорим браузеру что-бы он не кешировал эту страницу
Header("Pragma: no-cache");

Header("Content-Type: text/javascript; charset=utf-8"); // говорим браузеру что это javascript в кодировке UTF-8

// проверяем есть ли переменная act (send или load), которая указываем нам что делать
if (isset($_POST['act'])) {
    // $_POST['act'] - существует
    switch ($_POST['act']) {
        case "send" : // если она равняется send, вызываем функцию Send()
            Send();
            break;
        case "load" : // если она равняется load, вызываем функцию Load()
            Load();
            break;
        default : // если ни тому и не другому  - выходим
            exit();
    }
}

// Функция выполняем сохранение сообщения в базе данных
function Send()
{
    // тут мы получили две переменные переданные нашим java-скриптом при помощи ajax
    // это:  $_POST['name'] - имя пользователя
    // и $_POST['text'] - сообщение

    $name = substr($_POST['name'], 0, 200); // обрезаем до 200 символов
    $name = htmlspecialchars($name); // заменяем опасные теги (<h1>,<br>, и прочие) на безопасные
    $name = mysql_real_escape_string($name); // функция экранирует все спец-символы в unescaped_string , вследствие чего, её можно безопасно использовать в mysql_query()

    $text = substr($_POST['text'], 0, 200); // обрезаем до 200 символов
    $text = htmlspecialchars($text); // заменяем опасные теги (<h1>,<br>, и прочие) на безопасные
    $text = mysql_real_escape_string($text); // функция экранирует все спец-символы в unescaped_string , вследствие чего, её можно безопасно использовать в mysql_query()

    // добавляем новую запись в таблицу messages
    mysql_query("INSERT INTO messages (name,text) VALUES ('" . $name . "', '" . $text . "')");
    }



    // функция выполняем загрузку сообщений из базы данных и отправку их пользователю через ajax виде java-скрипта
    function Load()
    {
    // тут мы получили переменную переданную нашим java-скриптом при помощи ajax
    // это:  $_POST['last'] - номер последнего сообщения которое загрузилось у пользователя

    $last_message_id = intval($_POST['last']); // возвращает целое значение переменной

    // выполняем запрос к базе данных для получения 10 сообщений последних сообщений с номером большим чем $last_message_id
    $query = mysql_query("SELECT * FROM messages WHERE ( id > $last_message_id ) ORDER BY id DESC LIMIT 10");

    // проверяем есть ли какие-нибудь новые сообщения
    if (mysql_num_rows($query) > 0) {
    // начинаем формировать javascript который мы передадим клиенту
    $js = 'var chat = $("#chat_area");'; // получаем "указатель" на div, в который мы добавим новые сообщения

    // следующий конструкцией мы получаем массив сообщений из нашего запроса
    $messages = array();
    while ($row = mysql_fetch_array($query)) {
    $messages[] = $row;
    }

    // записываем номер последнего сообщения
    // [0] - это вернёт нам первый элемент в массиве $messages, но так как мы выполнили запрос с параметром "DESC" (в обратном порядке),
    // то это получается номер последнего сообщения в базе данных
    $last_message_id = $messages[0]['id'];

    // переворачиваем массив (теперь он в правильном порядке)
    $messages = array_reverse($messages);

    // идём по всем элементам массива $messages
    foreach ($messages as $value) {
    // продолжаем формировать скрипт для отправки пользователю
    $js .= 'chat.append("<span>' . $value['name'] . '» ' . $value['text'] . '</span>");'; // добавить сообщние (<span>Имя » текст сообщения</span>) в наш div
    }

    $js .= "last_message_id = $last_message_id;"; // запишем номер последнего полученного сообщения, что бы в следующий раз начать загрузку с этого сообщения

    // отправляем полученный код пользователю, где он будет выполнен при помощи функции eval()
    echo $js;
    }
}

?>

Использование Google Firebase Cloud Messages (FCM) в проектах

👁 109 просмотров
1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (Пока оценок нет)
Загрузка...

Firebase Cloud Messaging (FCM) — это межплатформенное решение для обмена сообщениями, которое позволяет надежно доставлять сообщения без каких-либо затрат. Используя FCM, вы можете уведомить клиентское приложение о том, что для синхронизации доступны новые электронные или другие данные.

Статья состоит из 2 частей. В первой рассматривается введение и начальная настройка, а далее подробно раскрывается принцип отправки и обработки уведомлений FCM.

Часть 2. Принцип работы отправки и приемки уведомлений в Firebase Cloud Messages (FCM)

👁 421 просмотров
1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (Пока оценок нет)
Загрузка...

Это перевод и дополнение официальной статьи по плагину cordova-plugin-fcm.

Установка

Процесс установки мы уже рассматривали в первой части статьи. Перед началом, убедитесь, что у вас есть google-services.json для Android или GoogleService-Info.plist для iOS в корневой папке вашего проекта Cordova. Вам не нужно настраивать что-либо еще, чтобы иметь push-уведомление, работающее для обеих платформ, все это волшебство. Установка плагина FCM занимает не много времени

cordova plugin add cordova-plugin-fcm

Файлы конфигурации Firebase

Получите необходимые файлы конфигурации для Android или iOS из Firebase Console (см. документацию: https://firebase.google.com/docs/).

Детали компиляции под Android

Поместите загруженный файл «google-services.json» в корневую папку проекта Кордовы. Вам нужно будет убедиться, что вы установили соответствующие библиотеки Android SDK.

Если хотите добавить значок уведомления в Android> 5.0, то вы должны поместить картинку со значком с именем «fcm_push_icon.png» в папку «res» так же, как вы добавляете другие значки приложений. Если вы не установите этот ресурс, SDK будет использовать значок по умолчанию для вашего приложения, который может не соответствовать стандартам для Android> 5.0.

Детали компиляции под iOS

Поместите загруженный файл «GoogleService-Info.plist» в корневую папку проекта Cordova.

Использование FCM в Cordova

Пример заполнения JSON данных для отправки на сервер FCM по REST API представлен в ниже в подразделе Отправить уведомление. Пример из песочницы (REST API).

Настоятельно рекомендуется использовать REST API для отправки push-уведомлений, потому что консоль Firebase не имеет всех функций. Обратите внимание на пример в песочнице, чтобы научиться правильно использовать плагин. Вы также можете протестировать свои уведомления на бесплатном сервере тестирования: https://cordova-plugin-fcm.appspot.com.

Получение обновления токена

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

//FCMPlugin.onTokenRefresh( onTokenRefreshCallback(token) );
/**
 * Обратите внимание, что этот Callback будет срабатывать каждый раз, 
 * когда будет сгенерироваться новый токен, в том числе и первый раз.
 */
FCMPlugin.onTokenRefresh(function(token){
    alert( token );
});

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

Получение токена

Функция getToken возвращает токен текущего устройства или нулевое значение, если токен еще не установлен для устройства.

//FCMPlugin.getToken( successCallback(token), errorCallback(err) );
/**
 * Имейте в виду, то функция возвращает нулевое значение, 
 * если токен не был установлен еще.
 */
FCMPlugin.getToken(function(token){
    alert(token);
});
Подписаться на тему(топик)
//FCMPlugin.subscribeToTopic( topic, successCallback(msg), errorCallback(err) );
/**
 * Все устройства подписаны автоматически, 
 * ко 'всем' - и 'ios' и 'android' темам соответственно.
 * Должен соответствовать следующему регулярному выражению: "[a-zA-Z0-9-_.~%]{1,900}"
 */
 FCMPlugin.subscribeToTopic('topicExample');
Отписаться от темы(топика)
//FCMPlugin.unsubscribeFromTopic( topic, successCallback(msg), errorCallback(err) );
FCMPlugin.unsubscribeFromTopic('topicExample');
Получение данных push-уведомлений

Функция FCMPlugin.onNotification(…) принимает все уведомления, по токену или по топику, на который подписаны пользователи

//FCMPlugin.onNotification( onNotificationCallback(data), successCallback(msg), errorCallback(err) )
/**
 * Здесь Вы можете определить свое поведение приложения на основе данных уведомления.
 */
 FCMPlugin.onNotification(function(data){
    if(data.wasTapped){
      //Уведомление было получено в трей устройства и постучал пользователю.
      alert( JSON.stringify(data) );
    }else{
      //Уведомление было получено на переднем плане. Возможно, пользователя нужно уведомить.
      alert( JSON.stringify(data) );
    }
});

Следует отметить, что если вы используете Vue.js, как программную архитектуру или jQuery, то необходимо дождаться, пока ресурсы устройства подгрузятся, иначе можно получить ошибку, что плагин FCMPlugin не определен. Один из вариантов — размещение обработчика в setTimeout

var app = {
    initialize: function() {
        this.bindEvents();
        this.setupApp();
    },
    bindEvents: function() {
        document.addEventListener('deviceready', this.onDeviceReady, false);
    },
    onDeviceReady: function() {
    },
    setupApp: function() {
        //Программная логика на какой-то библиотеке
        setTimeout(function(){
            FCMPlugin.onNotification(function(data) {
                console.log(data);
            });
        },2000);
    }
}

app.initialize();

или разместить весь код в обработчике события deviceready

var app = {
    initialize: function() {
        this.bindEvents();
        this.setupApp();
    },
    bindEvents: function() {
        document.addEventListener('deviceready', this.onDeviceReady, false);
    },
    onDeviceReady: function() {
        FCMPlugin.onNotification(function(data) {
            console.log(data);
        });
    },
    setupApp: function() {
        //Программная логика на какой-то библиотеке
    }
}

app.initialize();
Отправить уведомление. Пример из песочницы (REST API)

Чтобы отправлять FCM — уведомления тому или иному устройству нам необходимо знать токен этого устройства и тему (топик), на который подписано устройство.

Как получить токен, подписаться устройство на тему(топик) и как отписаться мы выше уже привели примеры с кодом. Теперь нам осталось уметь отправлять уведомления и как мы уже говорили выше, для этого нужно отправлять JSON — с заполненными данными методом POST на адрес https://fcm.googleapis.com/fcm/send и потребуется указать еще 2 заголовка отправки, как Content-Type: application/json и Authorization: key=AIzaSy*******************. Первый заголовок указывает, что мы передаем JSON — данные и второй — что, запрос содержит учетные данные для аутентификации пользовательского агента с сервером. Второй заголовок принимает параметр ключа API для веб-приложения, который можно узнать в консоли FCM

 

Пример этой JSON приведен ниже и еще ниже описаны параметры, которые входят в эту строку.

Дополнительно:

{
  "notification":{
    "title":"Notification title",
    "body":"Notification body",
    "sound":"default",
    "click_action":"FCM_PLUGIN_ACTIVITY",
    "icon":"fcm_push_icon"
  },
  "data":{
    "param1":"value1",
    "param2":"value2"
  },
    "to":"/topics/topicExample",
    "priority":"high",
    "restricted_package_name":""
}

Метод передачи и заголовки с параметрами:

  • POST: https://fcm.googleapis.com/fcm/send
  • HEADER: Content-Type: application/json
  • HEADER: Authorization: key=AIzaSy*******************

Передаваемые параметры в JSON методом POST:

  • sound — необязательный параметр для указания своего звука уведомления
  • click_action — должен присутствовать с указанным значением для Android
  • icon — значок — имя ресурса для Android >5.0
  • data — положите любые «param»:»value» и получите их в JavaScript callback — уведомлениях
  • to — токен устройства или /topic/topicExample
  • priority — должен быть установлен в «high» для доставки уведомлений закрытым iOS — приложениям
  • restricted_package_name — Необязательное поле, если вы хотите отправить только на ограниченный пакет приложений (т.е.: com.myapp.test)
Пример отправки POST — запроса FCM — уведомления при помощи jQuery

В коде представлен пример AJAX запроса методом POST с указанием необходимых заголовков и их параметров

var fcm_server_key = "AIzaSy*******************";

$.ajax({
  method: "POST",
  dataType: 'json',
  headers: {'Content-Type': 'application/json', 'Authorization': 'key=' + fcm_server_key},
  url: "https://fcm.googleapis.com/fcm/send",
  data: JSON.stringify(
      {
        "notification":{
          "title":"Title",  //Любое значение
          "body": "Body",  //Любое значение
          "sound": "default", //Если вы хотите звучание в уведомление
          "click_action": "FCM_PLUGIN_ACTIVITY",  //Должен присутствовать для Android
          "icon": "fcm_push_icon"  //Белая иконка ресурса Android
        },
        "data":{
          "param1":"value1",  //Любые данные, получаемые в callback - уведомлении
          "param2": "Prueba"
        },
        "to":"/topics/all", //Тема(топик) или какое-то одно устройство
        "priority":"high", //Если не установлен, то уведомления не могут быть доставлены для закрытых приложений iOS
        "restricted_package_name":"" //Необязательно. Устанавливается для фильтрации приложений
      }
    )
}).success(function(data){
  alert("Success: " + JSON.stringify(data));
}).error(function(data){
  alert("Error: " + JSON.stringify(data));
});
Пример отправки POST — запроса FCM — уведомления при помощи cURL с сервера

Вот пример cURL. Не забудьте заменить авторизацию заголовка собственной учетной записью службы Firebase

curl -X POST \
  https://fcm.googleapis.com/fcm/send \
  -H 'authorization: key=YOUR-FIREBASE-SERVER-KEY' \
  -H 'cache-control: no-cache' \
  -H 'content-type: application/json' \
  -d '{
	"to": "/topics/all",
	"notification": {
	    "title": "Hello World!",
	    "body": "Proin rutrum, nunc vitae porta volutpat, mi nibh.",
        "icon": "fcm_push_icon",
    	"color": "#F79838",
        "sound":"default"
	},
	"priority": "high",
        "click_action":"FCM_PLUGIN_ACTIVITY"
}'

 

Пример отправки POST — запроса FCM — уведомления при помощи Axios из устройства

Axios — это отличная клиентская библиотека, которая использует промисы по умолчанию, а так же работает как на сервере(что делает его подходящим для получения данных при рендеринге на сервере), так и на клиенте. Axios очень легко начать использовать с Vue.js. Поэтому, если у вас приложение написано с использованием Vue.js или Ionic, то отправку уведомлений нам придется реализовать через Axios

var fcm_server_key = "AIzaSy*******************";

axios({
  method: 'POST', //Метод отправки
  url: 'https://fcm.googleapis.com/fcm/send',
  data: JSON.stringify(
      {
        "notification":{
          "title":"Title",  //Любое значение
          "body": "Body",  //Любое значение
          "sound": "default", //Если вы хотите звучание в уведомление
          "click_action": "FCM_PLUGIN_ACTIVITY",  //Должен присутствовать для Android
          "icon": "fcm_push_icon"  //Белая иконка ресурса Android
        },
        "data":{
          "param1":"value1",  //Любые данные, получаемые в callback - уведомлении
          "param2": "Prueba"
        },
        "to":"/topics/all", //Тема(топик) или какое-то одно устройство
        "priority":"high", //Если не установлен, то уведомления не могут быть доставлены для закрытых приложений iOS
        "restricted_package_name":"" //Необязательно. Устанавливается для фильтрации приложений
      }
    ),
  headers: {
    'Content-Type': 'application/json', 'Authorization': 'key=' + fcm_server_key
  }
}).then((response) => {
    console.log(response)
})
.catch((error) => {
    console.log(error)
});
    
Пример отправки POST — запроса FCM — уведомления при помощи Axios из Node.js

Для начала нам потребуется установить Axios в систему при помощи простой команды через менеджер модулей npm

npm install axios

Теперь создаем index.js в корневом каталоге вашего проекта и заполняем его следующим образом

var axios = require('axios');
const fcmKey = 'YOUR_FCM_SERVER_KEY'
const fcmUrl = 'https://fcm.googleapis.com/fcm/send'
const phoneToken = 'MY_PHONE_TOKEN'

Здесь мы просто импортируем модуль axios, устанавливаем ключ сервера api и указываем адрес сервера взаимодействия, на который мы отправляем POST наши уведомления. Константа phoneToken является идентификатором вашего телефона, который раздается клиентам сервером FCM для регистрации в системе обмена.

Чтобы наше уведомление отвечало на событие, мы заставим его прослушивать конечную точку тестирования в базе данных Firebase

ref.child('test').on('child_added', (snapshot) => {
  const notification = buildNotification(snapshot.val())
  sendNotification(notification)
})

Как вы можете видеть, это просто наблюдает за конечной точкой/тестом(endpoint /test) для нового потомка. Потомок — это просто ключ/значение(key/value) с ключом «name». Перейдем к нашей функции buildNotification()

function buildNotification (data) {
  const { name } = data
  return {
    "notification": {
      "title":"New name",
      "text":`${name} is awesome`,
      "sound":"default"
    },
    "to":phoneToken,
    "priority":"high"
  }
}

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

function buildRequest (notification) {
  return {
    url: fcmURL,
    method: 'post',
    headers: {
      "Content-Type":"application/json",
      "Authorization":`key=${fcmKey}`
    },
    data: notification
  }
}
function sendNotification(notification) {
  const request = buildRequest(notification)
axios(request).then((r) => {
    console.log(r)
  }).catch((error) => {
    console.log(error)
  })
}

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

Если у вас не получилось, то есть несколько вещей, на которые стоит обратить внимание:

  • Убедитесь, что приоритет установлен на высокий
  • Убедитесь, что у вас есть сертификат push-уведомления, загруженный в консоль Firebase (В iOS 10 могут быть изменения на использование)

Как это работает

К примеру, мы отправляем push-уведомление на одно устройство или в тему(топик). При этом возможны 2 случая:

a. Приложение находится на переднем плане:

  • Данные уведомления принимаются в Callback — вызове JavaScript без сообщения в панели уведомлений (это обычное поведение push — уведомлений в мобильных ).

b. Приложение находится в фоновом режиме или закрыто:

  • Устройство отображает сообщение уведомления на панели уведомлений устройства.
  • Если пользователь удаляет уведомление, приложение выходит на передний план и данные уведомления принимаются в Callback —  вызове JavaScript.
  • Если пользователь не обращается к уведомлению, но открывает приложение, то ничего не происходит до тех пор, пока уведомление не будет обработано.

Реальный пример отправки из Axios

Код отправки уведомления

/**
 * to - кому и куда отправляется уведомление и может быть:
 * 1. токеном
 * 2. топиком
 * 3. или можем отправить всем сразу
 * title - заголовок уведомления
 * message - тело уведомления
 * apiKey - секретный ключ из облачного приложения Android Google FCM
 */
var to =  "cicx9RtKXdk:APA91bGsk16she-DPkwjSrM5_9ZfJ4v189k53ETUF081DXtIH6vl6MwsSy8ky6Orn5MUzZJqzUoCNHOZ3BxWquTvIJis2X5zzFtJQSY6ozQFUsMb6157lKS27HTDN4vuMcF4_CuTpEJH";          
//var to = "/topics/topicExample";
//var to = "/topics/all";

var title = "Новое сообщение";
var message = "Мое сообщение!";
var apiKey = "AIzaSyDqYOMoJ1jVoIfLTErYboDOtuqfCHcnWfE";

axios({
method: 'POST', //Метод отправки
url: 'https://fcm.googleapis.com/fcm/send', 
data:{
    "notification":{
      "title":title,  //Любое значение
      "body": message,  //Любое значение
      "sound": "default", //Если вы хотите звучание в уведомление
      "click_action": "FCM_PLUGIN_ACTIVITY",  //Должен присутствовать для Android
      "icon": "fcm_push_icon"  //Белая иконка ресурса Android
    },
    "data":{
      "param1":"value1",  //Любые данные, получаемые в callback - уведомлении
      "param2": "Prueba"
    },
    "to":to,
    "priority":"high" //Если не установлен, то уведомления не могут быть доставлены для закрытых приложений iOS
    //"restricted_package_name":"" //Необязательно. Можно закомментить
},
headers: {
    'Content-Type': 'application/json', 'Authorization': 'key=' + apiKey
}
}).then((response) => {
console.log(response)
})
.catch((error) => {
console.log(error)
});

Код приемки уведомления. Необходимо ждать, пока подгрузяться ресурсы

setTimeout(function(){
    if(data.wasTapped){
      //Уведомление было получено в трей устройства и постучал пользователю.
      alert( JSON.stringify(data) );
    }else{
      //Уведомление было получено на переднем плане. Возможно, пользователя нужно уведомить.
      alert( JSON.stringify(data) );
    }
},2000);

или можно закинуть в обработчик Cordova ‘deviceready’

var app = {
    initialize: function() {
        this.bindEvents();
        this.setupApp();
    },
    bindEvents: function() {
        document.addEventListener('deviceready', this.onDeviceReady, false);
    },
    onDeviceReady: function() {
        FCMPlugin.onNotification(function(data) {
            console.log(data);
        });
    },
    setupApp: function() {
        //Программная логика на какой-то библиотеке
    }
}

app.initialize();

 

Автоматическая прокрутка скролла элемента вниз

👁 97 просмотров
1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (Пока оценок нет)
Загрузка...

Допустим, есть такая задача, при котором в элементе есть некоторый список элементов, которые добавляется по мере необходимости и при этом. при каждом добавлении необходимо, чтобы список автоматически прокручивался вниз. Банальной задачей может быть механизм обмена сообщениями

Код HTML:

<ul id="list">
  <li>Item 1</li>
  <li>Item 1</li>
  <li>Item 2</li>
  <li>Item 3</li>
  <li>Item 4</li>
  <li>Item 5</li>
  <li>Item 4</li>
  <li>Item 7</li>
  <li>Item 8</li>
  <li>Item 9</li>
  <li>Item 10</li>
  <li>Item 11</li>
  <li>Item 12</li>
  <li>Item 13</li>
</ul>

Код CSS:

#list {
  height: 100pt;
  overflow-y: scroll;
}

Код JavaScript:

var elem = document.getElementById('list');
elem.scrollTop = elem.scrollHeight;

Ниже пример в песочнице

Пулл соединений MySQL/Node.js

👁 112 просмотров
1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (Пока оценок нет)
Загрузка...

Ниже код, который организует это при помощи пулла соединений, который гораздо легче настраивать без непредвиденных ошибок:

var mysql = require('mysql');

var dbConfig = {
    host: "myhost",
    user: "user",
    password: "password",
    database: "dbname",
    port:3306
};

var user = require('./routes/user');
app.use('/user', user);
app.post('/user', function(req, res) {
    res.set({
        'Access-Control-Allow-Origin': '*',
        'Access-Control-Allow-Methods': 'GET, POST, OPTIONS, PUT, PATCH, DELETE',
        'Access-Control-Allow-Headers': 'X-Requested-With',
        'Access-Control-Allow-Credentials': 'true'
    });
    var data = req.body;
    var mysqlPool  = mysql.createPool(dbConfig);
    if(data.key=="ENTER_CUSTOMER")
    {
        mysqlPool.getConnection(function(err, connection) {
            if(err) throw err;
            connection.query("SELECT * FROM user where email LIKE '"+data.userName+"'", function(err, result, fields) {
                if(err) {
                    connection.release();
                    console.error(err);                   
                    return;
                }
                res.json({"key":data.key,"result":result});
                connection.release();
            });
        }); 
    }
});

 

Авторизация в мобильном устройстве на Cordova через Facebook

👁 125 просмотров
1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (Пока оценок нет)
Загрузка...

Вход в Cordova — приложение с помощью Facebook является одной из наиболее востребованных статей, и здесь мы рассмотрим один из способов реализовать данную настройку.

Для реализации входа будет использован сторонний плагин cordova-plugin-facebook4, который является форком из репозитория phonegap-facebook-plugin.

Данный плагин использует последний SDK SDK для Facebook, позволяя реализовать получение данных из профиля Facebook в проектах Cordova.

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

Нам нужно будет создать новое приложение для Facebook через свой профиль и подключить наше Facebook — приложение к приложению Cordova и результат этого будет похож следующим образом:

  • если пользователь не авторизирован в Facebook, то вывести формы авторизации;
  • подтверждение, что вы даете разрешение на доступ к своим данным через приложение Facebook приложению Cordova;
  • передача данных нашего профиля приложению на Cordova и использование для регистрации или для входа в систему.

Создаем новое приложение Facebook

Заходим в свой аккаунт на Facebook и в левом списке ищем пункт Приложения

Жмем на пункт "Управление приложениями"
Жмем на пункт «Управление приложениями»

 

Создаем новое приложение

Тут мы создаем новое приложение или используем существующее. У меня оно уже есть
Тут мы создаем новое приложение или используем существующее. У меня оно уже есть

Выбираем для приложения продукты авторизации

Тут добавляем новый продукт для приложения. Для авторизации достаточно добавить продукт "Вход через Facebook"
Тут добавляем новый продукт для приложения. Для авторизации достаточно добавить продукт «Вход через Facebook»

Обращаем внимание на ID приложения. Он нам нужен будет на этапе настройки плагина cordova-plugin-facebook4 .

Далее настраиваем наше приложение, заполняя основную информацию

Заполняем основную информацию в настройках приложения
Заполняем основную информацию в настройках приложения

И далее основное — добавление платформ к приложению. В данном примере добавим только платформу Android, но вам никто не мешает добавить и остальные

Тут добавляем необходимые для нас платформы, к которым наше приложение Facebook будет комуницировать с этими платформами
Тут добавляем необходимые для нас платформы, к которым наше приложение Facebook будет комуницировать с этими платформами

 

На этапе добавления, в данном случает добавления платформы Android, достаточно прописать идентификатор приложения в Google Play. Чтобы приложение работало оно может быть и не опубликовано в Google Play — это необязательно, но прописать индентификатор необходимо для работоспособности.

Настройка клиентского приложения на Cordova

После создания приложения Cordova необходимо добавить вышеупомянутый плагин командой с параметрами приложения Facebook

cordova plugin add cordova-plugin-facebook4 --save --variable APP_ID="123456789" --variable APP_NAME="myApplication"
  • APP_ID — это ИД приложения Facebook;
  • APP_NAME — имя приложения Facebook.

Теперь код SDK Facebook для авторизации через приложение доступно через код приложения Cordova и сначала нужно инициализировать

        window.fbAsyncInit = function() {
            FB.init({
                appId      : '1971003386550161',
                xfbml      : true,
                version    : 'v2.4'
            });
        };

Далее выполняем код авторизации

                    try {
                        var fbLoginSuccess = function (userData) {
                             if (userData.status=='connected'){
                                  facebookConnectPlugin.api("me/?fields=id,last_name,first_name,birthday,email, picture.width(200).height(200)", ['public_profile', 'user_friends', 'email'],
                                       function onSuccess (result) {
                                            alert("Result: "+JSON.stringify(result));
                                       }, function onError (error) {
                                            alert("Failed: "+JSON.stringify(error));
                                       }
                                  );
                             }
                        };
                        facebookConnectPlugin.login(["public_profile"], fbLoginSuccess,
                             function loginError (error) {
                                  alert('error='+JSON.stringify(error))
                             }
                        );
                   }
                   catch (e) {
                        alert('error1='+e.message);
                   }
                }

Результатом будет следующие данные, которые мы уже можем использовать в нашем приложении

Автоматизация подписи гибридных приложений Android

👁 146 просмотров
1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (Пока оценок нет)
Загрузка...

  1. Основные положения электронной подписи приложений
  2. Способы генерации ключей подписи и хранилища ключей
  3. Разница между хранилищами *.jks и *.keystore
  4. Ручная подписка APK
  5. Подписка APK на Google Play
  6. Соображения подписи, безопасности и удаление подписки из сборки APK
  7. Автоматизация процесса подписи на этапе сборки APK
  8. Автоматизация подписи гибридных приложений Android

Допустим, что у вас есть гибридное приложение, которое было спроектировано с использование фреймворка Ionic или Cordova с использованием Crosswalk.

Настроив автоматизацию, вы сможете создать подписанный release вашего APK, готовый для публикации на Google Play Store.

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

Использование Crosswalk в вашем проекте Ionic так же просто, как ввести эту команду:

ionic browser add crosswalk

Ionic позаботится о том, чтобы установить для вас Crosswalk.

Когда вы хотите опубликовать свое приложение в Google Play Store, вам нужно построить APK в режиме выпуска т.е. release, подписать его ключом вашего хранилища ключей и сделать zipalign пакет для его оптимизации.

Условимся, что у вас уже есть сгенерированные ключи в хранилище ключей и нам остается настроить, чтобы система автоматически подписывала приложение на этапе построения release, а если хотите подробно подробно почитать про это, относительно кроссплатформенных приложений на Ionic, то можете обратиться к официальному источнику.

Для начала нам необходимо создать файл под именем release-signing.properties в директории проекта project_folder/platforms/android/. В этот файл добавляем пару строк

storeFile=/path/to/keystore/yourname.keystore
keyAlias=youralias

Конечно же, вы можете поменять путь к файлу ваших ключей и алиас ключа. Затем вы должны построить вашу сборку release

ionic build --release android

Появится небольшое окно с запросом пароля хранилища ключей и пароля ключа. Если вы не хотите вводить два пароля каждый раз, вы можете записать их в файлах release-signing.properties, добавив две строки, похожие на следующие

storeFile=/path/to/keystore/yourname.keystore
keyAlias=youralias
storePassword=your_keystore_password
keyPassword=your_key_password

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

После построения вы найдете построенный APK в директории проекта project_folder/platforms/android/build/outputs/apk/. Обычно, там будут 2 вида APK под именами android-x86-release.apk и android-armv7-release.apk.

Замечание 1.Помните, что вы должны загружать как x86, так и armv7 apks в Play Store, потому что с помощью Crosswalk ваше приложение содержит собственный код, специфичный для архитектуры.

Замечание 2. Не забудьте активировать «расширенный режим» в консоли разработчика (если вы находитесь в «Простом режиме», можно активировать только один apk за один раз) и загрузить один APK за другим. Google достаточно умен, понимая, что APK нацелены на две разные платформы. дополнительно про это можете почитать на официальном сайте.

 

Подписка APK на Google Play

👁 293 просмотров
1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (Пока оценок нет)
Загрузка...

  1. Основные положения электронной подписи приложений
  2. Способы генерации ключей подписи и хранилища ключей
  3. Разница между хранилищами *.jks и *.keystore
  4. Ручная подписка APK
  5. Подписка APK на Google Play
  6. Соображения подписи, безопасности и удаление подписки из сборки APK
  7. Автоматизация процесса подписи на этапе сборки APK
  8. Автоматизация подписи гибридных приложений Android

В данном посте рассмотрим, как управлять ключами подписи приложений, используя сервисы Google Play.

Программа подписания приложений Google Play позволяет вам управлять ключами подписи для новых или опубликованных приложений. При этом ключи надежно защищены, ведь Google хранит их так же, как и собственные ключи.

Если вы потеряли доступ к хранилищу ключей или считаете, что оно было взломано, программа подписания приложений Google Play позволяет сбросить ключ загрузки. Пользователям, которые не зарегистрированы в программе подписания приложений Google Play и потеряли доступ к хранилищу ключей, придется опубликовать приложение заново с другим названием пакета.

О программе подписания приложений Google Play

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

Если вы зарегистрированы в программе подписания приложений Google Play, то подписываете приложение ключом загрузки. Google проверяет и удаляет подпись ключа загрузки, а затем подписывает приложение с помощью исходного ключа подписи. После этого оно становится доступно пользователям.

Важно! Регистрацию в программе подписания приложений Google Play нельзя отменить.

Регистрироваться в программе подписания приложений Google Play необязательно. Вы можете управлять собственными ключами, как и раньше.

Для регистрации в программе подписания приложений Google Play необходим аккаунт Play Console. Приняв условия программы, вы сможете регистрировать в ней свои приложения.

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

Примечание. Если вы принимаете условия программы, это не означает, что все приложения вашего аккаунта разработчика будут автоматически зарегистрированы в программе подписания.

Типы ключей и определения
  • Ключ подписи приложения – ключ, которым подписывается APK-файл на устройстве пользователя. Пока вы не зарегистрировались в программе подписания приложений Google Play, этот ключ находится у вас, и вы подписываете им APK-файлы. После регистрации в программе вам потребуется загрузить его в Google.
  • Ключ загрузки – новый ключ, который вы создаете при регистрации в программе. В дальнейшем вы будете подписывать им все APK-файлы перед их загрузкой в Play Console.
  • Закрытый ключ – ключ, который используется для подписи APK-файлов. Он доступен только вам.
  • Открытый ключ – ключ, который используется для подтверждения подписи APK-файла. Он доступен для всех.
  • Сертификат – файл, который содержит открытый ключ, а также дополнительную информацию о владельце ключа.
  • Инструмент PEPK – используется для экспорта закрытых ключей из хранилища Java и их шифрования для передачи в Google Play при регистрации в программе подписания приложений Google Play.
Рекомендации
  • Чтобы защитить аккаунт разработчика, включите двухэтапную аутентификацию для всех аккаунтов, у которых есть доступ к Play Console.
  • Если вы хотите протестировать APK-файл, подписанный ключом загрузки, зарегистрируйте ключ в службе или API, которые используют подпись приложения для аутентификации (например, API Google Карт или пакете разработчика Facebook). Если вы используете API Google, можно зарегистрировать сертификат загрузки в Google Cloud Console.

Обзор шагов по использованию программы подписки Google App Play

Есть 2 варианта начала использования программы подписки Google App Play: использование с публикацией нового приложения и использование с уже опубликованными приложениями с локальными хранилищами ключей подписи без сервисов Google App Play.

Если вы публикуете новые приложения

  1. Воспользуйтесь инструкциями на этой странице.
  2. Подпишите новый APK-файл ключом загрузки.
Информация о ключе загрузки
  • Ключ загрузки регистрируется только в Google и нужен для того, чтобы подтвердить личность создателя приложения.
  • Ваша подпись удаляется из всех загруженных APK-файлов, прежде чем они попадают к пользователям.
Ограничения
  • Ключ загрузки должен использовать шифрование RSA и быть не менее 2048 битов.
  • Не поддерживаются ключи DSA и EC, а также ключи RSA размером менее 2048 битов.

  1. Откройте Play Console.
  2. Выберите приложение.
  3. В меню слева выберите Управление релизом > Версии приложения.
  4. Напротив пункта «Программа подписания приложений Google Play» нажмите Принять.

Шаг 3. Загрузите подписанное приложение.

  1. Подготовьте и внедрите версию.
  2. Google удалит подпись ключа загрузки и подпишет приложение с помощью нового ключа. После этого оно станет доступно пользователям.

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

Чтобы найти сертификат ключа, который Google использует для подписи APK-файла:

  1. Войдите в Play Console.
  2. Выберите приложение.
  3. В меню слева нажмите Управление релизом > Подписи приложений.
  4. На открывшейся странице доступны наиболее распространенные отпечатки для сертификата цифровой подписи (MD5, SHA-1 и SHA-256). Если поставщик API требует другой тип цифрового отпечатка, вы можете скачать оригинальный сертификат в формате DER и преобразовать его нужным образом.

Если вы уже опубликовали свои приложения

Вот как зарегистрировать приложение:

  1. Войдите в Play Console.
  2. Выберите приложение.
  3. В меню слева нажмите Управление релизом > Подписи приложений.
  4. Ознакомьтесь с Условиями использования и выберите Принять.

Выполните следующие действия:

  1. Найдите исходный ключ подписи приложения.
  2. Войдите в Play Console.
  3. Выберите приложение.
  4. В меню слева нажмите Управление релизом > Подписи приложений.
  5. Следуя инструкциям на экране, загрузите исходный ключ подписи, а затем создайте ключ загрузки и зарегистрируйте его в Google.
  6. На следующем экране вы увидите цифровой отпечаток сертификата своего приложения.
Информация о ключе загрузки
  • Ключ загрузки регистрируется только в Google и нужен для того, чтобы подтвердить личность создателя приложения.
  • Ключ загрузки удаляется из всех загруженных APK-файлов, прежде чем они попадают к пользователям.
Ограничения
  • Ключ загрузки должен использовать шифрование RSA и быть не менее 2048 битов.
  • Не поддерживаются ключи DSA и EC, а также ключи RSA размером менее 2048 битов.

Создав ключ загрузки, выберите для него хранилище. Вот некоторые возможные варианты:

  • локальная система;
  • защищенный локальный сервер (с различными списками контроля доступа);
  • облачная система (с различными списками контроля доступа);
  • специальные сервисы по управлению ключами;
  • репозитории Git.

Шаг 4. Подпишите следующее обновление своего приложения ключом загрузки.

Теперь все обновления опубликованного приложения должны подписываться ключом загрузки. Google подтвердит вашу личность и подпишет APK-файл с помощью нового ключа, после чего обновление станет доступно пользователям.

Вот как найти ключ загрузки:

  1. Войдите в Play Console.
  2. Выберите приложение.
  3. В меню слева нажмите Управление релизом > Подписи приложений.

Изменения в APK-файлах

Файл AndroidManifest.xml приложений, подписанных Google, будет содержать запись «derived APK ID». В теге application появится элемент метаданных, который ссылается на

<meta-data android:name="com.android.vending.derived.apk.id" android:value="[ID]" />

Идентификатор измененного APK-файла будет указываться в стандартных отчетах об ошибках. По идентификатору производного APK вы сможете найти APK-файл, который был загружен в Google Play.

Чтобы скачать APK-файл, подписанный Google Play, откройте Play Console и выберите Управление релизом > Библиотека объектов.

Утерянные или взломанные закрытые ключи

Пользователи, зарегистрированные в программе подписания ключей Google Play, могут сбросить свой ключ загрузки в случаях:

  • утери;
  • взлома закрытого ключа.

Примечание. Сброс ключа загрузки не затрагивает ключ подписи, с помощью которого Google Play подписывает APK перед отправкой пользователям.

Как сбросить ключ загрузки

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

Затем экспортируйте сертификат для нового ключа в формате PEM.

keytool -export -rfc -alias <upload> -file <upload_certificate.pem> -keystore <keystore.jks>

Наша служба поддержки принимает запросы на сброс ключей только от владельцев учетных записейPlay Console.

Чтобы связаться с нами, владельцу учетной записи нужно заполнить эту форму и прикрепить к ней файл upload_certificate.pem.

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

Автоматизация процесса подписи на этапе сборки APK

👁 129 просмотров
1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (Пока оценок нет)
Загрузка...

  1. Основные положения электронной подписи приложений
  2. Способы генерации ключей подписи и хранилища ключей
  3. Разница между хранилищами *.jks и *.keystore
  4. Ручная подписка APK
  5. Подписка APK на Google Play
  6. Соображения подписи, безопасности и удаление подписки из сборки APK
  7. Автоматизация процесса подписи на этапе сборки APK
  8. Автоматизация подписи гибридных приложений Android

В Android Studio вы можете настроить свой проект для автоматической подписки APK в процессе сборки, создав конфигурацию подписи и присвоив ее типу вашей версии выпуска. Конфигурация подписи состоит из местоположения хранилища ключей, пароля хранилища ключей, псевдонима ключа и пароля ключа. Чтобы создать конфигурацию подписи и присвоить ее типу выпуска, используя Android Studio, выполните следующие действия:

  1. В окне Project щелкните правой кнопкой мыши на своем приложении и нажмите Open Module Settings.
  2. В окне Project Structure в разделе Modules на левой панели щелкните модуль, который вы хотите подписать.
  3. Жмите таб Signing , затем жмите Add 
  4. Выберите файл хранилища ключей, введите имя для этой конфигурации подписи (так как вы можете создать несколько) и введите необходимую информацию
  5. Жмите таб Build Types.
  6. Жмите на сборку release.
  7. В разделе Signing Config, выберите конфигурацию подписи, которую вы только что создали
  8. Жмите OK

Теперь каждый раз, когда вы создаете свой тип сборки релиза с помощью Android Studio, среда IDE автоматически подпишет APK, используя указанную вами конфигурацию подписи. Вы можете найти подписанные APK в папке build/output/apk/ внутри каталога проекта для модуля, который вы строите.

Когда вы создаете конфигурацию подписи, ваша информация о подписке включается в обычный текст в файлы сборки Gradle. Если вы работаете в команде или публично публиковали свой код, вы должны хранить свою информацию для подписания, удаляя ее из файлов сборки и сохраняя ее отдельно. Вы можете узнать больше о том, как удалить свою информацию подписи из ваших файлов сборки в разделе «Удаление информации о подписании» из ваших файлов сборки. Для получения дополнительной информации о том, как обеспечить безопасность вашей подписки, прочитайте «Безопасность ваших ключей подписи APK».

Настройка подписи каждой программы по разному вкусу

Если ваше приложение использует вкусы(flavor) продукта, и вы хотели бы подписать каждый вкус по-разному, вы можете создать дополнительные настройки подписки и назначить их по вкусу:

  1. В окне Project, щелкните правой кнопкой мыши на своем приложении и нажмите  Open Module Settings.
  2. В окне Project Structure, в разделе Modules в левой панели, щелкните модуль, который вы хотите подписать.
  3. Жмите таб Signing , затем жмите Add .
  4. Выберите файл хранилища ключей, введите имя для этой конфигурации подписи (так как вы можете создать несколько) и введите необходимую информацию
  5. Повторяйте шаги 3 и 4 по мере необходимости, пока не создадите все свои настройки подписи.
  6. Нажмите на таб Flavors.
  7. Выберите настройку, которую вы хотите настроить, затем выберите соответствующую конфигурацию подписи в раскрывающемся меню Signing Config
  8. Жмите OK