Hoşgeldin. Soru sormak veya cevaplamak için hemen üye ol.
0 oy
2.2k kez görüntülendi
genel kategorisinde tarafından

swift 3 de device token oluşturup bunu bi değişekene nasıl atayabiliriz ?

1 cevap

+1 oy
tarafından
tarafından seçilmiş
 
En İyi Cevap

Selam slymntrm,

Bildiğim kadarıyla yardımcı olmaya çalışacağım :)

Appdelegte class ı içinde, aşağıdaki methodu tanımlayıp device token i alabilirsin, daha sonra bu aldığın tokeni ihtiyacına göre kullanabilirsin, ben genelde user default içinde saklıyorum. Sorunu tam olarak yanıtlayamıyorsam, ne şekilde kullanmak istediğini biraz daha açmanı rica edeceğim. O zaman daha fazla yardımcı olabilirim.

func application( _ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data ) {

    let deviceTokenString = deviceToken.reduce("", {$0 + String(format: "%02X", $1)})
   print(deviceTokenString)

}
tarafından

bu swifte yeni girişmeye başladım :) neyi nereye yazıp nereden çağırılıyor hiç anlamadım bu device tokını alıp webviewle kendi web sayfama gönderip orada işlemler yapacam ben yukarıdaki kodu Appdelegte.swift dosyasına yapıştırayımmı ? daha sonra bu fonskiyonu nasıl çağırmalıyım

tarafından

Selam :)

Şimdi şöyle, ilk önce device tokeni neden kendine göndermeye çalıştığını anlayalım. Biraz açar mısın, bildirim göndermek için mi buna ihtiyaç duyuyorsun yoksa başka bir amacın mı var.

tarafından

bi platform hazıladım orada normalde tarayıcıdan girilip kullanıcı bilgileriyle giriş yapılabiliyor şimdi bende uygulamayı hazırlayıp kullanıcı bir kere giriş yaptığında veritabanında bunun kaydını tutayım ve tekrar tekrar giriş yapmasın yani device tokenden kastım o telefona özel bi numarada olsada olur

tarafından

Evet bunu yapabilirsin, fakat burda şöyle ufak gibi gözüken ama çokta ufak olmayan bir sorun var.

Device token uygulamanın o cihaza o an ki kurulumuna özeldir. Yani kullanıcı uygulamayı kaldırıp sonra yüklerse, yeni gelen kullanıcıyı tanıyamayacak, kaybetmiş olacaksınız. Bir sefer oluşturulan ve hiç değişmeyen bir bilgi yok.

Bunun çözümü için birkaç yol var.

1 - Görmezden gelmek, bu kaybı kabul edersiniz.

2- Kullanıcıya giriş yapması için bir acount oluşturmasını istersiniz. Tanıyamadığınızda bundan giriş yapar.

3 - Bir device yoken oluşturur, bunu hashler ve telefonun sertifika merkezine bunu bir imza olarak kayıt edersiniz. Bu durumda oluşturulmuş bu veri telefondan sertifaka özel olarak silinene yada telefon sıfırlanan kadar orda durabilir. Bu numarayla kullanıcınızı tanıyabilirsiniz. Uygulama açıldığında bunu numarayı kontrol edebilirsiniz.

Telefonun sertifka merkezine bir bilgi bırakmak için, KeyChahinSwift kütüphanesini kullanmanızı öneririm.
Nasıl Device Token oluşturacağınıza tekrar gelirsek.

Size verdiğim methodu appdelegete classı içine yapıştırın. Print ile device tokeni alıp yazdırdığından emin olmuş olun.
Daha sonra web sitenizin olduğu tarafta bu bilgiyi yakalayıp çalıştırmak için bir web servise ihtiyacınız var.
Yani uygulamadan bir adrese istek yapıp get yada post ile veriler yollayıp bunu veritabanına kayıt edebiliyor olmalısınız.
Böyle bir servis oluşturduktan sonra, bu işlemi gerçekleştirmek için önereceğim Alamifore Http Request kütüphanesini projenize dahil etmenizi öneririm.

Artık tüm ortamlar hazır olduğunda Alamifore ile bir Http isteği ile device tokeni servisiniz yarıdmıyla veritabanına kayıt edin.
Kayıt işlemi başarılıysa uygulama her açıldığında, yine servisinize istek yapıp, veritabanında ilgili device tokenin kayıt olup olmadığını kontrol edip. Giriş işlemini onaylayabilirsiniz.

