Поиск стикеров 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())};

person Shushan Manandyan    schedule 05.09.2017    source источник
comment
У меня также есть проблемы с тем, что мои стикеры не отображаются в gboard. Мне пришлось получить последнюю бета-версию Gboard, чтобы сначала получить функцию стикера. Мои личные стикеры от Алло появились моментально. Затем я протестировал функцию стикеров в приложении NBAmoji, и она работала безупречно. Но я все еще не вижу, чтобы стикеры, проиндексированные моим приложением, появлялись там. Я почти точно следовал примеру кода и не получил никаких ошибок. Кажется, все работает нормально, и задача обновления успешно завершается. Пример кода: github.com/firebase/quickstart-android/tree/master. /индексирование приложений   -  person cybergen    schedule 06.09.2017
comment
Чтобы перейти к стикерам в Gboard, нажмите и удерживайте кнопку смайликов (запятая). Новый значок стикера расположен в самом низу между значком эмодзи и значком gif. Нажмите на нее, и вы должны увидеть стикеры, если они есть, или подсказку, чтобы загрузить приложение для сидячих мест из игрового магазина. Осторожно, есть и дрянные... ;-)   -  person cybergen    schedule 06.09.2017
comment
Однако вам следует предоставить больше кода ваших IndexingService и StickerProvider и подробное описание вашей проблемы, если вы хотите, чтобы другие вам помогли. Что говорит журнал? Есть ошибки? Как ведет себя задача обновления?   -  person cybergen    schedule 06.09.2017
comment
@ArthurThompson есть идеи? мы должны использовать JobService?   -  person cybergen    schedule 06.09.2017
comment
Я понял! Я переименовал Indexable.Builders. Они должны быть названы "Sticker" и "StickerPack" соответственно. -› Indexable.Builder("StickerPack") (как в этом вопросе - так это не ответ). Хотя это и есть в примере кода, это явно не задокументировано.   -  person cybergen    schedule 08.09.2017


Ответы (2)


Проблема в другой части кода, потому что то, что вы разместили выше, отлично работает в следующем примере, адаптированном из пример проекта Google для наклеек:

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;
}
person Mugurel    schedule 19.11.2017

Вместо new Indexable.Builder("Sticker") должно быть Indexables.stickerBuilder(). Я взял это из этого официального Google пример.

person Dick Lucas    schedule 24.03.2018