2017-09-05 149 views
4

通過應用程序索引我向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())}; 
+0

我也有我的貼在gboard沒有出現問題。我必須首先獲得Gboard的最新測試版以獲取貼紙功能。我的個人貼紙Allo即時出現。然後我用NBAmoji應用程序測試了貼紙功能,它的工作完美無瑕。但我仍然沒有看到我的應用出現在那裏的標籤。我幾乎完全遵循了示例代碼,我沒有得到任何錯誤。似乎一切正常,更新任務成功完成。示例代碼:https://github.com/firebase/quickstart-android/tree/master/app-indexing – cybergen

+1

要獲取Gboard中的貼紙,請長按表情符號按鈕(逗號)。新的貼紙圖標位於emoji圖標和gif圖標之間的最底部。按下它,你會看到一些貼紙(如果有的話)或提示從遊戲商店下載一個sitcker應用程序。當心,也有一些蹩腳的... ;-) – cybergen

+1

但是,如果您希望其他人幫助您,您應該提供更多的「IndexingService」和「StickerProvider」代碼,並詳細描述您的問題。日誌說什麼?任何錯誤?更新任務如何運作? – cybergen

回答

1

的問題是在代碼中的另一部分,因爲你上面貼東西在下面的例子改編自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; 
}