Safari не может загрузить файл сберегательной книжки .pkpass

У меня есть ссылка на веб-странице, которая должна позволить пользователям загружать файл сберегательной книжки по ссылке, однако при нажатии на ссылку в Safari на iPhone я получаю следующее сообщение об ошибке:

Safari cannot download this file.

Я читал подобные вопросы и ответы здесь, и тип MIME установлен на application/vnd.apple.pkpass. Файл можно загрузить на телефон с Windows.

Любые предложения о том, почему это так и как решить эту проблему, чтобы пользователи могли получить доступ к файлу сберегательной книжки?

Pkpass содержит следующие файлы:

icon.png
logo.png
strip.png
manifest.json
pass.json
signature

Пример manifest.json:

{
  "icon.png": "fa6b59072ae5c8163c903d8c8b5f2e4a45fbd49b",
  "logo.png": "3165c9be22cbf76e2b3118972dabaef8918390f5",
  "strip.png": "5d15c45f543e8088c227fc54a6c01d1f9f0b1db3",
  "pass.json": "0f536b34a6b73a7799aae43ff9861dde45a6dfc6"
}

Пример файла pass.json:

{
    "passTypeIdentifier":"pass.com.XXXX.sampleticket",
    "formatVersion":1,
    "serialNumber":"TIC1000000518",
    "description":"XXXX",
    "organizationName":"XXXX",
    "teamIdentifier":"W9XR4FBDD4",
    "logoText":"Dragon Bay",
    "foregroundColor":"rgb(0,0,0)",
    "backgroundColor":"rgb(255,255,0)",
    "labelColor":"rgb(0,0,0)",
    "voided":false,
    "eventTicket":{
        "headerFields":[],
        "primaryFields":[],
        "secondaryFields":[{"key":"activity",
            "label":"11/20/2015 12:00 AM",
            "value":"One Day at the Museum"
            }],
        "auxiliaryFields":[],
        "backFields":[{
            "key":"terms",
            "label":"Terms & Conditions",
            "value":"XXXX"
        },
        {
            "key":"contact",
            "label":"XXXX",
            "value":"XXXX"
        },
        {
            "key":"legal",
            "label":"Legal",
            "value":"XXXX"
        },
        {
            "key":"notes",
            "changeMessage":"%@","label":"Notes","value":""
        },
        {
            "key":"lastUpdated",
            "label":"Last Updated",
            "dateStyle":"PKDateStyleMedium",
            "timeStyle":"PKDateStyleShort",
            "isRelative":false,
            "value":"2016-01-08T19:00Z"
        }]
    },
    "barcode":{
        "format":"PKBarcodeFormatPDF417",
        "message":"1000000518",
        "messageEncoding":"UTF-8",
        "altText":"1000000518"
    },
    "authenticationToken":"0123456789ABCDEF",
    "webServiceURL":"XXXX/passbook.svc"
}

person Bhav    schedule 09.01.2016    source источник
comment
Это не удастся на iOS, потому что либо pass.json содержит недопустимые значения, либо ваша подпись неверна, либо в пакете отсутствует обязательный контент. Я не вижу явных проблем в вашем pass.json. Убедитесь, что ваш пакет содержит хотя бы файл icon.png. Если у вас все еще есть проблемы, отправьте ссылку, по которой мы можем скачать пакет .pkpass.   -  person PassKit    schedule 09.01.2016
comment
также убедитесь, что ваш протокол webServiceURL равен https, а authenticationToken составляет не менее 16 байт.   -  person PassKit    schedule 09.01.2016
comment
@PassKit Веб-сервис в настоящее время http   -  person Bhav    schedule 09.01.2016
comment
Перейдите на https и проблема должна исчезнуть!   -  person PassKit    schedule 09.01.2016
comment
Хорошо, я попробую это. Спасибо.   -  person Bhav    schedule 09.01.2016


Ответы (5)


Примечание. Я столкнулся с этой проблемой. Решением для меня был выбор другого промежуточного сертификата. Apple имеет ДВА сертификата, помеченных как «Сертификат WWDR» в своих промежуточных сертификатах на этой странице: https://www.apple.com/certificateauthority/

Однако на данный момент для этой цели работает только тот, срок действия которого истекает в 2023 году.

person johnnyb    schedule 26.03.2020
comment
Это была и моя проблема. Потратил столько времени, пытаясь понять, почему это не работает. Спасибо, что поделился!!! - person juminoz; 26.11.2020

Хотя это немного устарело, это случилось со мной недавно, поэтому я просто оставлю свое решение на случай, если оно поможет кому-то еще.

Проблема с моей стороны заключалась в том, что я устанавливал поле voided как строку вместо логического значения, например: "voided":"false" и отсутствовало поле "expirationDate".

Таким образом, это устранило проблему:

  ...
  "expirationDate": "2016-06-30T11:59:59Z",
  "voided": false,
  ...

Это было сложно, и мне потребовалось некоторое время, чтобы понять это. Надеюсь, поможет.

person Jose    schedule 10.06.2016

Я изменил webServiceURL, чтобы использовать https, как указано @PassKit, и проблема была решена.

person Bhav    schedule 04.08.2016

У меня была другая проблема, из-за которой файлы .pkpass отображались правильно при просмотре на моем Mac, но при попытке просмотреть их в iOS выдавало ту же ошибку «Safari не может загрузить этот файл».

мой источник ошибки был:

  • я использовал целочисленные значения для свойства «ключ» в определениях полей (поскольку я использую CMS для создания этих полей)

поэтому обязательно используйте только строки в качестве «ключевого» свойства в определениях полей.

person Manfred Wuits    schedule 25.08.2016

Также убедитесь, что вы используете обновленный промежуточный сертификат Apple WWDR. при создании файла подписи.

person Eric Sellin    schedule 31.10.2018