2017-10-28 11 views
1

내 응용 프로그램에는 공개 CloudKit 데이터베이스가 있습니다. 원격 구독에 사용하고 있습니다.원격 알림의 alertBody에서 CKRecord의 데이터를 표시하는 방법은 무엇입니까?

내가 CloudKit 대시 보드에 GlobalNotification 기록을 만들었습니다

,이 레코드의 유형 Stringcontent 필드를 생성 및 알림 작동하도록 내 AppDelegate에에 다음과 같은 방법을 구현 :

func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) { 
     let subscription = CKQuerySubscription(recordType: "GlobalNotification", predicate: NSPredicate(format: "TRUEPREDICATE"), options: .firesOnRecordCreation) 

     let info = CKNotificationInfo() 
     info.alertBody = "Some Text" // here i want to show content String data of a CKRecord which fired a notification 
     info.shouldBadge = true 
     info.soundName = "default" 


     subscription.notificationInfo = info 

     CKContainer.default().publicCloudDatabase.save(subscription, completionHandler: { subscription, error in 
      if error == nil { 
       // Subscription saved successfully 
      } else { 
       // An error occurred 
      } 
     }) 
    } 

을 내가 만들고 그 후 새 GlobalNotification 레코드를 cloudKit 대시 보드에 추가하고 CloudKit 대시 보드의이 레코드에 대해 content 필드에 "CloudKit content Text"를 추가하십시오. 장치에서 알림이 실행되면 alertBody에 "Some text"텍스트가 표시되지만 "CloudKit content Text"가 표시됩니다.

이 알림에서 GlobalNotification 레코드의 content 필드에서 가져온 문자열을 표시하고자합니다. 이를 달성하기 위해 코드를 어떻게 변경해야합니까?

desiredKeys에 대해 읽었으며 info.desiredKeys = [ "content"]를 추가하려고했지만 도움이되지 않았습니다. 나는 또한 봤지만 해결책을 찾지 못했습니다.

답변

1

알림 본문만으로는 할 수 없습니다.

이 작업을 수행하려면 세 가지 구성 요소가 필요합니다. 바꾸기 가능한 매개 변수를 포함하여 메시지로 문자열을 정의해야합니다. 그런 다음 해당 문자열을 사용하도록 알림을 보내야합니다. 마지막으로 문자열로 대체 할 레코드 필드를 알려줍니다.

먼저 localizable.strings 파일에 키/문자열 쌍을 추가해야합니다. 문자열에서 % n $ @을 사용하여 매개 변수를 대체 할 위치를 지정합니다. 여기에서 "n"은 각 추가 매개 변수에 대해 증가합니다.

두 번째로 알림에 .alertLocalizationKey를 위의 strings 파일에서 지정한 키 이름으로 설정해야합니다.

세 번째로, 알림에서 .alertLocalizaionArgs 속성을 레코드의 필드 이름 배열로 설정합니다.

이 애플의 페이지가 교체 가능한 매개 변수 문자열을 구성하는 방법에 대한 예를 제공합니다 https://developer.apple.com/documentation/cloudkit/cknotificationinfo/1515182-alertlocalizationargs

이 질문은 몇 가지 예제 코드를 보여줍니다. (샘플 1은 더 이상 작동하지 않는 샘플 2에 따라)를 CloudKit notifications