Maalesef ki daha basit bir yolunu bilmiyorum. Biraz detayı olan bir iş. Umarım yardımcı olur.

tarafından

çok güzel ve açıkalayıcı bir anlatım için öncelikle teşekkürler :)

kullanıcının uygulamayı silip tekrar yükleme ihtimalini düşündüm ve kullanıcı bu uygulamayı başka bir telefona indirip oradan giriş yapma ihtimalinide düşündüm bunlara göre bir alt yapı hazırladım şimdi benim yapmam gereken tek şey şudur

let url = URL(string:"http://websitem.com?device="(devicetoken)")

bunun için devicetoken değişkenin içine sizin oluşturduğunuz o fonskiyonu nasıl çağırırım :)

tarafından

Bir çok yolu olabilir.

Ama temel olarak, o fonksiyonu bir yerde çağıramazsınız. Fonksiynun içinde işlem yapabilir, bir fonksiyonu çağırabilir yada orada aşağıdaki kod ile device token i Defaultsa kaydedip daha sonra başka bir yerde ona ulaşıp istek yaparsınız.

let USDF = UserDefaults.standard
USDF.setValue("\(tokenDegiskeni)", forKey: "deviceToken")

Geri çağırıp kulacağın zamanda, aşağıdaki kodu kullanabilirsin.

let USDF = UserDefaults.standard
if let token = USDF.string(forKey: "deviceToken"){
    //burada işlemlerini yap tokeni yazdır
}

Detaylı bilgi, UserDefaults kullanımı
http://stackoverflow.com/questions/31203241/how-to-use-nsuserdefaults-in-swift

tarafından
tarafından düzenlendi

:D ben baktım ama hala yapamadım ama olacak gibi şimdi log ekranına kendi device tokınımı nasıl yazdırabilirim sizin verdiğiniz bu kodlarla

tarafından

print yada nslog fonksiyonlarını kullanabilirsiniz.

tarafından

AppDelegate.swift dosyasının altına
class AppDelegate: UIResponder, UIApplicationDelegate {

clasının içine yukarıdaki fonskiyonu yapıştırdım
daha sonra Main.storyboard 'un kod kısmına
override func viewDidLoad() {
buraya da
let USDF = UserDefaults.standard
if let token = USDF.string(forKey: "deviceToken"){
//burada işlemlerini yap tokeni yazdır
}

bu kodumu yazmam gerekiyor :)

tarafından

Başlamasını istediğiniz herhangi bir viewDidLoad içinde tokeninize ulaşabilirsiniz. Yaptığınız uygulamya göre değişir.

Yalnız ufak bir hatılatma, simulator de device tokeninize ulaşamayacağınızı unutmayın gerçek cihaz ile bu işlemi test ediyor olmalısınız.

tarafından

vermiş olduğunuz bilgilerden dolayı çok teşekkür ederim çok açıklayıcı net ifadelerle anlatmışsınız ama ben daha yeni olduğum için yapamadım bir türlü log ekranına birşey yazdıramadım fonskiyonu çağıramadım yani print yapıyorum yazmıyor :)

tarafından

Rica ederim, tokeni alamıyor olabilirsiniz. Yada o block hiç çalışmıyor olabilir.
Biraz daha uğraşla çözeceğinize eminim. Size önerim temeldeki eksiklerinizi tamamlayıp daha donanımlı şekilde bu sorunları çözmeye çalışmanız.

Bir hafta gibi kısa bir sürede iyi bir seviyeye gelebilirsiniz. Diğer türlü hep basit sorunları yorumlarken problem yaşamanız kaçınılmaz olacaktır.

İyi çalışmalar.

tarafından

https://ibb.co/hghMy5

Doğrumu Acaba

tarafından

similatörden devicetokenı yazdrımak istediğimizde hiçmi birşey yazmaz yoksa hata felan verirmi ?

tarafından

Hataya sebep olacak birşey yapmıyorsan, hata vermez. Ama tokenin geleceği blokta appdelegete içinde çalışmazdı diye hatırlıyorum.

tarafından

apns teslerini simulator üzerinde yapma. Simulator'de deviceToken oluşturulmaz. Sadece cihazlar üzerinde deviceToken alabilirsin.

tarafından

Evet bilmiyordum bunu ve o yüzden olmuyor sandım , telefonumdan deneyeceğim teşekkürler..

...