2017-04-25 21 views
1

私は位置ベースのプロジェクトをしようとしています。通知を受け取ったら、私は「はい」ボタンを押して、アプリケーションの場所のページに移動します。このプロセスを行うには、通知のタイトルを取得する必要がありますが、私はCore Locationのdidenterregionメソッドで通知を作成しています。通知アクションのためには、私はdidreceiveresponseメソッドを使うべきです。 didreceiveresponseメソッドのためにdidenterregionからの通知のタイトルをどのように取ることができますか?地域識別子を別のメソッドから取得していますか?

は、ここに私のコード

UNUserNotificationCenter.current().requestAuthorization(
      options: [.alert,.sound,.badge], 
      completionHandler: { (didAllow,error) in 


     } 
     ) 

     let answerYes = UNNotificationAction(identifier: "answerYes", title: "Evet", options: UNNotificationActionOptions.foreground) 
     let answerCancel = UNNotificationAction(identifier: "answerCancel", title: "İptal", options: UNNotificationActionOptions.foreground) 

     let category = UNNotificationCategory(identifier: "myCategory", actions: [answerYes,answerCancel], intentIdentifiers: [], options: []) 
     UNUserNotificationCenter.current().setNotificationCategories([category]) 
    let topkapiLatitude: CLLocationDegrees = 41.013 
     let topkapiLongitude: CLLocationDegrees = 28.984 
     let topkapiCenter: CLLocationCoordinate2D = CLLocationCoordinate2DMake(topkapiLatitude, topkapiLongitude) 
     let topkapiRadius: CLLocationDistance = CLLocationDistance(100.0) 
     let topkapiIdentifier: String = "Topkapı Sarayı" 

     let topkapiRegion = CLCircularRegion(center: topkapiCenter, radius: topkapiRadius, identifier: topkapiIdentifier) 

     let yrbtnLatitude: CLLocationDegrees = 41.0081 
     let yrbtnLongitude: CLLocationDegrees = 28.9778 
     let yrbtnCenter: CLLocationCoordinate2D = CLLocationCoordinate2DMake(yrbtnLatitude, yrbtnLongitude) 
     let yrbtnRadius: CLLocationDistance = CLLocationDistance(100.0) 
     let yrbtnIdentifier: String = "Yerebatan Sarnıcı" 

     let yrbtnRegion = CLCircularRegion(center: yrbtnCenter, radius: yrbtnRadius, identifier: yrbtnIdentifier) 

     locationManager.distanceFilter = 10 
     locationManager.desiredAccuracy = kCLLocationAccuracyBest 
     topkapiRegion.notifyOnEntry = true 
     yrbtnRegion.notifyOnEntry = true 

     locationManager.delegate=self 
     UNUserNotificationCenter.current().delegate = self 
     locationManager.requestAlwaysAuthorization() 
     locationManager.startMonitoring(for: topkapiRegion) 
     locationManager.startMonitoring(for: yrbtnRegion) 
     locationManager.startUpdatingLocation() 

     return true 
    } 


    func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping() -> Void) { 
     if response.actionIdentifier == "answerYes" { 

    } 
     else { 

     } 
    } 

    func locationManager(_ manager: CLLocationManager, didEnterRegion region: CLRegion) { 

     let content = UNMutableNotificationContent() 
     content.title = region.identifier 
     content.subtitle = "You are at \(region.identifier) now" 
     content.body = "Do you want to learn history of this place?" 
     content.badge = 1 
     content.categoryIdentifier = "myCategory" 


     let trigger = UNTimeIntervalNotificationTrigger(timeInterval: 2, repeats: false) 
     let request = UNNotificationRequest(identifier: "timerDone", content: content, trigger: trigger) 
     UNUserNotificationCenter.current().add(request, withCompletionHandler: nil) 








    } 
+0

1.で取得nototificationresponse)* property *これを使用して 'title'を抽出することができます2.わかりませんが、あなた自身が難しいと思っています...あなたは単純に良い場所にUNLocationNotificationTriggerを使ってLocationBased Notificationを作成することができます例は[here](https://code.tutsplus.com/tutorials/an-introduction-to-the-usernotifications-framework--cms-27250)を参照してください。 – Honey

+0

これを行う前に試したことがありますが、通知を受け取ることができません。しかし、この例で私はもう一度お世話になります:) –

答えて

0

であることができますUNMutableNotificationContentののUserInfoプロパティを通じてカスタムオブジェクト。

content.userInfo = ["yourkey": "Your object"] as [String : Any] // set in region method 

と `response`は[` notification`](https://developer.apple.com/reference/usernotifications/を持っている私の知る限り** didReceive **

print(response.notification.request.content.userInfo) // this is your data 
+0

私は感謝に達しました:) –

+0

クールは働いていますか? – KKRocks

+0

はい地域名で印刷できます。しかし、プリントは少し異なります。例[AnyHashable( "region"):DolmabahçeSarayı]。しかし、私はifループを作成したいと私は言う(response.notification.request.content.userInfo == "DolmabahçeSarayı")それは動作しますか? –

関連する問題