2017-08-08 168 views
1

以前,我用下面的動態鏈接到我的應用程序縮短火力地堡動態鏈接

http://jstock.co/a/news?code=1295.KL&symbol=PUBLIC+BANK+BHD 

但推出預期頁面,這有一個缺點,對誰不會安裝我的應用程序的用戶。對於誰不安裝我的應用程序的用戶,這是當他點擊了鏈接

  1. 去谷歌Play商店
  2. 安裝應用程序在什麼情況發生。
  3. 啓動應用程序。 將轉到應用的第一頁,而不是在深層鏈接中指定的所需頁面。

後來我意識到Firebase動態鏈接可以解決我的問題。如果我使用下面的URL,一切正常。

https://g7b6h.app.goo.gl/?link=http%3A%2F%2Fjstock.co%2Fa%2Fnews%3Fcode%3D1295.KL%26symbol%3DPUBLIC%2BBANK%2BBHD&apn=org.yccheok.jstock.gui 

對於第三步,用戶可以直接轉到深層鏈接指定的所需頁面,而不是轉到應用的第一頁。

但是,我覺得上面的鏈接太長了。閱讀https://firebase.google.com/docs/dynamic-links/android/create後,我儘量縮短它使用以下方式

private void build() { 
    Task<ShortDynamicLink> shortLinkTask = FirebaseDynamicLinks.getInstance().createDynamicLink() 
      .setLongLink(Uri.parse("https://g7b6h.app.goo.gl/?link=http%3A%2F%2Fjstock.co%2Fa%2Fnews%3Fcode%3D1295.KL%26symbol%3DPUBLIC%2BBANK%2BBHD&apn=org.yccheok.jstock.gui")) 
      .buildShortDynamicLink() 
      .addOnCompleteListener(this, new OnCompleteListener<ShortDynamicLink>() { 
       @Override 
       public void onComplete(@NonNull Task<ShortDynamicLink> task) { 
        if (task.isSuccessful()) { 
         Log.i("CHEOK", "success"); 
         // Short link created 
         Uri shortLink = task.getResult().getShortLink(); 
         Uri flowchartLink = task.getResult().getPreviewLink(); 

         Log.i("CHEOK", "shortLink = " + shortLink); 
         Log.i("CHEOK", "flowchartLink = " + flowchartLink); 

        } else { 
         Log.i("CHEOK", "error : " + task.getException().getMessage()); 
         // Error 
         // ... 
        } 
       } 
      }); 
} 

然而,每一次,我會得到error : Bad Request

任何想法我錯過了什麼步驟?

謝謝。

回答

3

錯誤的請求可能表明一個無效的API密鑰 - 用於授權請求。我會做的是:從Firebase Console

  1. 重新下載谷歌-services.json並覆蓋一個項目中的
  2. 檢查API密鑰參數充滿了/api_key/current_key下你的包名的條目在JSON文件
  3. 檢查是否已包括了谷歌的服務插件,並在您的應用程序的build.gradle底部稱爲apply

您可以檢查對文檔中的步驟:https://firebase.google.com/docs/android/setup#manually_add_firebase

這應該有望修復API訪問。當你在這裏時,你可能想檢查你的鏈接的調試版本:https://g7b6h.app.goo.gl/?link=http%3A%2F%2Fjstock.co%2Fa%2Fnews%3Fcode%3D1295.KL%26symbol%3DPUBLIC%2BBANK%2BBHD&apn=org.yccheok.jstock.gui&d=1(& d = 1結束)。這顯示了幾個警告在控制檯中解決。

+0

謝謝。當我重新下載'google-services.json'時,它可以工作。 API密鑰有所不同。當我測試生成的'https:// g7b6h.app.goo.gl/GkXlEGTokGA3Cr7r2'時,它按預期工作。然而,流程圖中的兩個警告讓我感到困惑。它聲明'org.yccheok.jstock.gui'和'org.yccheok.demo'缺少SHA256。我已經在發佈和調試密鑰中檢查了SHA256的兩倍,它們與Firebase控制檯中的相匹配。另外,我沒有在firebase控制檯中使用包'org.yccheok.demo'的應用程序。因此,這個警告信息使我更加困惑。我應該忽略這些警告嗎? –

1

我的猜測是您的setLongLink方法中的URI不需要使用UTF-8編碼。 Firebase的示例顯示了這一點:

Task<ShortDynamicLink> shortLinkTask = FirebaseDynamicLinks.getInstance().createDynamicLink() 
    .setLongLink(Uri.parse("https://abc123.app.goo.gl/?link=https://example.com/&apn=com.example.android&ibn=com.example.ios")) 
    .buildShortDynamicLink() 

希望這能解決您的問題,但我從不真正瞭解Firebase。

我以更簡單的方式處理這個問題的建議是將深層鏈接切換到Branch(我在那裏完全披露,但之前使用Firebase開發)。它會自動生成短鏈接,因爲鏈接實際上將JSON類型的對象存儲在引擎中而不是參數中。只是一個想法:)