Firebase SwiftUI再次请求推送通知权限
因此,我在我的应用程序中实现了推送通知,当应用程序首次启动时,它会询问用户是否希望允许推送通知(此实现工作正常) 如果该用户不允许推送通知,是否可以在应用程序中有一个按钮,允许用户单击并再次请求允许权限 这就是我试图实现的目标: 设置视图Firebase SwiftUI再次请求推送通知权限,firebase,push-notification,swiftui,Firebase,Push Notification,Swiftui,因此,我在我的应用程序中实现了推送通知,当应用程序首次启动时,它会询问用户是否希望允许推送通知(此实现工作正常) 如果该用户不允许推送通知,是否可以在应用程序中有一个按钮,允许用户单击并再次请求允许权限 这就是我试图实现的目标: 设置视图 //IF PUSH NOTIFICATIONS NOT ENABLED, SHOW THIS SECTION Section (header: Text("Push Notifications")) {
//IF PUSH NOTIFICATIONS NOT ENABLED, SHOW THIS SECTION
Section (header: Text("Push Notifications")) {
HStack {
Image(systemName: "folder")
.resizable()
.frame(width: 20, height: 20)
VStack(alignment: .leading) {
Text("Enable Push Notifications").font(.callout).fontWeight(.medium)
}
Spacer()
Button(action: {
checkPushNotifications()
}) {
Text("View").font(.system(size:12))
}
}
}
在我的推送通知功能中:
class PushNotificationService: NSObject, MessagingDelegate {
static let shared = PushNotificationService()
private let SERVER_KEY = "myserverkey"
private let NOTIFICATION_URL = URL(string: "https://fcm.googleapis.com/fcm/send")!
private let PROJECT_ID = "my project name"
private override init() {
super.init()
Messaging.messaging().delegate = self
}
func askForPermission() {
UNUserNotificationCenter.current().requestAuthorization(options: [.alert, .sound, .badge]) { (granted: Bool, error: Error?) in
if granted {
self.refreshFCMToken()
} else {
// Maybe tell the user to go to settings later and re-enable push notifications
}
}
}
func refreshFCMToken() {
InstanceID.instanceID().instanceID { (result, error) in
if let error = error {
print("Error fetching remote instance ID: \(error)")
} else if let result = result {
print("Remote instance ID token: \(result.token)")
self.updateFCMToken(result.token)
}
}
}
func updateFCMToken(_ token: String) {
guard let currentUser = Auth.auth().currentUser else { return }
let firestoreUserDocumentReference = Firestore.firestore().collection("users").document(currentUser.uid)
firestoreUserDocumentReference.updateData([
"fcmToken" : token
])
}
}
我试图实现的是,如果用户
没有启用通知,那么请询问他们在设置视图中重新启用通知的选项。简短的回答是否,如果用户曾经禁用了应用程序的推送通知,则不能再次询问用户。
您可以做的是将用户导航到其手机中的设置,以便再次允许推送通知
SwiftUI中按钮的代码段如下:
Button(action: {
guard let url = URL(string: UIApplication.openSettingsURLString) else { return }
UIApplication.shared.open(url, options: [:], completionHandler: nil)
}, label: {
Text("Allow Push")
})
我还想问这个问题:简短的回答是否定的,如果用户曾经禁用了应用程序的推送通知,你就不能再问他了。
您可以做的是将用户导航到其手机中的设置,以便再次允许推送通知
SwiftUI中按钮的代码段如下:
Button(action: {
guard let url = URL(string: UIApplication.openSettingsURLString) else { return }
UIApplication.shared.open(url, options: [:], completionHandler: nil)
}, label: {
Text("Allow Push")
})
我还要提到这个问题:不,你不能。然而,一个好的UI/UX设计在浪费一次性请求权限的机会之前会非常小心。相反,使用用户友好的UI解释为什么需要某些权限。例如,我经常发现实现权限显示视图并在单独的视图模型中处理各种异步权限请求令人沮丧。因此,我最近制作了一个SwiftUI软件包:
权限Swiftui是一个漂亮地显示和处理权限的软件包
EmptyView()
.JMPermissions(showmodel:$showmodel,for:[.locationAlways、.photo、.microscopy])
对于一行代码,您将获得一个漂亮的UI和权限对话框。
它已经支持12个iOS系统权限中的7个。更多功能即将推出不,您不能。然而,一个好的UI/UX设计在浪费一次性请求权限的机会之前会非常小心。相反,使用用户友好的UI解释为什么需要某些权限。例如,我经常发现实现权限显示视图并在单独的视图模型中处理各种异步权限请求令人沮丧。因此,我最近制作了一个SwiftUI软件包:
权限Swiftui是一个漂亮地显示和处理权限的软件包
EmptyView()
.JMPermissions(showmodel:$showmodel,for:[.locationAlways、.photo、.microscopy])
对于一行代码,您将获得一个漂亮的UI和权限对话框。
它已经支持12个iOS系统权限中的7个。更多功能即将推出