GTAF, DPA ile iletişim kurarken aboneyi tanımlamak için kullanıcı anahtarını kullanır. Kullanıcının MSISDN'sine erişimi olan uygulamalar, bunu user_key olarak kullanabilir. Öte yandan, MSISDN'ye erişimi olmayan uygulamaların, kullanıcının MSISDN'sini keşfetmeden bir operatör planı tanımlayıcısı (CPID) oluşturması gerekir. Aşağıda, CPID'yi oluşturan mekanizma açıklanmaktadır.
CPID görüşme akışı
Şekil 2: CPID oluşturmak için arama akışı.
- UE'deki bir Google uygulaması, GTAF'den CPID uç noktasının URL'sini almak için Google'a özel bir API kullanır. Operatör, istemcinin herkese açık IP adresi ve etkin SIM kartın MCC+MNC'si kullanılarak tanımlanır. Sanal mobil şebeke operatörleri (MVNO) söz konusu olduğunda Google, MVNO'yu belirlemek için SPN ve GID1'i kullanır.
- İstemci, CPID uç noktasına bir HTTP GET isteği gönderir. Operatör, isteğin HTTPS üzerinden gönderilmesini DESTEKLEYEBİLİR.
- Operatör, isteği tanımlamak ve kullanıcının telefon numarasını HTTP üst bilgisi olarak isteğe eklemek için Derin Paket İnceleme işlevini KULLANABİLİR.
- CPID uç noktası isteği alır, CPID'yi oluşturur ve CPID'yi UE'ye döndürür. Bu işlem sırasında, UE'nin bu CPID'yi ne kadar süreyle kullanabileceğini belirten bir yaşam süresi (TTL) eklenir.
Operatör, tercih etmesi durumunda CPID uç nokta URL'sinde alan adları yerine IP adreslerini de kullanabilir. IP adresleri özel adres alanında OLABİLİR ancak operatörün ağındaki Google istemcileri tarafından erişilebilir olmalıdır.
Operatör, oryantasyon süreci kapsamında Google'a aşağıdaki bilgileri SAĞLAMALIDIR:
- Uygulamaların CPID'leri almak için iletişime geçeceği CPID_URL. Bir CPID_URL zorunludur ancak operatör, kullanılabilirliği artırmak için birden fazla URL sağlayabilir.
- Operatörün sahip olduğu IP öneklerinin listesi ve operatörün sağlanan CPID_URL'lerle eşlenmesini istediği Mobil Ülke Kodu (MCC) ve Mobil Ağ Kodları (MNC). Operatör, ağındaki sanal mobil şebeke operatörlerini ayırt etmek için SPN veya GID1 kullanıyorsa bu bilgileri de SAĞLAMALIDIR. Google, bu bilgileri, Şekil 2'deki 1. adımda gösterildiği gibi, istemcileri ilgili CPID uç noktalarıyla eşleştirmek için kullanır.
İsteğin biçimi:
GET CPID_URL
Eski nedenlerden dolayı CPID uç noktası, aşağıdaki gibi bir isteği destekleyebilmelidir:
GET CPID_URL?app={app_id}
CPID uç noktası, CPID oluştururken {app_id}
URL parametresini yoksayabilir. Ancak parametreyi içeren bir isteği işleyebilmesi GEREKİR.
CPID uç noktasına yapılan istek Accept-Language
üstbilgisini içerebilir. Başlık eklenmişse DPA'nın Mobil Veri Planı Paylaşımı API'si kullanılarak gönderdiği güncellemelerdeki okunabilir dizeler, CPID isteğinde sağlanan ayarları KULLANMALIDIR.
İstemci her GET CPID_URL isteği gönderdiğinde YENİ bir CPID almalıdır. CPID oluşturma işlemi başarılı olursa CPID uç noktası 200 OK yanıtı DÖNDÜRMELİDİR. Yanıt metni, CPIDResponse öğesinin bir örneğini içermelidir.
{
"cpid": "<CPID_string>",
"ttlSeconds": 2592000
}
Bir abone daha sonra başka CPID'ler istemiş olsa bile döndürülen CPID, ttlSeconds saniye boyunca GEÇERLİ OLMALIDIR. Google, en iyi kullanıcı deneyimi için 30 günlük bir TTL değeri kullanılmasını ancak 14 günden kısa olmamasını önerir. GTAF, DPA'ya yapılan sonraki çağrılarda RFC2396 uyarınca CPID'yi kodlayacaktır.
CPID oluşturma
CPID uç noktasının CPID oluşturması için ÖNERİLEN yöntem şudur:
CPID_string = Base64(AES(MSISDN + TimeStamp + language, secret))
CPID uç noktası, MSISDN'yi, istemci tarafından Accept-Language üstbilgisinde gönderilen dili ve yüksek çözünürlüklü bir zaman damgasını birleştirir ve secret
anahtarını kullanarak AES üzerinden şifreler. Zaman damgası, CPID'nin sona erdiği zamana karşılık GELMELİDİR. Şifrelenmiş çıkış Base64 kodludur. Ayrıca, CPID bir URL'de kullanıldığında Base64'te kullanılan özel karakterleri (/+=) işlemek için URL kodlaması YAPILMALIDIR. Özellikle GTAF, DPA'yı çağırdığında veya DPA, Mobil Veri Planı Paylaşımı API'sini çağırdığında CPID, URL olarak kodlanmalıdır.
Belirli operatörlerin durumuna bağlı olarak CPID uç noktasını uygulamak kolay olmayabilir. Sık karşılaşılan bir zorluk, CPID uç noktasında MSISDN'ye erişmektir. Operatörlerin ilk katılım sürecinde öğrendiklerimizi paylaşmaktan mutluluk duyuyoruz. Zorluk yaşarsanız lütfen bizimle iletişime geçin.
CPID Depolama
Yukarıda açıklanan mekanizma kullanılarak oluşturulan bir CPID'nin veritabanında saklanması gerekmez. DPA'ya yapılan aramaların işlenmesi için gerekli bilgiler CPID'den alınabilir.
- DPA, GTAF'den plan durumu veya tekliflerle ilgili bir arama aldığında CPID'nin şifresi çözülerek ve MSISDN çıkarılarak MSISDN elde edilebilir.
- CPID'nin geçerlilik bitiş zamanı, CPID'nin şifresi çözülerek ve ardından geçerlilik bitiş zaman damgası çıkarılarak elde edilebilir.
Kullanılabilirlik ve Kapasite Koşulları
CPID'yi alamayan istemciler, Mobil Veri Planı API'sindeki hiçbir bilgiye erişemez. Bu nedenle, operatör, CPID uç noktasının kullanılabilirliğini sağlamak için gerekli önlemleri ALMALIDIR. Bu tür önlemler arasında CPID uç noktasının ve DPI işlevlerinin birden fazla örneğinin bulunması, her iki işlev için fiziksel, site ve ağ yedekliliğinin sağlanması ve sistem kaynakları ile kapasitenin yeterli olduğundan emin olunması yer alır. Ayrıca, CPID uç noktası ve başlığı yerleştiren DPI işlevi, CPID isteyen tüm Google istemcilerinin yükünü kaldırabilecek yeterli kapasiteye sahip olmalıdır. CPID uç noktası, CPID oluşturma sıklığını azaltmak için ttlSeconds
alanında daha büyük değerler kullanabilir.
Hata örnekleri
Bir hata oluşursa CPID uç noktası, ErrorResponse örneğini İÇEREN bir yanıt gövdesiyle HTTP hatası döndürmelidir. İyi bir hata mesajı, hatanın nedenini ayıklamaya yardımcı olabilecek bilgiler içerir. Örneğin, CPID'nin süresinin dolması durumunda, CPID oluşturma ve geçerlilik bitiş zamanı gibi bilgilerin eklenmesi, CPID uç noktasının tasarlandığı şekilde çalıştığını doğrulamamıza yardımcı olur.
{
"errorMessage": "<error message>",
"cause": "USER_ROAMING"
}
CPID uç noktası, senaryoya bağlı olarak AŞAĞIDAKİ değerleri döndürmelidir:
- Operatör ağına ait olmayan (ör. başka bir operatöre ait olan ancak bu CPID uç noktası tarafından sunulan ağda dolaşan) veya veri planı bilgilerini Google ile paylaşmayı tercih etmemiş bir kullanıcı için CPID isteği alınırsa CPID uç noktası, neden olarak USER_ROAMING, USER_OPT_OUT veya INELIGIBLE_FOR_SERVICE ile birlikte HTTP durum kodu 403'ü DÖNDÜRMELİDİR.
- Geçersiz bir telefon numarasıyla CPID isteği alınırsa CPID uç noktası, INVALID_NUMBER hata nedeni ile HTTP 400 döndürmelidir.
- CPID uç noktasına yapılan istek başka bir şekilde hatalıysa CPID uç noktası, neden olarak ERROR_CAUSE_UNSPECIFIED ile HTTP 400 döndürmelidir.
- Diğer hata nedenleri için uyumlu herhangi bir HTTP hata kodu kabul edilir. Özellikle HTTP 500, CPID uç noktasındaki herhangi bir dahili hata için uygun bir hata nedenidir.