缩短Firebase动态链接

时间:2017-08-08 08:49:38

标签: android deep-linking firebase-dynamic-links

以前,我使用以下动态链接在我的应用中启动所需的页面

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

但是,对于没有安装我的应用的用户来说,这有一个缺点。对于没有安装我的应用的用户,这是他点击链接时发生的事情

  1. 转到Google Play商店
  2. 安装应用。
  3. 启动应用。 将转到应用的第一页,而不是深层链接中指定的所需页面。
  4. 稍后,我意识到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
    

    对于第3步,用户现在可以直接转到深层链接中指定的所需页面,而不是转到应用的第一页。

    但是,我觉得上面的链接太长了。阅读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

    知道我错过了哪一步?

    感谢。

2 个答案:

答案 0 :(得分:4)

错误请求可能表示无效的API密钥 - 用于授权请求。我会做的是:

  1. Firebase Console重新下载google-services.json并覆盖项目中的
  2. 检查json文件中/api_key/current_key下的包名称条目是否填写了API密钥参数
  3. 检查您是否已添加了google-services插件,并在应用内部调用了apply build.gradle
  4. 您可以查看文档中的步骤: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(&amp; d = 1)。这显示了在控制台中要解决的几个警告。

答案 1 :(得分:2)

我的猜测是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类型的对象而不是参数。只是一个想法:)