2017-09-05 1 views
4

앱 색인 생성을 통해 스티커 팩을 GBoard에 추가했지만 GBoard 검색에서 키워드별로 내 스티커를 찾을 수 없습니다. 당신이 위의 게시 한 것은 Google's sample project for stickers에서 적응 다음 예에서 잘 작동하기 때문에게이블 스티커 검색 결과를 반환하지 않습니다

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())}; 
+0

. 나는 Gboard의 최근 베타 버전을 받아야만 스티커 기능을 사용할 수있었습니다. Allo의 개인 스티커가 즉시 나타났습니다. 그런 다음 NBAmoji 앱으로 스티커 기능을 테스트하고 완벽하게 작동했습니다. 하지만 여전히 내 앱에 의해 색인이 생성 된 스티커가 표시되지 않습니다. 나는 샘플 코드를 거의 정확히 따라 갔고 오류가 발생하지 않았습니다. 모든 것이 잘 작동하고 업데이트 작업이 성공적으로 완료됩니다. 샘플 코드 : https://github.com/firebase/quickstart-android/tree/master/app-indexing – cybergen

+1

Gboard의 스티커를 찾으려면 이모티콘 버튼 (쉼표)을 길게 누릅니다. 새로운 스티커 아이콘은 이모티콘 아이콘과 gif 아이콘 사이의 맨 아래에 있습니다. 그것을 누르면 사용 가능한 경우 스티커가 표시되거나 플레이 스토어에서 부싯돌 앱을 다운로드하는 힌트가 표시됩니다. 조심하십시오, 또한 약간의 진절머리 나는 것들이 있습니다 ...-) – cybergen

+1

그러나 다른 사람들이 당신을 도와주기를 원한다면, 당신의'IndexingService'와'StickerProvider'의 더 많은 코드와 당신의 문제에 대한 자세한 설명을 제공해야합니다. 그 통나무는 뭐라고 말합니까? 오류가 있습니까? 업데이트 작업은 어떻게 작동합니까? – cybergen

답변

1

문제는 코드의 다른 부분에 있습니다

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에 표시되지 내 스티커에 문제가
관련 문제