Скиллы покрывают интеграцию SDK, создание flow и paywall, проверку перед публикацией, миграцию placement и многое другое. Опишите задачу обычными словами — агент сам выберет нужный скилл.
Если ваш бэкенд должен сохранить свой URL в App Store Connect, передавайте серверные уведомления App Store из вашего бэкенда в Adapty без изменений. Если бэкенду не нужен собственный URL в App Store Connect, настройте пересылку на ваш бэкенд в Adapty — этот вариант не требует кода.
Adapty обрабатывает уведомления, поступающие с вашего бэкенда, так же, как если бы их отправила Apple напрямую. С Refund Saver Adapty по-прежнему отвечает на запросы возврата средств среди этих уведомлений.
Если ваш бэкенд получает уведомления о реальном времени от Google Play через собственный топик Pub/Sub, никаких доработок для передачи их в Adapty не требуется. Добавьте push-подписку для Adapty к этому топику.
Чтобы передавать серверные уведомления App Store в Adapty:
В Adapty откройте приложение, которое подключаете: у каждого приложения Adapty есть собственный URL для уведомлений. Перейдите в App settings > iOS SDK. В разделе App Store server notifications скопируйте URL из поля URL for App Store server notifications.
В вашем бэкенде отправляйте каждое уведомление от Apple на скопированный URL. В каждом запросе:
Оставьте тело запроса от Apple без изменений: {"signedPayload": "…"}.
Укажите заголовок Content-Type: application/json.
Не добавляйте заголовок Authorization.
Если Adapty также пересылает уведомления на ваш бэкенд, не отправляйте их обратно в Adapty.
Вот примеры для разных языков программирования:
url = "https://api.adapty.io/api/v1/sdk/apple/webhook/123a258e62fad41bfa734f4b0dbcad45/" # не забудьте заменить этот URLpayload = '{"signedPayload":"eyJhbGciOiJFUzI1NiIs..."}' # тело запроса от Apple, без измененийheaders = { 'Content-Type': 'application/json'}response = requests.request("POST", url, headers=headers, data=payload)
String url = "https://api.adapty.io/api/v1/sdk/apple/webhook/123a258e62fad41bfa734f4b0dbcad45/"; // don't forget to replace this URLString payload = "{\"signedPayload\":\"eyJhbGciOiJFUzI1NiIs...\"}"; // Apple's request body, unchangedOkHttpClient client = new OkHttpClient().newBuilder() .build();MediaType mediaType = MediaType.parse("application/json");RequestBody body = RequestBody.create(mediaType, payload);Request request = new Request.Builder() .url(url) .method("POST", body) .addHeader("Content-Type", "application/json") .build();Response response = client.newCall(request).execute();
package main "fmt" "strings" "net/http")func main() { url := "https://api.adapty.io/api/v1/sdk/apple/webhook/123a258e62fad41bfa734f4b0dbcad45/" // Replace this with the actual URL payload := strings.NewReader(`{"signedPayload":"eyJhbGciOiJFUzI1NiIs..."}`) // Apple's request body, unchanged method := "POST" client := &http.Client{} req, err := http.NewRequest(method, url, payload) if err != nil { fmt.Println("Error creating request:", err) return } req.Header.Add("Content-Type", "application/json") res, err := client.Do(req) if err != nil { fmt.Println("Error sending request:", err) return } defer res.Body.Close()}
Ответ 200 не подтверждает, что Adapty смог использовать уведомление. Adapty отвечает до того, как декодирует подписанный payload. Чтобы убедиться, что уведомления доходят до Adapty, совершите покупку в песочнице. Затем проверьте, что статус уведомлений в разделе App Store server notifications отображается как Active.