You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何自定义iOS通知权限请求弹窗的提示文案?

自定义iOS通知权限请求文案的实现方案

嘿,这个问题我之前帮不少开发者捋清楚过,刚好能给你靠谱的方案!首先得明确一个关键点:苹果并没有开放直接修改系统默认通知权限弹窗文案的配置项(不像位置权限那样能在Info.plist里设置),系统自带的那个弹窗文案是固定的,没法通过官方配置或API改动。不过我们可以用「前置自定义说明弹窗」的方式,既让用户看到你想要的本地语言文案,又符合苹果的审核规范,具体步骤如下:

1. 先弹出自定义权限说明弹窗

在调用系统的通知权限请求前,先自己做一个UIAlertController,用本地语言把你想传达的权限用途说清楚,比如:

import UIKit
import UserNotifications

// 示例:在ViewController中实现
func showCustomPermissionAlert() {
    let alert = UIAlertController(
        title: "需要通知权限",
        message: "我们会通过通知提醒您订单状态更新、专属活动通知等重要信息,开启后您还能在设置里调整通知的样式哦",
        preferredStyle: .alert
    )
    
    // 同意按钮:点击后触发系统权限请求
    let allowAction = UIAlertAction(title: "同意开启", style: .default) { _ in
        self.requestSystemNotificationPermission()
    }
    // 取消按钮
    let cancelAction = UIAlertAction(title: "暂不需要", style: .cancel)
    
    alert.addAction(allowAction)
    alert.addAction(cancelAction)
    present(alert, animated: true)
}

2. 用户同意后调用系统权限请求

等用户点击自定义弹窗里的「同意」按钮,再调用官方的通知权限请求API:

func requestSystemNotificationPermission() {
    let notificationCenter = UNUserNotificationCenter.current()
    // 请求需要的通知权限类型
    notificationCenter.requestAuthorization(options: [.alert, .sound, .badge]) { granted, error in
        DispatchQueue.main.async {
            if let error = error {
                print("权限请求出错:\(error.localizedDescription)")
                return
            }
            if granted {
                // 权限已授予,注册远程推送(如果需要)
                UIApplication.shared.registerForRemoteNotifications()
                print("通知权限已开启")
            } else {
                print("用户拒绝了通知权限")
            }
        }
    }
}

额外小贴士

  • 要是需要适配多语言,把自定义弹窗的文案放到Localizable.strings文件里就行,iOS会自动根据系统语言切换对应的文案;
  • 这种方式的优势是:用户先理解了权限的用途,再看到系统的默认弹窗,接受度更高,同时也完全符合苹果的App Store审核规则。

内容的提问来源于stack exchange,提问作者Agung

火山引擎 最新活动