Yazı baya uzun ama bütün akıllı telefon kullanıcıları için önemli bir genel kültür oluşturacak bilgiler içeriyor. Vakit ayırıp okumanızı tavsiye ederim.
3 senelik bir uygulamamızı son 1 aydır komple elden geçiriyoruz. Ek olarak biraz da ekleme yapıyoruz. Androidde neredeyse her şeyi tamamladık ama IOS'da arka plan işlemlerine takıldık. Hem IOS'da belki konuya aşina bir swiftçi denk gelir diye hem de uygulamalar neler yapabilir görmeniz için uzunca konuyu yazmak istedim.
Uygulama belirli bir fiziksel konumda düzenli olarak bluetooth taraması yaparak bizim o bölgeye yerleştirdiğimiz bluetooth vericileri yakalıyor ve kullanıcının bu vericilere olan mesafelerini hesaplayıp sunucuya gönderiyor. Sunucuda da bunlar istatistiklere dönüşüyor ve bazı bildirimleri tetikliyor. Özel etkinlik alanları, fuarlar, iş yerlerinde personellerin takibi vb amaçlarla kısıtlı bir kullanıcı kitlesi tarafından aşağıda yazdıklarım bilinerek kullanılıyor.
Androidde kullanıcı fuar alanına giriş yaparken turnikelere biletini okutuyor ve turnike firması API üzerinden bizim uygulamayı tetikliyor ve uygulamanın bluetooth taraması ve arka plan işlem yürütmesi aktif hale geliyor. Fuardan çıkarken yine çıkış turnikesine bilet okuttuğunda API'den tetiklenip arka plan işlemleri ve taramayı durduruyor. Turnikeleri pas geçme ihtimaline karşı çıkışa yerleştirdiğimiz vericiyi görünce yada onu da bir şekilde pas geçerse konumu fuar alanı kordinatlarında çıkınca durduruyor bütün işlemleri. Yani tarama ve arka plan veri işlemlerini sadece fuar alanında tetikletiyoruz.
Fuar alanı içine girip uygulama tetiklendiğinde bizim tetikleyiciler dışında uygulamayı durdurmasının 2 yolu var, ya ayarlardan uygulamayı bulup zorla durdur yapacak yada uygulamayı silecek. Uygulamayı arka plana alma, ekranı kitleme, hatta uygulamayı arka planda komple öldürme yapsa bile uygulama kendini bildirim kısmına alıp telefonu yormayacak ve pile yüklenmeyecek sıklıkta tarama yapmaya devam ediyor. Kullanıcı bluetooth'u kapatsa bile uygulama 20 saniye içinde kullanıcı geri açmazsa bluetooth'u kendi açıyor. Taramada bir sorun olursa arka planda taramayı durdurup tekrar başlatabiliyor, bluetooth'la ilgili bir sorun olursa kullanıcıya gerek kalmadan kendi bluetooth'u kapatıp tekrar açarak sorunu çözmeyi deneyebiliyor. Henüz denemedik ama büyük ihtimalle bunu konum servisleri için de yapabiliyoruz. Kendi çözemediği bir sorun olduğunda da backendi uyarıp firebase üzerinden kullanıcı uygulama zorla durdurulmuş olsa bile kullanıcıya sorun olduğunu ve çözmesi gerektiğini anlatan bildirim gönderebiliyor. Ek olarak henüz denemedik ama Android kullanıcının gerekli izni vermesi durumunda uygulamanın kendini tamamen öldürüp sonra tekrar yeniden başlatmasına da izin veriyor. Yani sorun durumunda kullanıcıdan bir hamle beklemeden sorunu çözebilmek için bir çok otomatik önlem alabiliyoruz.
Android 11'de bütün bunlar sadece konum izni isteyerek yapabiliyor. Konum dışında başka hiç bir izine ihtiyacı yok. 12 ve 13'de ise konum + çevredeki bluetooth aksesuarları tarama izni yeterli oluyor.
Yani çalışması gereken o bir kaç saatlik süre ve bölgede Android üzerinde bir şekilde çalışıyor.
IOS tarafına geldiğimizde bunların bir kısmını teorik olarak yapabiliyoruz. Mesela uygulama komple kapalıyken kullanıcı önceden belirlenen konuma geldiğinde IOS uygulamadan bağımsız olarak bluetooth taramasını bizim yerimize kendi başlatarak bizim vericilerin IOS'a uygulama üzerinden ilettiğimiz ID'lerini yakaladığında uygulamayı arka planda kendi başlatıp aralıklarla arka planda istediğimiz işlemleri yürütmesine izin veriyor. Bunun için uygulamanın herhangi bir zamanda sadece 1 kere açılmış olması yetiyor. İlk açılışta IOS'a ID'leri iletiyor, geri kalan bütün süreci IOS kendi tetikleyip uygulamayı gerekli aralıklarla arka planda açıp işlem yürütmesine izin verip işlem bitince tekrar uyutuyor. Ve bunu, kullanıcı bizim belirlediğimiz geolocation sınırları içerisinde kaldığı sürece ve bizim cihazların ID'lerini gördükçe sürekli yapıyor. Belirlenen konumdan çıkış yapıldığında ise bütün arka plan hizmetlerini durduruyor. Ve bütün bu işlemler için IOS 16.1'de kullanıcıdan sadece konum izni istemesi yeterli oluyor.
Fakat gel gelelim IOS'da Apple'ın kendi dökümanlarında tarif ettiği bu kısmı bir türlü tetiklemeyi başaramadık. Ek olarak Android'de ki gibi belirli konum ve zaman içerisinde çıkabilecek sorunların çözümü için arka planda taramayı onarma, bluetooth ve konum hizmetilerini tekrar başlatma yada uygulamayı öldürüp tekrar açma gibi şeyleri yapamıyoruz.
Ek olarak anlık bir sorun yada yazılım değişikliği durumu olmasına karşın uygulama düzenli şekilde arkada sürüm kontrolü yapıyor ve yeni bir sürüm varsa bunu arka planda indirip, yeni kodları anında telefon arka planında sessizce derleyerek kullanıma alıyor. Bu sürüm güncellemelerinin çok büyük kısmını App Store yada Google Play'e yeni bir sürüm göndermeden ve kullanıcın yeni sürüm indirmesine gerek kalmadan sunucu üzerinden göndererek anlık yapabiliyoruz. Bu arada bu kısmı hem Android hem IOS'da sorunsuz olarak yapabiliyoruz. Uygulama sadece bir kaç saat çalışacak ve o saatlerde belirli olduğu için, anlık bir güncelleme gerekliliğinde Apple yada Google'ın inceleme ve güncelleme süreçleri + kullanıcın marketten sürümü indirme işlemi uzun ve yetersiz kalıyor, bunun için bu şekilde yapıyoruz.
Yazdıklarım korkutucu ve kanser eden türden gelebilir ama bunun bu şekilde çalıştığını bilerek çok sınırlı sayıda kişi sınırlı bir kaç saat için kullanıyor zaten. Herkese açık genel kullanım uygulamalarının hiç birinde böyle kanser şeyler eklemiyorum.
Ama yine de teknik olarak bunlar yapılabiliyor, bilginiz olsun.
Bu yazıyı yazmamda 2 amaç var, 1.'si teknik olarak bir uygulamanın neler yapabileceğini bilin istedim her iki platformda da, 2. olarak da IOS tarafında Apple dökümanlarında açık açık yapabileceğimizi belirtmesine rağmen hala çözemedik ve böyle bir projede kısa süreli bulunup destek verecek bir swiftçi arkadaş arıyoruz. Çevrenizdeki swiftçilere iletirseniz belki ilgilerini çekebilir.
Amazon’da bozmuş o zaman. Normalde kendilerinin alıp ilgilenmesi gerekiyordu. Bu arada tamirinin olacağını sanmıyorum direk sıfırıyla değişim yapılması gerekir.
https://www.servis.gov.tr/Genel/Sorgu
Cihazın içinden çıkan garanti belgesinde ürünün ithalatçısı şirket yazar. O firmanın anlaşmalı olduğu teknik servise yollayabilirsiniz. Xiaomi'yi çok fazla ithal eden var ithalatçıyı bulmadan servisi bulmak zor.
Malesef kayıp garanti kağıdı.
@joe o zaman satıcı firmanın üzerine gidin hocam. Yasal olarak satıcı firmanın da üreticinin (Yurt dışı ürünü ise ithalatçının) de sorumluluğu var. Servise gidecekse sizden alıp onlar gönderir. Siz hangisi ile ilerlemek isterseniz onunla ilerlersiniz, bana değil ona git diyemezler.
Amazon üzerinden satılması ya da deposundan gönderilmesi Amazon'u satıcı yapmıyor. Belki platformdaki başka bir satıcının ürünüdür. Faturadaki firmaya bakın, sipariş kısmında oluyor fatura.
@fikri Amazon tarafından satılır ve gönderilir. Elektronik urun alırken hep buna bakarak alırım. Yavaş yavaş amazondan bir şey almamaya başlayacağım.