在 iOS 中重新加载内容拦截器
Reloading Content Blockers in iOS
我听说 iOS 支持内容拦截器,并且所有拦截都是由 App Bundle 中名为 blockerList.json
的文件完成的。虽然我知道 SFContentBlockerManager.reloadContentBlockerWithIdentifier()
会重新加载 blockerList.json
中的数据。但是,我认为这没有任何用处; blockerList.json
是主包的一部分,无法修改。因此,有什么方法可以修改 blockerList.json
(或者扩展名可以指向另一个文件,删除并重新创建,不使用 JSON,等等)?
您不必使用捆绑包中的 blockerList.json
作为 JSON 来源。您可以执行多种不同的操作来动态更改内容拦截器。
- 您可以让扩展程序从服务器下载新的 JSON 文件,并在应用程序触发时更新拦截器
- 将应用程序和内容拦截器扩展程序放在同一个应用程序组中,以便可以在两者之间传递数据,然后执行以下操作之一:
- 让应用 create/modify 在共享组目录中有一个 JSON 文件,该文件将由扩展程序读取
- 让应用程序将数据写入共享组用户默认值,然后让扩展程序创建一个 JSON 文件供其加载
是的,我已经通过从主捆绑 json 文件中读取所有阻止规则并在 App Group 标识符容器中创建了一个 json 文件(即 SharedJsonFile.json)来完成此操作。然后我把所有规则写到SharedJsonFile.json.
[[NSFileManager defaultManager]
containerURLForSecurityApplicationGroupIdentifier:YOUR_APP_GROUP_IDENTIFIER]
URLByAppendingPathComponent:@"SharedJsonFile.json"]
因此,每当我想进行修改并更新 SharedJsonFile.json,然后重新加载 contentblocker。
为了阅读 json,我在扩展的 beginRequestWithExtensionContext
方法中使用了这个 URL 路径 -
NSURL *jsonPath = [[NSFileManager defaultManager]
containerURLForSecurityApplicationGroupIdentifier:YOUR_APP_GROUP_IDENTIFIER]
URLByAppendingPathComponent:@"SharedJsonFile.json"];
我听说 iOS 支持内容拦截器,并且所有拦截都是由 App Bundle 中名为 blockerList.json
的文件完成的。虽然我知道 SFContentBlockerManager.reloadContentBlockerWithIdentifier()
会重新加载 blockerList.json
中的数据。但是,我认为这没有任何用处; blockerList.json
是主包的一部分,无法修改。因此,有什么方法可以修改 blockerList.json
(或者扩展名可以指向另一个文件,删除并重新创建,不使用 JSON,等等)?
您不必使用捆绑包中的 blockerList.json
作为 JSON 来源。您可以执行多种不同的操作来动态更改内容拦截器。
- 您可以让扩展程序从服务器下载新的 JSON 文件,并在应用程序触发时更新拦截器
- 将应用程序和内容拦截器扩展程序放在同一个应用程序组中,以便可以在两者之间传递数据,然后执行以下操作之一:
- 让应用 create/modify 在共享组目录中有一个 JSON 文件,该文件将由扩展程序读取
- 让应用程序将数据写入共享组用户默认值,然后让扩展程序创建一个 JSON 文件供其加载
是的,我已经通过从主捆绑 json 文件中读取所有阻止规则并在 App Group 标识符容器中创建了一个 json 文件(即 SharedJsonFile.json)来完成此操作。然后我把所有规则写到SharedJsonFile.json.
[[NSFileManager defaultManager]
containerURLForSecurityApplicationGroupIdentifier:YOUR_APP_GROUP_IDENTIFIER]
URLByAppendingPathComponent:@"SharedJsonFile.json"]
因此,每当我想进行修改并更新 SharedJsonFile.json,然后重新加载 contentblocker。
为了阅读 json,我在扩展的 beginRequestWithExtensionContext
方法中使用了这个 URL 路径 -
NSURL *jsonPath = [[NSFileManager defaultManager]
containerURLForSecurityApplicationGroupIdentifier:YOUR_APP_GROUP_IDENTIFIER]
URLByAppendingPathComponent:@"SharedJsonFile.json"];