GPLVote Sign Doc Android API

Материал из Сервис Облачной Демократии
(Различия между версиями)
Перейти к: навигация, поиск
Строка 7: Строка 7:
 
==== Пример обращения с запросом на подписание документа ====
 
==== Пример обращения с запросом на подписание документа ====
 
<pre>
 
<pre>
 +
    public class Doc {
 +
        public String toJson() {
 +
            Gson gson = new Gson();
 +
            String json = gson.toJson(this);
 +
            return(json);
 +
        }
 +
    }
 +
 
     public class DocSignRequest extends Doc {
 
     public class DocSignRequest extends Doc {
 
         public String type = "SIGN_REQUEST";
 
         public String type = "SIGN_REQUEST";
Строка 17: Строка 25:
 
     }
 
     }
  
 +
    // Формируем массив из документов - запросов на подписание
 
     ArrayList<DocSignRequest> documents = new ArrayList<DocSignRequest>();
 
     ArrayList<DocSignRequest> documents = new ArrayList<DocSignRequest>();
 +
 +
    // Для примера в массив добавляется один документ
 +
 +
    // Создание документа
 
     DocSignRequest sign_request = new DocSignRequest();
 
     DocSignRequest sign_request = new DocSignRequest();
  
Строка 25: Строка 38:
 
     sign_request.template = "LIST\nЗаголовок 1\nЗаголовок 2";
 
     sign_request.template = "LIST\nЗаголовок 1\nЗаголовок 2";
  
 +
    // Добавляем документ в массив
 
     documents.add(sign_request);
 
     documents.add(sign_request);
  
 +
    // Формируем Intent с привязкой к приложению "Sign Doc"
 
     Intent intent = new Intent("org.gplvote.signdoc.DO_SIGN", Uri.parse("signdoc://sign_array"));
 
     Intent intent = new Intent("org.gplvote.signdoc.DO_SIGN", Uri.parse("signdoc://sign_array"));
  
 
     Gson gson = new Gson();
 
     Gson gson = new Gson();
 +
 +
    // Передаем в экстра параметре список документов на подписание в виде JSON массива
 
     intent.putExtra("DocsList", gson.toJson(documents));
 
     intent.putExtra("DocsList", gson.toJson(documents));
 +
 +
    // Этот флаг указывает что подписание идет не с сервера, а из приложения
 
     intent.putExtra("LastRecvTime", "");
 
     intent.putExtra("LastRecvTime", "");
  
 +
    // Запускаем активити подписания документа из приложения "Sign Doc"
 
     startActivityForResult(intent, DO_SIGN_REQUEST);
 
     startActivityForResult(intent, DO_SIGN_REQUEST);
 
</pre>
 
</pre>
Строка 57: Строка 77:
 
         if (data == null) {return;}
 
         if (data == null) {return;}
  
 +
        // Получаем JSON массив с подписями документов
 
         String json_signs = data.getStringExtra("SIGNS");
 
         String json_signs = data.getStringExtra("SIGNS");
  
 
         ArrayList<DocSign> documents;
 
         ArrayList<DocSign> documents;
 
         Gson gson = new Gson();
 
         Gson gson = new Gson();
 +
 +
        // Конвертируем JSON массив в массив java
 
         documents = gson.fromJson(json_signs, new TypeToken<ArrayList<DocSign>>(){}.getType());
 
         documents = gson.fromJson(json_signs, new TypeToken<ArrayList<DocSign>>(){}.getType());
  
 +
        // Создаем массив подтверждений обработки подписи для последующей отправки
 
         ArrayList<DocSignConfirm> confirms = new ArrayList<DocSignConfirm>();
 
         ArrayList<DocSignConfirm> confirms = new ArrayList<DocSignConfirm>();
 +
 +
        // Перебираем все полученные подписи документов для обработки
 
         for(int i = 0; i < documents.size(); i++) {
 
         for(int i = 0; i < documents.size(); i++) {
 
             DocSign sign = documents.get(i);
 
             DocSign sign = documents.get(i);
Строка 70: Строка 96:
 
             // ...
 
             // ...
  
             // Формирование подтверждения об обработке и добавление его в массив подтверждений
+
             // Формируем подтверждения об обработке
 
             DocSignConfirm doc_confirm = new DocSignConfirm();
 
             DocSignConfirm doc_confirm = new DocSignConfirm();
  
Строка 76: Строка 102:
 
             doc_confirm.doc_id = sign.doc_id;
 
             doc_confirm.doc_id = sign.doc_id;
  
 +
            // Добавляем подтверждение об обработке в массив подтверждений
 
             confirms.add(doc_confirm);
 
             confirms.add(doc_confirm);
 
         }
 
         }
 
              
 
              
 +
        // Если массив подтверждений об обработке подписей не пуст - отправляем его приложению "Sign Doc"
 
         if (confirms.size() > 0) {
 
         if (confirms.size() > 0) {
            // Если массив подтверждений об обработке подписей не пуст - отправляем его приложению "Sign Doc"
 
 
             Intent intent = new Intent("org.gplvote.signdoc.DO_SIGN", Uri.parse("signdoc://sign_array"));
 
             Intent intent = new Intent("org.gplvote.signdoc.DO_SIGN", Uri.parse("signdoc://sign_array"));
 
             intent.putExtra("DocsList", gson.toJson(confirms));
 
             intent.putExtra("DocsList", gson.toJson(confirms));
 +
 +
            // Флаг "ConfirmMode" означает что передаются подтверждения о подписании из приложения
 +
            // В этом режиме не производится вывод на экран активити из приложения "Sign Doc"
 
             intent.putExtra("ConfirmMode", "1");
 
             intent.putExtra("ConfirmMode", "1");
 
             startActivity(intent);
 
             startActivity(intent);

Версия 16:47, 19 января 2015

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

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

Для внешнего обращения из других приложений служит имя активити "org.gplvote.signdoc.DO_SIGN".

Пример обращения с запросом на подписание документа

    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);

Поле "site" должно иметь формат "app:<имя приложения, формирующего запрос на подписание>".

Пример обработки возвращенного результата подписания и отправки подтверждения об обработке подписи

    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);
        }
    }
Личные инструменты
Пространства имён
Варианты
Действия
Навигация
Инструменты