本文介绍了Gboard贴纸搜索未返回结果的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
通过应用索引,我向GBoard添加了贴纸包,但是GBoard搜索无法通过关键字找到我的贴纸.
new Indexable.Builder("Sticker")
.setName("Bye")
.setImage("http://www.snoopysticker.com?id=1234")
.setUrl("http://sticker/canonical/image/bye")
.setDescription("A sticker for Bye")
.put("keywords", "bye", "snoopy", "see ya", "good bye")
.put("isPartOf",
new Indexable.Builder("StickerPack")
.setName("Snoopy Pack")
.build())
.build())};
推荐答案
问题出在代码的另一部分,因为您在上面的示例中根据上面的内容进行了很好的改编,该示例改编自 Google的示例项目贴纸:
The problem is in another part of the code because what you have posted above works great in the following example adapted from Google's sample project for stickers:
public static void clearStickers(FirebaseAppIndex firebaseAppIndex) {
Task<Void> task = firebaseAppIndex.removeAll();
task.addOnSuccessListener(__ -> Log.i(TAG, SUCCESS_IN_CLEARING_STICKERS));
task.addOnFailureListener(e -> Log.i(TAG, FAILED_TO_CLEAR_STICKERS, e));
}
public static void setStickers(final Context context, FirebaseAppIndex firebaseAppIndex) {
try {
List<Indexable> stickers = getIndexableStickers(context);
Indexable stickerPack = getIndexableStickerPack(context);
List<Indexable> indexables = new ArrayList<>(stickers);
indexables.add(stickerPack);
Task<Void> task = firebaseAppIndex.update(
indexables.toArray(new Indexable[indexables.size()]));
task.addOnSuccessListener(__ -> Log.i(TAG, SUCCESS_IN_INSTALLING_STICKERS));
task.addOnFailureListener(e -> Log.i(TAG, FAILED_TO_INSTALL_STICKERS, e));
} catch (IOException | FirebaseAppIndexingInvalidArgumentException e) {
Log.e(TAG, ERROR_IN_SETTING_STICKERS, e);
}
}
private static Indexable getIndexableStickerPack(final Context context)
throws IOException, FirebaseAppIndexingInvalidArgumentException {
List<Indexable> indexables = StreamSupport
.stream(getStickerBuilders(context))
.map(IndexableBuilder::build)
.collect(Collectors.toList());
StickerPackBuilder stickerPackBuilder = Indexables.stickerPackBuilder()
.setName(STICKER_PACK_NAME)
// Use the first sticker as the hero for the pack
.setUrl(String.format(STICKER_PACK_URL_PATTERN, 0))
// Defaults to the first sticker in "hasSticker". Used to select between sticker
// packs so should be representative of the sticker pack.
.setImage(StickersDataFactory.getAllStickerReference().get(0).getURL())
.put("hasSticker", indexables.toArray(new Indexable[indexables.size()]))
.setDescription(STICKER_PACK_NAME);
return stickerPackBuilder.build();
}
private static List<Indexable> getIndexableStickers(final Context context)
throws IOException, FirebaseAppIndexingInvalidArgumentException {
List<Indexable> indexableStickers = new ArrayList<>();
List<Indexable.Builder> stickerBuilders = getStickerBuilders(context);
for (Indexable.Builder stickerBuilder : stickerBuilders) {
stickerBuilder.put("keywords", getKeywordsForSticker(context, null))
.put("isPartOf", new Indexable.Builder("StickerPack").setName(STICKER_PACK_NAME) .build());
indexableStickers.add(stickerBuilder.build());
}
return indexableStickers;
}
private static List<Indexable.Builder> getStickerBuilders(final Context context)
throws IOException, FirebaseAppIndexingInvalidArgumentException {
List<Indexable.Builder> stickerBuilders = new ArrayList<>();
// Start from 1 because the first sticker will be used as hero for the pack
for (int i = 1; i < StickersDataFactory.getAllStickerReference().size(); i++) {
stickerBuilders.add(new Indexable.Builder("Sticker")
.setName(StickersDataFactory.getAllStickerReference().get(i).getName())
.setUrl(String.format(STICKER_URL_PATTERN, i))
.setImage(StickersDataFactory.getAllStickerReference().get(i).getURL())
.setDescription("Random description")
.put("keywords", getKeywordsForSticker(context, StickersDataFactory.getAllStickerReference().get(i)))
.put("isPartOf", new Indexable.Builder("StickerPack").setName(STICKER_PACK_NAME) .build()));
}
return stickerBuilders;
}
这篇关于Gboard贴纸搜索未返回结果的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!