2017-05-08 1 views
3

나는 iOS 용 날씨 앱이 있습니다. 사용자가 선택한 시간에 매일 아침 알림을 받도록 허용하고 싶습니다. 알림을 표시합니다.Swift : 동적 콘텐츠로 지역 알림을 예약하는 방법

푸시 알림을 사용하지 않는 것이 좋습니다. 서버에서 표시 할 콘텐츠를 가져 오는 방법을 볼 수 없다는 것을 제외하고는 로컬 알림을 사용할 수 있다고 생각했습니다. 예약 할 때 콘텐츠를 설정해야하는 것 같습니다. 그게 맞습니까?

내 애플리케이션을 등록하여 백그라운드 실행을 사용하여 주기적으로 날씨를 가져오고 최신 내용으로 알림을 예약 할 수 있다고 생각하지만, 이는 낭비적인 것처럼 보입니다.

간단히 말해서, 특정 시간에 특정 기능을 실행하도록 iOS에 요청하고 싶습니다. 거기에 내가 누락 된 좋은 옵션이 있습니까? 푸시 알림 만이 이런 종류의 작업을 수행하는 유일한 방법입니까?

+0

당신은 귀하의 콘텐츠와 지역 알림을 예약 할 수 있습니다. – KKRocks

+0

@KKRocks 아마도 내 질문에 대해 충분히 명확하지 않았습니다. 내가보기에 문제는 알림을 표시 할 때 현지 알림에 표시 할 콘텐츠를 가져오고 싶습니다.따라서 필자의 경우 사용자가 오전 7시에 알림을 예약 할 수 있으며 그 때 알림 내용을 가져오고 싶습니다. –

+1

그렇다면 날씨 예보를 표시하려면 푸시 알림이 가장 좋습니다. – KKRocks

답변

1

특정 시간에 로컬 알림을 예약 할 수 있으며 사용자가 정보를 볼 때 원하는 알림을 탭하여 앱을 열 수 있습니다. 그때 사용자는 알림을 탭하여 앱이 열려 있다는 것을 알 수 있습니다. 네트워크 호출을 통해 데이터를 가져 와서 애플리케이션 내부에 표시 할 수 있습니다. 이렇게하면 백그라운드 호출이 필요 없으며 사용자가 작업에 네트워크 호출 만합니다.

다른 옵션 : 날씨 위젯과 같은 앱의 위젯을 만들 수 있습니다. 사용자가 위젯 영역에 들어갈 때마다 위임 호출을 받고 최신 기상 데이터를 얻기 위해 네트워크 호출을합니다. 사용자가 더 많은 정보를 원하면 간단히 탭하면 앱이 열립니다. 그러면 모든 것이 당신 손에 달려 있습니다.

옵션 : 사용자가 특정 날짜에 앱을 열고 알림을 설정할 때마다 항상 동적 콘텐츠를 얻을 수 있습니다. 그러나 사용자가 업데이트 된 데이터를받지 못할 수도 있으므로 이는 권장 할만한 것이 아닙니다.

푸시 알림 : 서버를 통해 동적 데이터를 앱으로 보내려는 경우 사례가 필요하지 않을 수도 있습니다. 항상 최선의 선택입니다.

1

나 함수를 만들었다. 원하는 때에 특정 시간에 기능을 호출 할 수 있습니다. 시계 응용 프로그램을 만들어서 사용자가 알람을 만들었을 때 로컬 알림을 트리거해야합니다. 알림 센터 위임 방법에서는 응답을 처리하고 원하는 모든 방법을 호출 할 수 있습니다.

class LocalNotificationMethod : NSObject { 

static let notificationInstance = LocalNotificationMethod() 

let requestIdentifier = "SampleRequest" //identifier is to cancel the notification request 

internal func scheduleLocalNotification(titleOfNotification:String, subtitleOfNotification:String, messageOfNotification:String, soundOfNotification:String, dateOfNotification:String) { 

    if #available(iOS 10.0, *) { 

     let formatter = DateFormatter() 
     formatter.dateFormat = "yyyy-MM-dd hh:mm a" 
     let date3 = formatter.date(from: dateOfNotification) 

     let content = UNMutableNotificationContent() 
     content.body = NSString.localizedUserNotificationString(forKey: titleOfNotification, arguments: nil) 
     content.sound = soundOfNotification.characters.count > 0 ? UNNotificationSound.init(named: soundOfNotification + ".mp3") : UNNotificationSound.default() 

     let trigger = UNCalendarNotificationTrigger.init(dateMatching: NSCalendar.current.dateComponents([.day, .month, .year, .hour, .minute], from: date3!), repeats: false) 

     let request = UNNotificationRequest(identifier:requestIdentifier, content: content, trigger: trigger) 

     UNUserNotificationCenter.current().add(request){(error) in 

      if (error != nil){ 

       print(error?.localizedDescription) 
      } else { 
       print("Successfully Done") 
      } 
     } 
    } else { 
     // Fallback on earlier versions 
    } 

} 
} 

그리고 AppDelegate에 방법에

은 : - 당신은 당신의 통지 또는 때마다 알림이 작업을 완료하려면 무엇을 할 present.Is됩니다에 때마다 사용자가 클릭을 처리 할 수 ​​있습니다.

// MARK : - 알림 대표

@available(iOS 10.0, *) 
func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping() -> Void) { 

    print("Tapped in notification") 
} 

//This is key callback to present notification while the app is in foreground 
@available(iOS 10.0, *) 
func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) { 


    print("Notification being triggered") 
    //You can either present alert ,sound or increase badge while the app is in foreground too with ios 10 
    //to distinguish between notifications 
    if notification.request.identifier == "SampleRequest" { 

     completionHandler([.alert,.sound,.badge]) 

    } 
} 
+0

고마워,하지만이게 내가 필요한 것을 어떻게하는지 보지 못했다. 내가 원하는 것은 (a) 매일 오전 7시에 알림을 보내도록 예약하고, (b) 오전 7시에 내 서버에서 알림 텍스트를 가져올 수 있도록하는 것입니다. 'willPresent' 함수에서 서버로부터 json 등을 가져올 수 있습니까? –

관련 문제