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) { | ||
− | |||
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); } }