GPLVote Sign Doc Android API

Материал из Сервис Облачной Демократии
(Различия между версиями)
Перейти к: навигация, поиск
 
Строка 4: Строка 4:
  
 
Для внешнего обращения из других приложений служит имя активити "org.gplvote.signdoc.DO_SIGN". Так-же в подписываемых документах параметр "site" должен быть прописан в виде "app:<идентификатор приложения>".
 
Для внешнего обращения из других приложений служит имя активити "org.gplvote.signdoc.DO_SIGN". Так-же в подписываемых документах параметр "site" должен быть прописан в виде "app:<идентификатор приложения>".
 +
 +
Для передачи команды служит Extra параметр "Command". Он может иметь следующие значения: "SignDoc", "ViewDoc", "SendConfirms" и "GetPublicKeyId".
  
 
Для передачи массива с документами на подписание служит Extra параметр "DocsList", в который данный массив помещается в виде JSON.
 
Для передачи массива с документами на подписание служит Extra параметр "DocsList", в который данный массив помещается в виде JSON.
  
Для передачи массива с подтверждениями об обработке служит тот-же Extra параметр "DocsList", но для указания на то, что список содержит только подтверждения об обработке, устанавливается еще и параметр "ConfirmMode" в значение "1". В этом случае обработка происходит без визуализации активити приложения "Sign Doc".
+
Для передачи массива с подтверждениями об обработке служит тот-же Extra параметр "DocsList", но для указания на то, что список содержит только подтверждения об обработке, устанавливается еще и параметр "Command" в значение "SendConfirms". В этом случае обработка происходит без визуализации активити приложения "Sign Doc".
 
+
==== Пример обращения с запросом на подписание документа ====
+
<pre>
+
    public class Doc {
+
        public String toJson() {
+
            Gson gson = new Gson();
+
            String json = gson.toJson(this);
+
            return(json);
+
        }
+
    }
+
 
+
    public class DocSignRequest extends Doc {
+
        public String type = "SIGN_REQUEST";
+
        public String site;
+
        public String doc_id;      // Внутренний (клиента) идентификатор документа
+
        public String user_key_id;  // Идентификатор открытого ключа пользователя
+
        public String data;    // Данные - это зашифрованный JSON массив строк
+
        public String dec_data; // Расшифрованные данные в строковом виде. Используются в коде, через сеть не передаются
+
        public String template; // Шаблон
+
    }
+
 
+
    // Формируем массив из документов - запросов на подписание
+
    ArrayList<DocSignRequest> documents = new ArrayList<DocSignRequest>();
+
 
+
    // Для примера в массив добавляется один документ
+
 
+
    // Создание документа
+
    DocSignRequest sign_request = new DocSignRequest();
+
 
+
    sign_request.site = "app:trust_net";
+
    sign_request.doc_id = genDocId();
+
    sign_request.dec_data = "['Данные trust net 1','Данные trust net 2']";
+
    sign_request.template = "LIST\nЗаголовок 1\nЗаголовок 2";
+
 
+
    // Добавляем документ в массив
+
    documents.add(sign_request);
+
 
+
    // Формируем Intent с привязкой к приложению "Sign Doc"
+
    Intent intent = new Intent("org.gplvote.signdoc.DO_SIGN", Uri.parse("signdoc://sign_array"));
+
 
+
    Gson gson = new Gson();
+
 
+
    // Передаем в экстра параметре список документов на подписание в виде JSON массива
+
    intent.putExtra("DocsList", gson.toJson(documents));
+
 
+
    // Этот флаг указывает что подписание идет не с сервера, а из приложения
+
    intent.putExtra("LastRecvTime", "");
+
 
+
    // Запускаем активити подписания документа из приложения "Sign Doc"
+
    startActivityForResult(intent, DO_SIGN_REQUEST);
+
</pre>
+
 
+
Поле "site" должно иметь формат "app:<имя приложения, формирующего запрос на подписание>".
+
 
+
==== Пример обработки возвращенного результата подписания и отправки подтверждения об обработке подписи ====
+
<pre>
+
    public class DocSign extends Doc {
+
        public String type = "SIGN";
+
        public String site;
+
        public String doc_id;  // Внутренний (клиента) идентификатор документа
+
        public String sign;    // Подпись в Base64 для sha256(данные+шаблон)
+
    }
+
 
+
    public class DocSignConfirm extends Doc {
+
        public String type = "SIGN_CONFIRM";
+
        public String site;
+
        public String doc_id;  // Внутренний (клиента) идентификатор документа
+
    }
+
 
+
    @Override
+
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
+
        if (data == null) {return;}
+
 
+
        // Получаем JSON массив с подписями документов
+
        String json_signs = data.getStringExtra("SIGNS");
+
 
+
        ArrayList<DocSign> documents;
+
        Gson gson = new Gson();
+
 
+
        // Конвертируем JSON массив в массив java
+
        documents = gson.fromJson(json_signs, new TypeToken<ArrayList<DocSign>>(){}.getType());
+
 
+
        // Создаем массив подтверждений обработки подписи для последующей отправки
+
        ArrayList<DocSignConfirm> confirms = new ArrayList<DocSignConfirm>();
+
 
+
        // Перебираем все полученные подписи документов для обработки
+
        for(int i = 0; i < documents.size(); i++) {
+
            DocSign sign = documents.get(i);
+
 
+
            // В этом месте должна располагаться обработка подписи документа вашим приложением
+
            // ...
+
 
+
            // Формируем подтверждения об обработке
+
            DocSignConfirm doc_confirm = new DocSignConfirm();
+
 
+
            doc_confirm.site = sign.site;
+
            doc_confirm.doc_id = sign.doc_id;
+
 
+
            // Добавляем подтверждение об обработке в массив подтверждений
+
            confirms.add(doc_confirm);
+
        }
+
           
+
        // Если массив подтверждений об обработке подписей не пуст - отправляем его приложению "Sign Doc"
+
        if (confirms.size() > 0) {
+
            Intent intent = new Intent("org.gplvote.signdoc.DO_SIGN", Uri.parse("signdoc://sign_array"));
+
            intent.putExtra("DocsList", gson.toJson(confirms));
+
 
+
            // Флаг "ConfirmMode" означает что передаются подтверждения о подписании из приложения
+
            // В этом режиме не производится вывод на экран активити из приложения "Sign Doc"
+
            intent.putExtra("ConfirmMode", "1");
+
            startActivity(intent);
+
        }
+
    }
+
</pre>
+

Текущая версия на 11:54, 20 января 2015

Общее описание

Приложение GPLVote Sign Doc может подписывать документы, которые ему будут предоставлять другие приложения, работающие на смартфоне. При этом документы сохраняются в истории приложения, но не отправляются на прокси сервера или сайты.

Для внешнего обращения из других приложений служит имя активити "org.gplvote.signdoc.DO_SIGN". Так-же в подписываемых документах параметр "site" должен быть прописан в виде "app:<идентификатор приложения>".

Для передачи команды служит Extra параметр "Command". Он может иметь следующие значения: "SignDoc", "ViewDoc", "SendConfirms" и "GetPublicKeyId".

Для передачи массива с документами на подписание служит Extra параметр "DocsList", в который данный массив помещается в виде JSON.

Для передачи массива с подтверждениями об обработке служит тот-же Extra параметр "DocsList", но для указания на то, что список содержит только подтверждения об обработке, устанавливается еще и параметр "Command" в значение "SendConfirms". В этом случае обработка происходит без визуализации активити приложения "Sign Doc".

Личные инструменты
Пространства имён
Варианты
Действия
Навигация
Инструменты