您如何根据用户输入发送通知?迅速

Posted

技术标签:

【中文标题】您如何根据用户输入发送通知?迅速【英文标题】:How do you send notifications based on user input? SWIFT 【发布时间】:2020-09-24 08:02:56 【问题描述】:

    如何设置通知时间以匹配用户的输入?

    如果通知提醒用户有新内容(即当日词汇),这会被视为本地通知还是推送通知?

userSelectedTime 变量是在他们按下完成时创建的,但我不知道如何将它传递给我的 sendNotification 函数,该函数使用 DateComponents() 来设置时间。

@objc func donePressed() 
        // formatter
        let formatter = DateFormatter()
        formatter.dateStyle = .none
        formatter.timeStyle = .short
                
        var userSelectedTime = timeTextField.text
        userSelectedTime = formatter.string(from: timePicker.date)
        print(userSelectedTime)
        self.view.endEditing(true)
    

func sendNotification() 
    
    // Default time 10:30, but base it on userSelectedTime if not void
    var dateComponents = DateComponents()
        dateComponents.hour = 10
        dateComponents.minute = 30
    
    let trigger = UNCalendarNotificationTrigger(dateMatching: dateComponents, repeats: true)

    let request = UNNotificationRequest(identifier: UUID().uuidString, content: createNotificationContent(for: myData), trigger: trigger)
    
        center.add(request)
        

【问题讨论】:

【参考方案1】:

首先,我将回答您的问题 2。- 这主要取决于该信息的来源。如果“每日词汇”是您在应用程序内部存储的内容,您可以使用该信息安排本地通知。但是,如果您想每天在外部更改当天的单词,则必须创建推送通知来实现此目的。 (至少是使它正常工作的唯一方法)。推送通知需要某种服务才能将它们推送到应用程序,因此对您来说最简单的方法是使用本地通知。

总结问题2:

本地通知:在应用程序中创建的东西。 推送通知:信息从外部来源“推送”。

问题 1:

您可以通过多种方式做到这一点。通过查看您已经拥有的内容,我建议您使用所选时间创建日期组件并将这些组件传递给您的“sendNotification()”函数。

举个例子:

// Capture the time and turn them into components
func donePressed() 
    let calendar = Calendar.current
    let components = calendar.dateComponents([.hour, .minute, .month, .year, .day], from: timePicker.date)
    sendNotification(components: components)


// Schedule the notificaiton based on components
func sendNotification(components: DateComponents) 
    let trigger = UNCalendarNotificationTrigger(dateMatching: components, repeats: true)
    let request = UNNotificationRequest(identifier: UUID().uuidString, content: createNotificationContent(for: myData), trigger: trigger)
    center.add(request)

现在...我看不到你所有的代码,所以我假设你所做的其他工作正常。但我希望你明白这个概念。但是,我建议创建一个单独的类,例如“NotificationScheduler”来处理这些事情,这样您就可以将事情分开更多。

【讨论】:

谢谢比约恩!关于问题 2:我的练习应用程序“每日词汇”的文件都在 Xcode 项目中,并且应该每 24 小时触发一次(但我仍然不确定我将如何实现它)。我想这需要本地通知,但我希望用户在不依赖于他们是否打开应用程序的情况下被提醒新数据可用(即当天的新词),但这会使其成为推送通知? 如果您在应用程序中拥有所有“每日词汇”,例如 JSON 文件或简单的巨型数组,并且您希望每天在特定时间推送它们。您需要做的是用户第一次打开应用程序并安排这些通知(就像我希望他们每天 08:00 一样),您可以安排接下来 365 天以上的所有通知。因此,您只需创建一个循环,在每天 08:00 创建一个带有报价的非重复通知。否则,是的,您需要使用推送通知:) 再次感谢比约恩!问题 1 现在一切正常,因为我可以将通知时间设置为 userSelectedTime。再次感谢!

以上是关于您如何根据用户输入发送通知?迅速的主要内容,如果未能解决你的问题,请参考以下文章

从已关闭的应用程序发送有关新 JSON 数据的本地通知? |迅速

如何在 iOS 中使用 Firebase 发送通知

如何不向不想接收推送的用户发送FCM?

如何根据ios中的api响应时间向用户发送通知

如何在 iPhone 上指定推送通知的用户?

如何从设备本身发送 Firebase 推送通知? [复制]