Swift PKPass eror 'Невозможно прочитать пропуск, потому что он недействителен' - PullRequest
0 голосов
/ 28 апреля 2020

Я создаю Ticket со своего сервера и передаю его в мое приложение ios, но продолжаю получать эту ошибку, когда пытаюсь передать данные JSON в модель PKPass.

Error Domain=PKPassKitErrorDomain Code=1 "The pass cannot be read because it isn’t valid.

На моем сервере написано, что заявка была успешно создана, но я все еще получаю эту ошибку в XCode. Я неправильно декодирую данные? Как создать PKPass, используя ответ JSON?

Код на стороне сервера:

exports.createTicket = functions.https.onRequest(async (req, res) => {

const passName = "Event"

try {
  const examplePass = await createPass({
      model: "./models/Event",
      certificates: {
          wwdr: "./models/certs/wwdrc.pem",
          signerCert: "./models/certs/signerCert.pem",
          signerKey: {
              keyFile: "./models/certs/signerKey.pem",
              passphrase: "54321"
          }
      },
      overrides: {
          // keys to be added or overridden
          serialNumber: "AAGH44625236dddaffbda"
      }
  });

  examplePass.barcode("36478105430"); // Random value

// Generate the stream, which gets returned through a Promise
const stream = examplePass.generate();

res.set({
  "Content-Type": "application/vnd.apple.pkpass",
  "Content-disposition": `attachment; filename=${passName}.pkpass`
});

stream.pipe(res);

console.log("Successfully created ticket", stream)
} catch (err) {
console.log("There was an error", err)

    res.set({
        "Content-type": "text/html",
    });

    res.send(err.message);
 }
 });

IOS Сторона:

AF.request(URLString, method: .post, parameters: requestData).responseString { response in

        guard let data = response.data as? Data else { return }

        do {
            let pass = try PKPass(data: data)
            print(pass)
        } catch {
            print("Error", error)
        }


    }

pass. json

{
"formatVersion": 1,
"passTypeIdentifier": "pass.com.CodyHost.Finder-Dev",
"teamIdentifier": "L9C6U8UKPB",
"organizationName": "Finder",
"description": "Rolling loud new york 2020",
"eventTicket": {}
}

Подпись:

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

1 Ответ

0 голосов
/ 29 апреля 2020

Просматривая вашу подпись и вы передаете. json, ваш пароль не загружается, потому что сертификат, который использовался для создания подписи:

  • PassTypeId: pass.com.apple .devpubs.example
  • TeamName: A93A5CM278

Это не соответствует passTypeIdentifier и teamName, которые есть в вашем pass.json.

Заменить ./models/certs/signerCert.pem и ./models/certs/signerKey.pem с правильным сертификатом и ключом для вашего PassTypeId сертификата, и вы должны устранить эту ошибку.

Любой проход, скомпилированный с pass.json выше, все равно не будет загружен, но по другой причине , Объект eventTicket не может быть пустым.

...