2017-08-08 165 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类型的对象存储在引擎中而不是参数中。只是一个想法:)