GPLVote Sign Doc Android API
Материал из Сервис Облачной Демократии
Версия от 16:39, 19 января 2015; Админ (обсуждение | вклад)
Общее описание
Приложение GPLVote Sign Doc может подписывать документы, которые ему будут предоставлять другие приложения, работающие на смартфоне. При этом документы сохраняются в истории приложения, но не отправляются на прокси сервера или сайты.
Для внешнего обращения из других приложений служит имя активити "org.gplvote.signdoc.DO_SIGN".
Пример обращения с запросом на подписание документа
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 intent = new Intent("org.gplvote.signdoc.DO_SIGN", Uri.parse("signdoc://sign_array")); Gson gson = new Gson(); intent.putExtra("DocsList", gson.toJson(documents)); intent.putExtra("LastRecvTime", ""); 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;} String json_signs = data.getStringExtra("SIGNS"); ArrayList<DocSign> documents; Gson gson = new Gson(); 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); } if (confirms.size() > 0) { // Если массив подтверждений об обработке подписей не пуст - отправляем его приложению "Sign Doc" Intent intent = new Intent("org.gplvote.signdoc.DO_SIGN", Uri.parse("signdoc://sign_array")); intent.putExtra("DocsList", gson.toJson(confirms)); intent.putExtra("ConfirmMode", "1"); startActivity(intent); } }