建议¶
SuggestStore
的 API 可以参见 MozillaComponents Kotlin 文档。
注意
请确保为该组件初始化 Viaduct。
警告
SuggestStore
是同步的,这意味着它需要包装在您正在使用的目标语言的异步原语中。
设置存储¶
您需要导入以下一个或多个原语来使用 SuggestStore
(这些来自由 uniffi
生成的 suggest.kt
文件)
import mozilla.appservices.remotesettings.RemoteSettingsServer
import mozilla.appservices.suggest.SuggestApiException
import mozilla.appservices.suggest.SuggestIngestionConstraints
import mozilla.appservices.suggest.SuggestStore
import mozilla.appservices.suggest.SuggestStoreBuilder
import mozilla.appservices.suggest.Suggestion
import mozilla.appservices.suggest.SuggestionQuery
import MozillaAppServices
创建一个 SuggestStore
作为单例。您可以通过 SuggestStoreBuilder
来实现,它会返回一个 SuggestStore
。在构建过程中不会执行任何 I/O 或网络请求,这使得它可以在应用程序启动的任何时间安全地执行。
internal val store: SuggestStore = {
SuggestStoreBuilder()
.dataPath(context.getDatabasePath(DATABASE_NAME).absolutePath)
.remoteSettingsServer(remoteSettingsServer)
.build()
let store: SuggestStore = {
let storeBuilder = SuggestStoreBuilder()
storeBuilder.dataPath(context.getDatabasePath(DATABASE_NAME).absolutePath)
storeBuilder.remoteSettingsServer(remoteSettingsServer)
return storeBuilder.build()
}
您需要设置
dataPath
,它是存储建议的路径(SQLite 位置)。remoteSettingsServer
仅在您希望将服务器设置为除prod
之外的其他任何内容时才需要。如果是这样,您需要传递一个RemoteSettingsServer
对象。
导入建议¶
导入建议有两种不同的方式:启动时,然后在后台定期执行。
SuggestIngestionConstraints
用于控制导入的内容。使用
providers
字段通过提供程序类型限制导入。使用
providerConstraints
字段添加其他约束,目前仅用于曝光建议。
启动时¶
在每次启动后不久,使用 SuggestIngestionConstraints(emptyOnly=true)
导入。这确保我们在第一次运行以及升级后(我们通常会清除数据库以从头开始)时在数据库中有一些内容。
store.value.ingest(SuggestIngestionConstraints(
emptyOnly = true,
providers = listOf(SuggestionProvider.AMP_MOBILE, SuggestionProvider.WIKIPEDIA, SuggestionProvider.WEATHER)
))
store.value.ingest(SuggestIngestionConstraints(
emptyOnly: true,
providers: [.AMP_MOBILE, .WIKIPEDIA, .WEATHER]
))
定期¶
按照定期计划(例如每天一次)使用 SuggestIngestionConstraints(emptyOnly=false)
导入。
store.value.ingest(SuggestIngestionConstraints(emptyOnly = false))
store.value.ingest(SuggestIngestionConstraints(emptyOnly: false))
查询建议¶
调用 SuggestStore::query
以获取建议栏的建议。providers
参数应与传递给 ingest()
的值相同。
store.value.query(
SuggestionQuery(
keyword = text,
providers = listOf(SuggestionProvider.AMP_MOBILE, SuggestionProvider.WIKIPEDIA, SuggestionProvider.WEATHER),
limit = MAX_NUM_OF_FIREFOX_SUGGESTIONS,
),
)
store.value.query(
SuggestionQuery(
keyword: text,
providers: [.AMP_MOBILE, .WIKIPEDIA, .WEATHER],
limit: MAX_NUM_OF_FIREFOX_SUGGESTIONS
)
)
中断查询¶
使用 InterruptKind::Read
调用 SuggestStore::Interrupt
以在用户取消查询并在运行下一个查询之前中断任何正在进行的查询。
store.value.interrupt()
store.value.interrupt()
关闭存储¶
在关闭时,使用 InterruptKind::ReadWrite
调用 SuggestStore::Interrupt
以中断任何正在进行的导入和查询。
store.value.interrupt()
store.value.interrupt()