Pkpass на Android

Существует приложение android, Passwallet, которое может интерпретировать файлы pkpass, предназначенные для паспорта приложений Apple ( https://play.google.com/store/apps/details?id=com.attidomobile.passwallet )

Мне было интересно, как читать файлы pkpass.

Файлы Pkpass кажутся zip-файлами со всей информацией внутри json-файлов. Есть ли структура по умолчанию для файлов pkpass? Если так, то, что это? И что было бы хорошим способом импортировать это в приложение для Android?


Для людей, которые задаются вопросом, как читать содержимое файла pkpass, см. Следующий код:

Я настроил это действие с помощью фильтра намерения для файлов pkpass

<intent-filter> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <data android:mimeType="application/vnd-com.apple.pkpass" android:scheme="content" /> </intent-filter> <intent-filter> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <data android:mimeType="application/vnd.apple.pkpass" android:scheme="content" /> </intent-filter> <intent-filter> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <data android:mimeType="application/vnd-com.apple.pkpass" android:scheme="file" /> </intent-filter> <intent-filter> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <data android:mimeType="application/vnd.apple.pkpass" android:scheme="file" /> </intent-filter> 

 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Intent intent = getIntent(); Uri uri = intent.getData(); String scheme = uri.getScheme(); if(ContentResolver.SCHEME_CONTENT.equals(scheme)) { try { InputStream attachment = getContentResolver().openInputStream(uri); handleZipInput(attachment); } catch (FileNotFoundException e) { e.printStackTrace(); } } else { String path = uri.getEncodedPath(); try { FileInputStream fis = new FileInputStream(path); handleZipInput(fis); } catch (FileNotFoundException e) { e.printStackTrace(); } } } private void handleZipInput(InputStream in) { try { ZipInputStream zis = new ZipInputStream(in); ZipEntry entry; while((entry = zis.getNextEntry()) != null) { String filename = entry.getName(); if(filename.equals("pass.json")) { StringBuilder s = new StringBuilder(); int read = 0; byte[] buffer = new byte[1024]; while((read = zis.read(buffer, 0, 1024)) >= 0) s.append(new String(buffer, 0, read)); JSONObject pass = new JSONObject(s.toString()); break; } } } catch (Exception e) { e.printStackTrace(); } } 

Solutions Collecting From Web of "Pkpass на Android"

Вы можете скачать полную спецификацию для пакета .pkpass отсюда . Содержимое прохода сохраняется в файле JSON с именем pass.json. Пакет .pkpass представляет собой zip-файл, содержащий pass.json, пропущенные изображения, необязательные файлы локали и файл манифеста.

Манифест должен быть подписан с выданным Apple сертификатом Pass ID. Однако для Android или любого другого стороннего приложения все необходимое для создания прохода можно прочитать из pass.json и связанных изображений.