Yükleme seçenekleri
Android Over The Air API'si, yeni bir Package kaynağı oluşturmak için paket verilerini yüklemenize olanak tanır. Bunlar: Güncellemenin yayınlanması için bir veya daha fazla yapılandırmayla ilişkilendirilebilecek OTA paketleri ekleyebilirsiniz.
Devam ettirebileceğiniz paket yüklemelerini kolaylaştırmak amacıyla, Linux ve Windows için kullanımı, aşağıda açıklanan protokollerin uygulanması yerine ücretsiz olarak kullanılabilir. Ayrıntılı bilgi edinmek isterseniz entegrasyonu için lütfen aşağıda açıklanan protokollerden birini kullanın.
Linux
Linux için Android Over The Air API v1 yükleyici istemcisini indirin.
Windows
Windows için Android Over The Air API v1 yükleyici istemcisini indirin.
Bunu kullanmak için önce bir hizmet hesabı oluşturmanız ve bu hesap için bir JSON anahtar dosyası edinmeniz gerekir.
Hesabı oluşturma kılavuzumuza buradan göz atabilirsiniz.
.
İkili dosyayı ve anahtar dosyasını aldıktan sonra, dosyayı komut satırı seçenekleriyle çalıştırabilirsiniz:
anahtar dosyanız, dağıtımınız ve yüklediğiniz paket olur. Lütfen --help
kullanın
tıklayın.
Yükleme Protokolleri
Aşağıdaki yöntemlerden herhangi birini kullanarak yükleme isteğinde bulunabilirsiniz.
X-Goog-Upload-Protocol
istek başlığı ile kullandığınız yöntemi belirtin.
- Çok parçalı yükleme:
X-Goog-Upload-Protocol: multipart
. Hızlı transfer için daha küçük dosyalar ve meta veriler; dosyayı, tek bir istekte bulunarak dosyayı açıklayan meta verilerle birlikte aktarır. - Devam ettirilebilir yükleme:
X-Goog-Upload-Protocol: resumable
. Güvenilir aktarım için (özellikle de büyük ölçekli ödemelerde dosyası olarak da kaydedebilir. Bu yöntemle, isteğe bağlı olarak meta veriler içerebilen bir oturum başlatma isteği kullanırsınız. Bu, çoğu proje için iyi bir stratejidir. kullanılabilmesidir, çünkü yükleme başına bir ek HTTP isteği karşılığında daha küçük dosyalarda da çalışır.
Çok parçalı yükleme
Gönderdiğiniz veriler küçükse bu iyi bir seçenektir Tamamen ücretsiz olarak yükleyebilmeniz için yeterli.
Çok parçalı yüklemeyi kullanmak için /upload/package öğesine bir POST
isteğinde bulunun
URI ve X-Goog-Upload-Protocol
değerini multipart
olarak ayarlayın.
Çok parçalı bir yükleme isteği gönderirken kullanılacak üst düzey HTTP üstbilgileri şunlardır:
Content-Type
Çok parçalı/ilgili olarak ayarlayın ve dahil ettiğiniz sınır dizesini kullanarak bu işlemi yapabilirsiniz.Content-Length
İstek gövdesindeki toplam bayt sayısına ayarlayın.
İsteğin gövdesi, multipart/related
içeriği olarak biçimlendirilir
[RFC2387] yazın ve tam olarak iki bölümden oluşur.
Bölümler bir sınır dizesiyle tanımlanır ve son sınır dizesinin ardından iki kısa çizgi gelir.
Çok parçalı isteğin her bölümü için ek bir Content-Type
başlığı gerekir:
- Meta veri bölümü: Önce gelmeli,
Content-Type
iseapplication/json
olmalıdır. - Medya bölümü: İkinci gelmeli ve
Content-Type
,application/zip
olmalıdır.
Örnek: Çok parçalı yükleme
Aşağıdaki örnekte, Android Over The Air API için çok parçalı bir yükleme isteği gösterilmektedir.
POST /upload/package HTTP/1.1 Host: androidovertheair.googleapis.com Authorization: Bearer your_auth_token Content-Type: multipart/related; boundary=BOUNDARY Content-Length: number_of_bytes_in_entire_request_body --BOUNDARY Content-Type: application/json; charset=UTF-8 {"deployment": "id", "package_title": "title" } --BOUNDARY Content-Type: application/zip; charset=UTF-8 Package ZIP --BOUNDARY--
İstek başarılı olursa sunucu, HTTP 200 OK
durum kodunu döndürür.
HTTP/1.1 200
Bunu kolayca başarmanın bir yolu da curl kullanmaktır. ve oauth2l. Aşağıda örnek bir istek verilmiştir bir hizmet anahtarı kullandığınızı varsayar (bkz. yetkilendirmenin nasıl yapılacağını öğrenin).
Örnek curl isteği
JSON={"deployment": "id", "package_title": "title" } SERVICE_KEY_FILE=path to your service key json file curl \ -H "$(./oauth2l header --json $SERVICE_KEY_FILE android_partner_over_the_air)" \ -H "Host: androidovertheair.googleapis.com" \ -H "X-Goog-Upload-Protocol: multipart" \ -H "Content-Type: multipart/form-data" \ -F "json=$JSON;type=application/json" \ -F "data=@update.zip;type=application/zip" \ androidovertheair.googleapis.com/upload/package
Devam ettirilebilir yükleme
Veri dosyalarını daha güvenilir şekilde yüklemek için devam ettirilebilir yükleme protokolünü kullanabilirsiniz. Bu protokol, Veri akışı kesintiye uğradığında, yükleme işlemini devam ettirmeniz gerekir. Google özellikle büyük dosyalar aktarıyorsanız ve ağ bağlantısının kesilmesi olasılığı veya başka bir iletim hatası (örneğin, bir mobil istemci uygulamasından yükleme yaparken) yüksektir. Google Ayrıca, ağ arızaları durumunda bant genişliği kullanımınızı da azaltabilir. büyük dosya yükleme işlemlerini ya da baştan başlatabilirsiniz.
Devam ettirilebilir yükleme protokolü birkaç komut kullanır:
- Devam ettirilebilir bir oturum başlatın. Şu parametreyi içeren yükleme URI'sine ilk istekte bulunun: meta verileri sağlar ve benzersiz bir devam ettirilebilir yükleme konumu oluşturur.
- Devam ettirilebilir oturum URI'sini kaydedin. ilk isteğin yanıtı; bu oturumdaki kalan istekler için bu numarayı kullanacaksınız.
- Dosyayı yükleyin. ZIP dosyasının tamamını veya bir kısmını devam ettirilebilir oturum URI'sine gönderin.
Ayrıca, devam ettirilebilir yüklemeyi kullanan uygulamaların, kesintili yüklemeyi devam ettirecek koda sahip olmaları gerekir. Yükleme işlemi kesintiye uğratmak, ne kadar verinin başarıyla alındığını öğrenmek ve ardından yüklemeyi bu noktadan itibaren devam ettirmektir.
Not: Yükleme URI'sinin süresi 3 gün sonra dolar.
1. Adım: Devam ettirilebilir bir oturum başlatın
Devam ettirilebilir bir yükleme başlatmak için /upload/package öğesine bir POST
isteğinde bulunun
URI ve X-Goog-Upload-Protocol
değerini resumable
olarak ayarlayın.
Bu başlatan istek için gövde yalnızca meta verileri içermelidir; gerçek dönüşüm hesabını dosyanın içeriğini inceleyebilirsiniz.
İlk istekle birlikte aşağıdaki HTTP üstbilgilerini kullanın:X-Goog-Upload-Header-Content-Type
Bu, yüklenen dosyanın içerik türüdür veapplication/zip
olarak ayarlanmalıdır.X-Goog-Upload-Command
start
olarak ayarlaX-Goog-Upload-Header-Content-Length
Sonraki isteklerde aktarılacak yükleme verilerinin bayt sayısını ayarlayın. İstek sırasında uzunluk bilinmiyorsa bu başlığı atlayabilirsiniz.Content-Type
Bu, meta verinin içerik türüdür veapplication/json
olarak ayarlanmalıdır.Content-Length
Bu ilk isteğin gövdesinde sağlanan bayt sayısına ayarlayın.
Örnek: Devam ettirilebilir oturum başlatma isteği
Aşağıdaki örnekte Android Over The Air API için devam ettirilebilir bir oturumun nasıl başlatılacağı gösterilmektedir.
POST /upload/package HTTP/1.1 Host: android/over-the-air.googleapis.com Authorization: Bearer your_auth_token Content-Length: 38 Content-Type: application/json; charset=UTF-8 X-Goog-Upload-Command: start X-Goog-Upload-Header-Content-Type: application/zip X-Goog-Upload-Header-Content-Length: 2000000 {"deployment": "id", "package_title": "title" }
Sonraki bölümde yanıtın nasıl ele alınacağı açıklanmaktadır.
2. Adım: Devam ettirilebilir oturum URI'sini kaydedin
Oturum başlatma isteği başarılı olursa API sunucusu, HTTP 200 OK
durum koduyla yanıt verir.
Ayrıca, devam ettirilebilir oturum URI'nızı belirten bir X-Goog-Upload-URL
üst bilgisi sağlar.
Aşağıdaki örnekte gösterilen X-Goog-Upload-URL
üstbilgisi, upload_id
sorgu parametresi içerir.
bölümündeki adımları uygulayın. Yanıtta X-Goog-Upload-Status
var
başlığı. Yükleme isteği geçerli ve kabul edilmişse bu değer active
olacaktır. Bu durum final
olabilir
geri yüklenir.
Örnek: Devam ettirilebilir oturum başlatma yanıtı
1. Adımdaki isteğin yanıtı aşağıda verilmiştir:
HTTP/1.1 200 OK X-Goog-Upload-Status: active X-Goog-Upload-URL: androidovertheair.googleapis.com/?upload_id=xa298sd_sdlkj2 Content-Length: 0
Yukarıdaki örnek yanıtta gösterildiği gibi X-Goog-Upload-URL
üstbilgisinin değeri:
gerçek dosya yüklemesini yapmak veya yükleme durumunu sorgulamak için HTTP uç noktası olarak kullanacağınız oturum URI'si.
Sonraki isteklerde kullanmak için oturum URI'sini kopyalayıp kaydedin.
3. adım: Dosyayı yükleyin
Dosyayı yüklemek içinPOST
önceki adım. Yükleme isteğinin biçimi şu şekildedir:
POST session_uri
Devam ettirilebilir dosya yükleme istekleri yapılırken kullanılacak HTTP üstbilgileri:
Content-Length
Bunu, söz konusu istekte yüklediğiniz bayt sayısına (genellikle yükleme dosyasının boyutu) ayarlayın.X-Goog-Upload-Command
Bunuupload
vefinalize
olarak ayarlayın.X-Goog-Upload-Offset
Bu, baytların yazılması gereken ofseti belirtir. Müşterilerin baytları seri olarak yüklemelidir.
Örnek: Devam ettirilebilir dosya yükleme isteği
Aşağıda, geçerli örnek için 2.000.000 baytlık ZIP dosyasının tamamını yüklemeye yönelik devam ettirilebilir bir istek verilmiştir.
POST /?upload_id=xa298sd_sdlkj2 HTTP/1.1 Host: androidovertheair.googleapis.com X-Goog-Upload-Protocol: resumable X-Goog-Upload-Command: upload, finalize X-Goog-Upload-Offset: 0 Content-Length: 2000000 Content-Type: application/zip bytes 0-1999999
İstek başarılı olursa sunucu bir HTTP 200 Ok
ile yanıt verir.
Yükleme isteği kesintiye uğrarsa veya HTTP 503 Service Unavailable
ya da herhangi bir
sunucudan başka 5xx
yanıtı almak için kesintili yüklemeyi devam ettirme bölümünde açıklanan prosedürü uygulayın.
Dosyayı parçalar halinde yükleme
Devam ettirilebilir yüklemelerle bir dosyayı parçalara ayırabilir ve her parçayı sırayla yüklemek için bir dizi istek gönderebilirsiniz.
Ek isteklerle ilişkili performans maliyetleri bulunduğundan ve tercih edilen ek taleplere ilişkin
gerekmez. İstemcilerin yükten kalan tüm baytları yüklemesini ve
her upload
komutuna finalize
komutunu dahil edin.
Ancak tüm sunucularda aktarılan veri miktarını azaltmak için tek istek. Ayrıca, eski tarayıcılar için yükleme ilerleme durumu göstergeleri gibi işlemler yapmanıza da olanak tanır. varsayılan olarak yükleme ilerlemesi desteği olmayan
Kesintiye uğrayan yüklemeyi devam ettirme
Yükleme isteği, yanıt alınmadan sonlandırılırsa veya
Sunucudan HTTP 503 Service Unavailable
yanıtı geliyorsa kesintiye uğrayan yüklemeyi devam ettirmeniz gerekir. Bunun için:
- İstek durumu. Yükleme URI'sine bir istek göndererek yüklemenin mevcut durumunu sorgula
X-Goog-Upload-Command
,query
olarak ayarlanmış şekilde.Not: Yalnızca yükleme kesintiye uğradığında değil, parçalar arasında durum bilgisi isteyebilirsiniz. Bu Örneğin, eski tarayıcılar için yükleme ilerleme göstergelerini göstermek istiyorsanız kullanışlıdır.
- Yüklenen bayt sayısını alın. Durum sorgusundan gelen yanıtı işleyin. Sunucu,
X-Goog-Upload-Size-Received
üstbilgisini de ekleyerek şu ana kadar kaç bayt aldığını belirtir. - Kalan verileri yükleyin. Son olarak, isteği nereden devam ettireceğinizi artık bildiğinize göre,
veya mevcut parçayı kullanır. Kalan verileri her iki durumda da ayrı bir parça olarak ele almanız gerektiğini unutmayın.
Yüklemeyi devam ettirdiğinizde
X-Goog-Upload-Offset
başlığını uygun ofsete ayarlamanız gerekir.
Örnek: Kesintiye uğrayan bir yüklemeyi devam ettirme
1) Yükleme durumunu isteyin.
POST /?upload_id=xa298sd_sdlkj2 HTTP/1.1 Host: androidovertheair.googleapis.com X-Goog-Upload-Command: query
Tüm komutlarda olduğu gibi, istemcinin bir sorgu komutunun HTTP yanıtındaki X-Goog-Upload-Status
üst bilgisini kontrol etmesi gerekir.
Başlık varsa ve değer active
değilse yükleme zaten sonlandırılmış demektir.
2) Yanıttan o ana kadar yüklenen bayt sayısını çıkarın.
Sunucunun yanıtı,X-Goog-Upload-Size-Received
şimdiye kadar dosyanın ilk 43 baytını aldı.
HTTP/1.1 200 OK X-Goog-Upload-Status: active X-Goog-Upload-Size-Received: 42
3) Yüklemeye kaldığı yerden devam edin.
Aşağıdaki istek, dosyanın kalan baytlarını göndererek 43. bayttan başlayarak yüklemeyi devam ettirir.
POST /?upload_id=xa298sd_sdlkj2 HTTP/1.1 Host: androidovertheair.googleapis.com X-Goog-Upload-Command: upload, finalize Content-Length: 1999957 X-Goog-Upload-Offset: 43 bytes 43-1999999
En iyi uygulamalar
Medya yüklerken, hata işlemeyle ilgili en iyi uygulamaları dikkate almanız önerilir.
- Aşağıdakiler dahil olmak üzere, bağlantı kesintileri veya herhangi bir
5xx
hatası nedeniyle başarısız olan yüklemeleri devam ettirin veya yeniden deneyin:500 Internal Server Error
502 Bad Gateway
503 Service Unavailable
504 Gateway Timeout
- Yükleme istekleri devam ettirilirken veya yeniden denenirken
5xx
sunucu hatası döndürülürse eksponansiyel geri yükleme stratejisi kullanın. Sunucu aşırı yükleniyorsa bu hatalar ortaya çıkabilir. Üstel geri yükleme, yüksek istek hacmi veya yoğun ağ trafiği sırasında bu tür sorunların giderilmesine yardımcı olabilir. - Diğer istek türlerinin eksponansiyel geri yükleme ile işlenmemesi gerekir ancak birkaçını yeniden deneyebilirsiniz. Bu istekleri yeniden denerken işlemi deneme sayısını sınırlandırın. Örneğin, kodunuzda hata bildirmeden önce en fazla 10 yeniden deneme yapılabilir.
- Tüm yüklemeyi baştan başlatarak devam ettirilebilir yüklemeler yaparken
404 Not Found
hatalarını giderin.
Eksponansiyel geri yükleme
Üstel geri yükleme, ağ uygulamaları için standart bir hata işleme stratejisidir. İstemci bu uygulamada, istemcinin başarısız bir isteği belirli bir süre boyunca düzenli olarak yeniden dener. Çok sayıda istek veya yoğun ağ trafiği, sunucunun hata döndürmesine neden oluyorsa üstel geri yükleme, bu hataları ele almak için iyi bir strateji olabilir. Buna karşılık, geçersiz yetkilendirme kimlik bilgileri veya dosya bulunamadı hataları gibi ağ hacmi ya da yanıt süreleriyle ilgili olmayan hataları ele almak için uygun bir strateji değildir.
Doğru kullanıldığında, üstel geri yükleme bant genişliği kullanımının verimliliğini artırır, başarılı bir yanıt almak için gereken istek sayısını azaltır ve eşzamanlı ortamlarda isteklerin işleme hızını en üst düzeye çıkarır.
Basit üstel geri yükleme uygulama akışı aşağıdaki gibidir:
- API'ye istekte bulunun.
- İsteği yeniden denemeniz gerektiğini belirten bir
HTTP 503
yanıtı alın. - 1 saniye + rastgele_number_milisaniyelik bir süre bekleyip isteği yeniden deneyin.
- İsteği yeniden denemeniz gerektiğini belirten bir
HTTP 503
yanıtı alın. - 2 saniye + rastgele_number_milisaniyelik bir süre bekleyip isteği yeniden deneyin.
- İsteği yeniden denemeniz gerektiğini belirten bir
HTTP 503
yanıtı alın. - 4 saniye + rastgele_number_milisaniyelik bir süre bekleyip isteği yeniden deneyin.
- İsteği yeniden denemeniz gerektiğini belirten bir
HTTP 503
yanıtı alın. - 8 saniye + rastgele_number_milisaniyelik bir süre bekleyip isteği yeniden deneyin.
- İsteği yeniden denemeniz gerektiğini belirten bir
HTTP 503
yanıtı alın. - 16 saniye + rastgele_number_milisaniyelik bir süre bekleyip isteği yeniden deneyin.
- Durdur. Hata bildirin veya günlüğe kaydedin.
Yukarıdaki akışta rastgele_sayı_milisaniye sayısı, 1000'den küçük veya 1000'e eşit olan rastgele bir milisaniye sayısıdır. Bu gereklidir çünkü küçük bir rastgele gecikme uygulamak, yükün daha eşit sıklıkta dağıtılmasına yardımcı olur ve sunucunun damgalanması olasılığını ortadan kaldırır. Rastgele_sayı_milisaniye değeri, her beklemeden sonra yeniden tanımlanmalıdır.
Not: Bekleme süresi her zaman (2 ^ n) + rastgele_sayı_milisaniyedir. Burada n, başlangıçta 0 olarak tanımlanan, monoton olarak artan bir tam sayıdır. n tam sayısı her iterasyon (her istek) için 1 oranında artar.
Algoritma, n değeri 5 olduğunda sona erecek şekilde ayarlanmıştır. Bu üst sınır, istemcilerin sonsuza kadar yeniden denemesini engeller ve istek "kurtarılamayan hata" olarak değerlendirilmeden önce yaklaşık 32 saniyelik bir toplam gecikmeyle sonuçlanır. Özellikle uzun bir yükleme devam ediyorsa maksimum yeniden deneme sayısının yüksek olması sorun yaratmaz; yeniden deneme süresini makul bir süreye (örneğin, bir dakikadan az) ayarladığınızdan emin olun.