Zaawansowane
Kącik zaawansowanych: rzeczy, które można zbudować wokół PianoKitty. Do zwykłego ćwiczenia niepotrzebne.
Rewards API — własne obrazki-nagrody
W trybie gry aplikacja może pokazywać mały obrazek-nagrodę po poprawnych akordach. Oprócz wbudowanych zdjęć kotów możesz podpiąć własny endpoint HTTP — dowolny URL zwracający JSON wskazujący obrazek. Rysunki dziecka, zdjęcia rodzinne, memy — co tylko motywuje.
1. Kontrakt
Aplikacja wysyła zwykłe żądanie GET na Twój URL i oczekuje takiego JSON-a:
{ "success": 1, "src": "https://twoj.host/rewards/kot-042.jpg" } successmusi być liczbą1— string"1"zostanie odrzucony.src— bezwzględny URL obrazka (jpg/png/gif/webp…).- Zwracaj inny
srcprzy każdym wywołaniu — losowanie to zadanie endpointu.
Wszystko inne — status inny niż 200, zepsuty JSON, success ≠ 1, pusty src albo odpowiedź dłuższa niż 2 sekundy — jest po cichu
pomijane: ćwiczenie leci dalej, tylko bez obrazka. Żaden błąd się nie pojawia.
2. Wymagania
- HTTPS. Aplikacja działa po HTTPS, więc przeglądarka odrzuci endpoint po zwykłym HTTP (mixed content).
- CORS. Żądanie idzie z Twojej przeglądarki, cross-origin. Endpoint musi zwracać nagłówek
Access-Control-Allow-Origin: *(albo origin aplikacji). - Sam URL obrazka nie potrzebuje CORS — ładowany jest zwykłym tagiem
<img>.
3. Minimalne implementacje
PHP — wrzuć katalog obrazków obok tego skryptu:
<?php
header('Content-Type: application/json');
header('Access-Control-Allow-Origin: *');
$images = glob(__DIR__ . '/rewards/*.{jpg,png,gif,webp}', GLOB_BRACE);
echo json_encode([
'success' => 1,
'src' => 'https://twoj.host/rewards/' . basename($images[array_rand($images)])
]); Cloudflare Worker — bez własnego serwera, darmowy plan wystarczy:
const IMAGES = [
'https://twoj.host/img/1.jpg',
'https://twoj.host/img/2.jpg',
'https://twoj.host/img/3.jpg'
];
export default {
fetch() {
const src = IMAGES[Math.floor(Math.random() * IMAGES.length)];
return new Response(JSON.stringify({ success: 1, src }), {
headers: {
'content-type': 'application/json',
'access-control-allow-origin': '*'
}
});
}
}; Sprawdź z terminala, zanim podepniesz do aplikacji:
$ curl -s https://twoj.host/reward
{"success":1,"src":"https://twoj.host/rewards/kot-042.jpg"} 4. Użycie w aplikacji
- Otwórz Ustawienia → Nagrody.
- Ustaw Obrazki-nagrody na Własne API i wklej URL endpointu.
- Nagrody pojawiają się w trybie gry po poprawnych akordach. Żeby obrazek wyskakiwał tylko co N-ty poprawny akord, włącz opcję etapów i ustaw interwał — endpoint będzie wtedy wywoływany tylko przy etapach.
Rozwiązywanie problemów
- Brak obrazka i brak błędu — tak właśnie ma działać cicha obsługa błędów. Otwórz DevTools → Network i obserwuj żądanie do endpointu po poprawnym akordzie.
- Błąd CORS w konsoli → brakuje nagłówka
Access-Control-Allow-Origin. - Działa w curl, nie działa w aplikacji → sprawdź HTTPS, CORS i czy
successjest liczbą, nie stringiem. - Obrazki czasem się nie pojawiają → endpoint odpowiada dłużej niż 2-sekundowy limit.