Genel Bakış
Steam Oyun Bildirimleri kullanıcılara Satranç gibi aynı zamanda oynanmayan çok oyunculu oyunlar için çevrimdışı bildirimler iletmek için olan bir sistemdir.
Bu API'ın amacı kullanıcıları oyun oturumunun ilerlemesi için eylem gerektiğini kullanıcılara bildirmektir. Satranç örneğinde oyun oturum durum her oyuncunun hareketi sonunda güncellenir. Steam daha sonra kullanıcılara oyun oturumunun durumu temelli bildirimler göndererek onlara oyunun onların sırası geldiğini bildirerek uyarır.
Oyunun Sorumlulukları
Tipik bir çevrimdışı oyun bir oyun oturumunu kontrol eder. Her kullanıcının durumlarını sırasıyla kullanıcıya bir bildirim göndererek günceller. Böylece kullanıcılar oyunu başlatmaları ve eylem yapmaları gerektiğini öğrenir. Oyunu başlattıktan ve eylemi gerçekleştirdikten sonra oyunun oyun oturumunu, oturumdaki bütün kullanıcılar için güncel durumlar ile birlikte tekrar güncellemesi beklenir.
Steam neyi yönetecek
Steam, oyun tarafından sağlanan oyun oturum durumları ile kullanıcıları bilgilendirmeyi ve kullanıcının o oyun için tercih ettikleri belirli ayarları yönetecektir. Bir oyun için eylem gerektiği zaman Steam istemcisinde ve web tarayıcısından kullanıcı için bir uyarı gösterilecektir.
Gereksinimler
Oyun Bildirimleri API'ı Web API yöntemleri ile sağlanır ve geçerli bir yayıncı anahtarı gereklidir. Web API yöntem çağrıları oyun istemcisinden ayrılmış, kurulmuş bir sunucudan ortaya çıkmalıdır. Yayıncı anahtarı herhangi bir oyun istemci kodu ile gönderilmemelidir.
Doğrulama ve Üçüncü Parti Hesaplar
Oyun Bildirimleri API'larına çağrı yapabilmek için ilk olarak oyununuza giriş yapmış Steam kullanıcısının kimliğini belirlemeniz gerekli. Bunu iki yol ile yapabilirsiniz. Bir istemci oyunu bir doğrulama oturum bileti oluşturabilir ve bunu sunucunuza gönderebilir. Veya web tabanlı oyunlar OpenID kullanarak kullanıcı doğrulayabilir. Bunu yapmak için yönergeler
Üçüncü parti hesapları Steam hesapları ile bağlamak belgesinde mevcuttur. Oyun istemcisinden direkt olarak oyun sunucunuza gönderilen mesajlar içerisinde yer alan kullanıcı kimliklerine güvenmemeniz oldukça önemlidir. Çünkü bu mesajlar üzerinde oynama yapılabilir.
Üçüncü parti hesaplar kullanan oyunlar için yukarıda yer alan yönergeleri takip edin ancak kullanıcının Steam kimliğini sisteminizde depolayın.
Oyun Bildirimleri API'ı
Teknik Genel Bakış
Oyun Bildirimleri API'ı Web API'ları aracılığıyla yazılır ve açığa çıkartılır. Her yöntem için 4 parametrenin geçmesi gereklidir:
- appid (oyununuzun uygulama kimliği)
- format (sonucun biçimi. Dönüş değeri olarak json öneririz.)
- input_json (bir yöntem için gerekli olan bütün parametrelerin json kodlanmış hali)
- key (her çağrıda geçmesi gereken yayıncı anahtarınız)
Bu API başarılı çağrılarda mesaj bölümünde detayları ile birlikte bir HTTP durum kodu olan 200'ü döndürecektir (uygun olduğunda).
Sabit Değerler
UserState
Aşağıdakilerden birisi olarak tanımlanan bir dize değeri:
- waiting - Kullanıcı diğer oyuncuları bekliyor ve herhangi bir eylemi engellemiyor. Bu kullanıcıya herhangi bir bildirim gönderilmeyecektir çünkü kendisi bir şeylerin olmasını beklemektedir.
- ready - Kullanıcı hazır durumdadır. Oyun oturumu bir kullanıcıdan bir cevap beklemektedir. Bir bildirim kullanıcıya bu durum kalkana kadar gönderilecektir.
- done - Oyun bu kullanıcı için tamamlanmıştır. Kullanıcı oyunun bittiğine dair bildirim alacaktır ancak herhangi bir eyleme gerek yoktur.
Veri Yapıları (JSON)
Bütün veri yapıları JSON biçiminde temsil edilir.
Değişken
{
"key": "key_name", // dize
"value": "value_of_key" // dize
}
LocalizedText
{
"token": "value", // yerelleştirilmiş bir belirteci gösteren dize
"variables":
[
// Bir "Variable" dizisi (yukarıya göz atın)
]
}
UserStatus
{
"steamid": "76561197960265729", // uint64
"state": // "UserState" sabitlerinden biri (yukarıda açıklandı),
"title": // Bir "LocalizedText" objesi (yukarıda açıklandı),
"message": // Bir "LocalizedText" objesi (yukarıda açıklandı)
}
Session
{
"sessionid": "1", // uint64
"title": // Bir "LocalizedText" objesi (yukarıda açıklandı),
"time_created": "100000", // Unix epoch zamanı (1 Ocak 1970'ten beri geçen süre).
"time_updated": "200000", // Unix epoch zamanı (1 Ocak 1970'ten beri geçen süre).
// 64-bit değer oturum oluşturulduğunda geliştirici tarafından sağlanır. Oyun başlatıldığında oyuna gönderilir.
// Bu size kolayca oturum objesini kendi arka uç objeniz ile eşleştirmenizi sağlar. Bu Steam tarafından iç kullanımda değildir.
"context": "31415926",
"user_status":
[
// "UserState" sabitlerinden biri (yukarıda açıklandı)
]
}
RequestedSession
{
"sessionid": "1", // uint64
"include_all_user_messages": "0" // bool
}
Uygun olan Yaygın API'lar
Tam liste için göz atın:
IGameNotificationsServiceBelirli oyun oturumlarını başlatmak
Kullanıcılar Steam'deki topluluk profil sayfalarında bütün etkin oyun oturumlarını görebileceklerdir. Oyun durumu ile birlikte Steam'e oyun oturumunu belirleyen belirli başlatma parametreleri ile birlikte oyunu başlatmasını söyleyecek bir buton bulunur. Bu yol ile bir oyun başlatıldığı zaman bir "_sessionid" başlangıç parametresi oyuna sağlanır. Bu parametreyi
ISteamApps::GetLaunchQueryParam çağrısı ile alabilirsiniz.
Şu şekilde:
const char *pchSessionID = ISteamApps()->GetLaunchQueryParam("_sessionid");
Bu şekilde direkt olarak oyunu başlatabilmek destekleyen bir oyun, oyunun başlangıcında bu arayüze çağrı yapmalıdır. Oturum kimlik dizesinin bulunduğundan ve giriş yapmış kullanıcı için geçerli olduğundan emin olmalı ve oyunu direkt olarak yüklemelidir.
Yerelleştirme
Yerelleştirme, uygulama yapılandırmanın bir parçası olan bir yerelleştirme aracı aracılığıyla oyun geliştiricisi tarafından sağlanır. Yerelleştirme aracına girilen her dize için her dilin çevirisini sağlamak için sorumlusunuzdur. Oyuncunun diline çevrilmemiş herhangi bir dize İngilizce hali ile gösterilecektir.
Oyun bildirimleri aşağıdaki özellikler için yerelleştirmeyi destekler:
Her bir
yerelleştirilmiş metin iki parçadan oluşur:
Bir belirteç "#" sembolü ile başlayan bir anahtardır. Uygulama yapılandırmanız içerisinde yer alan yerelleştirme aracı aracılığıyla farklı dillere yerelleştirilmiş bir dizeyi temsil eder. Tek bir belirteç, metin oluşturulduğu zaman oyunun runtime temelli bağlamı ile değiştirilebilen birden fazla değişken içerebilir. Bir örneği:
#InvitationText = "{{user}} adlı kullanıcı sizi Satranç oynamaya davet etti."
Yukarıdaki örnekte, #InvitationText için olan İngilizce çevirisi user adında tek bir değişken içerir. Bu metin mesajını bir kullanıcıya "SteamKullanıcıAdı" o oyuncuyu bir oyuna davet ettiği zaman göstermek istediğinizde aşağıdaki özellikler ile LocalizationText objesini güncellemek isteyeceksiniz:
"message":
{
"token": "#InvitationText",
"variables":
[
{ "key": "user", "value": "Michael" }
]
}
Oyuncu kendi durumunu gördüğünde şu mesajı (kendi yerel dilinde) görecek: "Michael adlı kullanıcı sizi Satranç oynamaya davet etti."
Yerelleştirme belirteçleri, uygulamanızın Steamworks Ayarlar sayfasındaki Topluluk sekmesinde yer alan Eş Zamansız Yerelleştirme bölümünden yüklenebilir.
Her dil şu şekilde görünen VDF dosyaları ile tek tek yüklenebilir:
"lang"
{
"Dil" "turkish"
"Belirteçler"
{
"BelirtecinAdı" "Belirteç ile ilişkili yerelleştirilmiş metin"
"BirDiğerBelirtecinAdı" "İkinci belirteç ile ilişkili yerelleştirilmiş metin"
}
}
Alternatif olarak, her dil için olan belirteçler şu şekilde görünen tek bir dosya olarak yüklenebilir:
"lang"
{
"turkish"
{
"Belirteçler"
{
"BelirtecinAdı" "Belirteç ile ilişkili yerelleştirilmiş metin"
"BirDiğerBelirtecinAdı" "İkinci belirteç ile ilişkili yerelleştirilmiş metin"
}
}
"spanish"
{
"Belirteçler"
{
"BelirtecinAdı" "El texto localizado asociado con el token"
"BirDiğerBelirtecinAdı" "El texto localizado asociado con el segundo token"
}
}
}