문제는 코드의 다른 부분에 있습니다
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에 표시되지 내 스티커에 문제가
. 나는 Gboard의 최근 베타 버전을 받아야만 스티커 기능을 사용할 수있었습니다. Allo의 개인 스티커가 즉시 나타났습니다. 그런 다음 NBAmoji 앱으로 스티커 기능을 테스트하고 완벽하게 작동했습니다. 하지만 여전히 내 앱에 의해 색인이 생성 된 스티커가 표시되지 않습니다. 나는 샘플 코드를 거의 정확히 따라 갔고 오류가 발생하지 않았습니다. 모든 것이 잘 작동하고 업데이트 작업이 성공적으로 완료됩니다. 샘플 코드 : https://github.com/firebase/quickstart-android/tree/master/app-indexing – cybergen
Gboard의 스티커를 찾으려면 이모티콘 버튼 (쉼표)을 길게 누릅니다. 새로운 스티커 아이콘은 이모티콘 아이콘과 gif 아이콘 사이의 맨 아래에 있습니다. 그것을 누르면 사용 가능한 경우 스티커가 표시되거나 플레이 스토어에서 부싯돌 앱을 다운로드하는 힌트가 표시됩니다. 조심하십시오, 또한 약간의 진절머리 나는 것들이 있습니다 ...-) – cybergen
그러나 다른 사람들이 당신을 도와주기를 원한다면, 당신의'IndexingService'와'StickerProvider'의 더 많은 코드와 당신의 문제에 대한 자세한 설명을 제공해야합니다. 그 통나무는 뭐라고 말합니까? 오류가 있습니까? 업데이트 작업은 어떻게 작동합니까? – cybergen