Android共享深层链接无法正常工作

时间:2019-12-03 18:30:19

标签: java android firebase firebase-dynamic-links android-deep-link

我正在共享android应用中的深层链接。

我遇到以下问题

  1. 仅当应用程序在后台运行时,共享链接才会打开文章,否则只会打开主页。这意味着当应用程序不在后台运行时,则不会打开文章。它只是启动应用程序。
  2. 即使该应用程序在后台运行并且我单击共享链接时,它也不会打开特定的文章,而是会打开其他文章或只是最近的文章。 (我认为从该深层链接中读取新闻ID会出现问题)

深层链接示例:

大数据,人工智能,机器学习,神经网络,数据科学和深度学习的备案代码 https://lunaticai.page.link/?link=https://lunaticai.page.link/lunaticai&apn=com.Insane.App&amv=news=244


先在 AndroidManifest.xml

中查看实施
<activity
            android:name="com.Insane.App.ActivityMain"
            android:configChanges="orientation|keyboardHidden|screenSize"
            android:screenOrientation="portrait"
            >

            <intent-filter>
                <action android:name="android.intent.action.VIEW"/>
                <category android:name="android.intent.category.DEFAULT"/>
                <category android:name="android.intent.category.BROWSABLE"/>          
                <data
                    android:scheme="https"
                    android:host="lunaticai.page.link"
                    />
            </intent-filter>

            <intent-filter>
                <action android:name="android.intent.action.VIEW"/>
                <category android:name="android.intent.category.DEFAULT"/>
                <category android:name="android.intent.category.BROWSABLE"/>
                <data
                    android:scheme="http"
                    android:host="lunaticai.page.link"
                    />
            </intent-filter>

        </activity>

ActivityNewsDetails.java

private String buildDynamicLink(News news){

       return "https://lunaticai.page.link/?"
            +"link="+
            "https://lunaticai.page.link/lunaticai"
            +"&apn=" +
            "com.Insane.App"
            +"&amv="+
            "news="+news.id;

    }

ActivityMain.java

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        if (getIntent().getExtras() != null && getIntent().getExtras().getBoolean("EXIT", false)) {
            finish();
        }

        FirebaseDynamicLinks.getInstance()
                .getDynamicLink(getIntent())
                .addOnSuccessListener(this, new OnSuccessListener<PendingDynamicLinkData>() {
                    @Override
                    public void onSuccess(PendingDynamicLinkData pendingDynamicLinkData) {
                        // Get deep link from result (may be null if no link is found)
                        deepLink = null;
                        if (pendingDynamicLinkData != null) {
                            deepLink = pendingDynamicLinkData.getLink();
                        }

                        Uri data = getIntent().getData();

                        if (data != null) {
                            Log.d("deep", data.toString());

                            try {
                                String path = data.toString();
                                String idStr = path.substring(path.lastIndexOf('=') + 1);
                                if(!idStr.equals("")){
                                    newsId = Long.parseLong(idStr);
                                }
                                Log.d("deep", "newsId = "+newsId);

                            } catch (NumberFormatException e) {
                                startActivity(getIntent());
                            }
                        }
                        if(data != null && newsId != 0){

                            if (resp != null) {
                                ActivityNewsDetails.navigate(ActivityMain.this,resp.news.get(0));
                                for (int i=0;i<resp.news.size();i++){
                                    if(resp.news.get(i).id == newsId){
                                        ActivityNewsDetails.navigate(ActivityMain.this,resp.news.get(i));
                                    }
                                }
                            }

                        }

                    }
                })
                .addOnFailureListener(this, new OnFailureListener() {
                    @Override
                    public void onFailure(@NonNull Exception e) {
                        Log.w(TAG, "getDynamicLink:onFailure", e);
                    }
                });

0 个答案:

没有答案