You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

iOS可购买Widget购买后占位符未更新,如何重新加载?

解决iOS Widget占位符在购买后不更新的问题
  • 核心原因:WidgetCenter.shared.reloadAllTimelines()仅刷新已添加到主屏幕的Widget时间线,不影响占位符。占位符由Widget配置的placeholder方法生成,仅在系统需要展示时(如用户进入添加Widget界面)才会调用该方法生成视图。

  • 解决方案步骤:

    1. 配置App Group共享购买状态
      主App和Widget Extension需通过App Group跨进程共享购买状态:

      • 在Xcode中为主App和Extension开启App Group权限,添加相同的Group ID(如com.yourcompany.yourapp.group)。
      • 使用带suiteName的UserDefaults存储购买状态,购买完成后主App更新该状态:
        // 主App内购买完成后执行
        let sharedDefaults = UserDefaults(suiteName: "com.yourcompany.yourapp.group")!
        sharedDefaults.set(true, forKey: "isWidgetPurchased")
        sharedDefaults.synchronize()
        
    2. 动态生成占位符视图
      在Widget的配置代码中,修改placeholder方法,读取共享的购买状态并返回对应视图:

      struct YourWidget: Widget {
          let kind: String = "YourWidget"
      
          var body: some WidgetConfiguration {
              StaticConfiguration(kind: kind, provider: Provider()) { entry in
                  YourWidgetEntryView(entry: entry)
              }
              .configurationDisplayName("你的Widget名称")
              .descriptionWidget描述")
              .placeholder {
                  let sharedDefaults = UserDefaults(suiteName: "com.yourcompany.yourapp.group")!
                  let isPurchased = sharedDefaults.bool(forKey: "isWidgetPurchased")
                  
                  if isPurchased {
                      YourWidgetEntryView(entry: SampleEntry(date: Date(), isPurchased: true))
                          .opacity(1.0)
                  } else {
                      YourWidgetEntryView(entry: SampleEntry(date: Date(), isPurchased: false))
                          .opacity(0.5)
                          .overlay(Image(systemName: "lock"))
                  }
              }
          }
      }
      
    3. 刷新已添加的Widget
      购买完成后,除更新共享状态,仍需调用以下代码刷新主屏幕上已添加的Widget:

      WidgetCenter.shared.reloadAllTimelines()
      
  • 注意事项:

    • 如果用户在购买时已打开添加Widget的界面,当前展示的占位符不会自动刷新,需退出界面重新进入才能看到更新(系统仅在进入界面时重新生成占位符)。
    • 确保App Group配置正确,主App和Extension的Bundle ID、Group ID完全匹配,避免权限问题导致共享状态读取失败。

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 08:12:42