Подтвердить что ты не робот

Pkpass на Android

Существует приложение Android, Passwallet, способное интерпретировать файлы pkpass, предназначенные для приложения Apple App Passbook (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();
    }
}
4b9b3361

Ответ 1

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

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