Apphud – integrate, analyze and improve in-app purchases and subscriptions in your iOS/Android apps

Разработка

Баг в StoreKit Testing: не работают Subscription Offers

Всем привет! В нашем прошлом посте мы объявили, что Apphud теперь поддерживает покупки сделанные в StoreKit Test фреймворке с использованием StoreKit конфиг файла. Однако спешим предупредить вас, что на данный момент ни для кого не работает покупка промо-офферов с использованием ключа подписки из Xcode. Незасивимо от того, используете ли вы Apphud.

Ключ подписки из App Store Connect

Как вы возможно знаете, для покупки промо-офферов необходимо сгенерировать подпись с помощью ключа подписки, скачанного из App Store Connect. Ключ можно создать в разделе Users & Access > Keys.

Сам по себе PKCS#8 приватный ключ имеет расширение .p8 и использует эллипитический алгоритм ECDSA P-256. Более подрубно описано в документации Apple.

Если открыть содержимое ключа в текстовом редакторе, то будет выглядеть так:

-----BEGIN PRIVATE KEY-----
MIGTAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBHkwdwIBAQQgKfLl2Sldom13UQJi
WdTL8aRc90qEigTA/QelysCOTiCgCgYIKoZIzj0DAQehRANCAASm29jY3KbTHtJI
GkOgiXtvWnidZp5N+B/RDC9T0n/vZV/UCmbAA1wa1f5jF6E2YwzK5r/fsTAEac66
IlbfvTT4
-----END PRIVATE KEY-----

Данные ключи работают исправно и Apphud умеет создавать подписи для них при покупке промо офферов.

Ключ подписки из Xcode 12

Ключ подписки, сгенерированный в Xcode, имеет другой формат и алгоритм, описанный в документации Apple, не подходит!

Чтобы найти данное попап окно:

  • Создайте конфигурационный файл StoreKit, как описано в нашем предыдущем посте.
  • Выбрав данный файл в Xcode, перейдите в Editor > Subscription Offers Key.

Ключ подписки состоит из пары публичного и приватного ключа. Xcode отображает в попапе только приватный ключ. Чтобы посмотреть пару ключей, откройте ваш Configuration.storekit файл в любом текстовом редакторе, он имеет JSON формат. Там вы найдете ключ subscriptionOffersKeyPair. Пара выглядит таким образом:

"subscriptionOffersKeyPair" : {
  "id" : "AD97257D",
  "privateKey" : "MF8CAQEEGNSWDVsrVXfxGfn2wvQAUUNHA/S+nqDvwqAKBggqhkjOPQMBAaE0AzIA\nBK0s7Oq6mdN0mcimQvy+ofIpVfnZx7b/KZ7uesoNx6LwwQ3w5XyjrUN5Mx1onhl8\nQg==",
  "publicKey" : "MEkwEwYHKoZIzj0CAQYIKoZIzj0DAQEDMgAErSzs6rqZ03SZyKZC/L6h8ilV+dnH\ntv8pnu56yg3HovDBDfDlfKOtQ3kzHWieGXxC"
}

Баг

Сам баг состоит в том, что приватный ключ, скачанный из App Store Connect использует ECDSA P-256 эллиптический алгоритм, тогда как приватный ключ из StoreKit Testing использует кривую P-192. OpenSSL идентифицирует ключ как prime192v1. При попытке прочитать ключ с помощью OpenSSL обычным образом выдается ошибка “Unable to load key” либо “Could not parse PKey: no start line”.

Мы связались с премиум поддержкой Apple DTS Support, они подтвердили данный баг в Xcode. Ошибка сохраняется в Xcode 12.4 (12D4e) и Xcode 12.5 beta (12E5220o).

Обходной путь

По умолчанию, OpenSSL не может прочитать ключ с хедером и футером, который отображает Xcode.

Можно это обойти, вручную изменив хедер на:

 -----BEGIN EC PRIVATE KEY----- 

и футер на:

-----END EC PRIVATE KEY-----

Мы продолжаем коммуникацию с Apple, чтобы добиться успешной работы ключей попдиски из StoreKit Testing и обновим данную статью, когда проблема будет решена. Надеемся в следующем обновлении Xcode 12 данная проблема будет исправлена.

Спасибо!

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *