Sorun giderme · 8 dk okuma
iPhone'da kıble pusulası: neden bazen doğru, bazen 30 derece yanlış
Safari'nin pusula değeri gerçek kuzeye göredir; MagSafe kılıflar ve kalibrasyon kaybı bunu bozar. iOS'a özgü davranışlar ve çözümleri.
iPhone'un pusulası, web tarayıcısında Android'den farklı bir şeybildirir. Bu farkı bilmek, iOS'ta yaşanan kıble sorunlarının yarısını doğrudan açıklıyor. Diğer yarısı ise kılıfınızda duruyor.
Safari gerçek kuzeyi bildirir
Web tarayıcıları cihazın yönünü DeviceOrientationEvent adlı bir olayla paylaşır. iOS Safari bu olaya kendine özgü bir alan ekler: webkitCompassHeading. Apple bu değeri gerçek (coğrafi) kuzeye göre tanımlar — yani cihaz, manyetik sapma düzeltmesini kendisi uygulayıp size düzeltilmiş sonucu verir.
Android Chrome ise deviceorientationabsolute olayı üzerinden manyetik kuzeye göre bir değer verir; düzeltmeyi uygulamanın yapması gerekir.
Bunun pratik sonucu şu: bir uygulama iki platformu aynı sanıyorsa, birinde doğru diğerinde yanlış olur. Türkiye'de manyetik sapma yaklaşık altı derece olduğundan, hata da yaklaşık altı derecedir. Daha kötü senaryo, uygulamanın iOS'ta düzeltmeyi ikinci kez uygulamasıdır — o zaman hata iki katına, yaklaşık on iki dereceye çıkar.
Bizim çözümümüz okuduğumuz değerin hangi referansa ait olduğunu taşımak. Kadranın altındaki etikette "cihaz gerçek kuzeyi bildiriyor" yazıyorsa iOS yolundasınız ve sapmayı biz uygulamıyoruz. "Sapma düzeltmesi uygulandı" yazıyorsa manyetik bir okuma alıyoruz ve düzeltmeyi biz ekliyoruz.
iOS izin ister, Android istemez
iOS 13 ve sonrasında hareket sensörlerine erişim açık izin gerektirir. Bu izin yalnızca bir kullanıcı hareketinin (dokunma) içinden istenebilir; sayfa yüklenirken otomatik olarak istenemez. Denenirse tarayıcı hata döndürür.
Bu yüzden sitemizde "pusulayı etkinleştir" düğmesi var. Bu bir tasarım tercihi değil, platform kısıtı. Düğmeye dokunmadan kadran canlanmaz — ama açı yine hesaplanmış durumda ve ekranda görünüyor.
İzni bir kez reddettiyseniz Safari bunu hatırlar ve düğme çalışmaz hâle gelir. Sıfırlamak için Ayarlar → Safari → Gelişmiş → Web Sitesi Verileri üzerinden siteyi temizlemeniz ya da Ayarlar → Safari → Hareket ve Yön Erişimi seçeneğini kontrol etmeniz gerekir.
MagSafe ve mıknatıslı kılıflar
iPhone'a özgü en yaygın sorun bu. MagSafe halkası, telefonun arka yüzüne yerleştirilmiş bir mıknatıs dizisidir ve manyetometre de aynı gövdenin içinde bulunur. Aralarındaki mesafe santimetrelerle ölçülür.
Dünya'nın manyetik alanı yeryüzünde 22 ile 68 mikrotesla arasındadır — çok zayıf bir alan. Bir MagSafe mıknatısı bu ölçekte devasadır. Sonuç: manyetometre Dünya'yı değil kılıfı ölçer ve pusula tutarlı biçimde yanlış gösterir.
En sinsi kısmı, hatanın kararlı olması. İğne titremez, huzursuz görünmez, sadece yanlış bir yeri sabit biçimde gösterir. Kullanıcının bunu bağımsız bir referans olmadan anlaması mümkün değildir.
Çözüm basit: ölçüm yapmadan önce kılıfı çıkarın. Manyetik araç tutucusu kullanıyorsanız telefonu tutucudan alın; kablosuz şarj pedinden de uzaklaştırın.
Kalibrasyon kaybı
Manyetometrenin her ekseninin bir sıfır noktası (offset) vardır ve bu noktalar zamanla kayar. Güçlü bir manyetik alana yakın kalmak kaymayı hızlandırır — yani mıknatıslı kılıf, sadece anlık ölçümü bozmakla kalmaz, kalibrasyonu da bozar.
Düzeltmesi on saniye sürüyor: telefonu elinizde tutup havada birkaç kez büyük bir sekiz çizin. Bu hareketin amacı sensörün üç eksende de geniş bir değer aralığı görmesini sağlamak; işletim sistemi bu verilerden yeni offset'leri türetiyor. Hareketi yavaş ve geniş yapmak gerekir — hızlı sallamak işe yaramaz.
Pusula sayfamızdaki kalibrasyon rehberi hareketi animasyonla gösteriyor ve sonunda kararsızlığın gerçekten azalıp azalmadığını ölçüp söylüyor. Yani işe yarayıp yaramadığını tahmin etmeniz gerekmiyor.
iOS'un doğruluk bildirimi bir avantaj
Bir konuda iOS, Android'in önünde: Safari pusula doğruluğunu derece cinsinden bildirir (webkitCompassAccuracy). Biz bu değeri doğruluk rozetinde doğrudan gösteriyoruz.
Android tarayıcıları böyle bir alan sunmaz; orada son yirmi dört okumanın dairesel dağılımından kendi tahminimizi üretmek zorunda kalıyoruz. İki kaynak da varsa kötü olanı alıyoruz — iyimser tarafı seçmek daha güzel görünürdü ama kullanıcıyı yanıltırdı.
Yani iPhone'da rozet ±3° gösteriyorsa bu cihazın kendi beyanıdır ve güvenilirdir. ±20° gösteriyorsa cihaz size "şu anda bilmiyorum" diyor; kalibrasyon veya ortam değişikliği gerekiyor.
Kontrol listesi
iPhone'da kıble ararken sırayla şunları yapın. Kılıfı çıkarın — özellikle MagSafe veya manyetik tutucu varsa. Metal masadan, dizüstü bilgisayardan ve hoparlörden bir kol boyu uzaklaşın. Sensör iznini verin ve doğruluk rozetine bakın. Rozet ±15°'nin üstündeyse kalibrasyon rehberini koşturun. Sonuç hâlâ tutarsızsa farklı bir odada tekrar deneyin.
Bunlar çözmezse yöntemi değiştirmek doğru karar. Güneş yöntemi manyetik alanla hiç ilgilenmez; gökmekanik hesabıyla çalışır ve hiçbir mıknatıstan etkilenmez. Harita üzerinden duvar hizalama ise cihazın yönünü hiç ölçmez. İkisi de kalibrasyonu bozulmuş bir manyetometreden daha güvenilir sonuç verir.
Son bir teşhis ipucu: aynı konumda güneş yöntemiyle ölçüm yapıp pusula sonucuyla karşılaştırın. İki değer uyuşuyorsa pusulanız iyi durumda; ayrışıyorsa fark size hatanın büyüklüğünü doğrudan söyler.