我已经在我的设备上开发了一个Android应用程序(app尚未在Android Play商店中)。我有以下逻辑来在MainActivity中获得深层链接。
GoogleApiClient mGoogleApiClient = new GoogleApiClient.Builder(this)
.enableAutoManage(this, null)
.addApi(AppInvite.API)
.build();
// Check if this app was launched from a deep link. Setting autoLaunchDeepLink to true
// would automatically launch the deep link if one is found.
boolean autoLaunchDeepLink = false;
AppInvite.AppInviteApi.getInvitation(mGoogleApiClient, this, autoLaunchDeepLink)
.setResultCallback(
new ResultCallback<AppInviteInvitationResult>() {
@Override
public void onResult(@NonNull AppInviteInvitationResult result) {
if (result.getStatus().isSuccess()) {
// Extract deep link from Intent
Intent intent = result.getInvitationIntent();
String deepLink = AppInviteReferral.getDeepLink(intent);
Toast.makeText(getApplicationContext(), deepLink, Toast.LENGTH_LONG).show();
// Handle the deep link. For example, open the linked
// content, or apply promotional credit to the user's
// account.
// ...
} else {
Log.d(TAG, "getInvitation: no deep link found.");
}
}
});
我使用Firebase控制台构建了一些动态链接,并在移动浏览器中打开。但它没有打开我的应用程序并且达到了字符串deepLink = AppInviteReferral.getDeepLink(intent);
相反,它是在移动浏览器中打开URL。
如何在使用firebase动态链接时打开应用程序并处理活动中的深层链接?
我在清单文件中有意图过滤。
<activity android:name="MainActivity"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
<action android:name="android.intent.action.VIEW"/>
<category android:name="android.intent.category.DEFAULT"/>
<category android:name="android.intent.category.BROWSABLE"/>
<data android:host="example.com" android:scheme="http"/>
<data android:host="example.com" android:scheme="https"/>
</intent-filter>
</activity>
答案 0 :(得分:6)
或者,您也可以在意图过滤器中提供数据,如&#34; regular&#34;中所述。深层链接doc(https://developer.android.com/training/app-indexing/deep-linking.html)
意图过滤器将如下所示:
<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:host="https://XXYYZZ42.app.goo.gl/" // <- Replace with your deep link from the console
android:scheme="https"/>
</intent-filter>
编辑:添加图片以显示在哪里可以找到此链接
答案 1 :(得分:1)
正如另一个答案所解释的那样,你的意图过滤器似乎有一些问题。你的网址也可能有一些问题。当我玩这些时,我创建了错误的URL到FireBase网站而没有注意到它。您可以通过在应用中打开整个网址来测试代码。我将所有要测试的网址写入电子邮件并发送给自己,在设备中打开并开始点击。之后,您可以在FireBase中创建所需的URL。以下是几个例子(错别字和其他可能的错误):
如果您在设备上点击了此网址:
https://<myapp>.app.goo.gl/?link=https://mysite.fi/112972&apn=com.mydomain.myapp
并在你的清单中显示:
<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="mysite.fi"
android:pathPattern=".*" />
</intent-filter>
它应该在您的应用中打开https://mysite.fi/112972(com.mydomain.myapp),如果您在PC上打开了该链接,它将在浏览器中打开https://mysite.fi/112972。
如果您在设备中打开此网址:
https://<myapp>.app.goo.gl/?link=https://mysite.fi/112972&apn=com.mydomain.myapp&al=x-myscheme://mydeeplink/112972&afl=http://fallback.fi
并在你的清单中显示:
<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="myscheme"
android:host="mydeeplink"
android:pathPattern=".*" />
</intent-filter>
它会在你的应用程序中打开myscheme:// mydeeplink / 112972(com.mydomain.myapp)。您需要有代码来处理它。如果未安装该应用,则会在您的浏览器中打开http://fallback.fi。在PC上,它仍会打开https://mysite.fi/112972。
(编辑19.3.2018)似乎Firebase不再完全支持'al ='了。该代码有效,但文档和Firebase控制台生成的网址中缺少该代码。
答案 2 :(得分:1)
我遇到了与深度链接无法正常工作相同的问题,前者的答案没有帮助。诀窍是如何分割“数据”标签:
而不是:
<data android:host="example.com" android:scheme="http"/>
<data android:host="example.com" android:scheme="https"/>
这样做:
<data android:host="example.com"/>
<data android:scheme="http"/>
<data android:scheme="https"/>
希望能帮助其他人:)
答案 3 :(得分:1)
动作视图和动作主要都属于不同的“意图”类别。因此,您需要将它们放在这样的不同块中:
<activity android:name=".DynamicLinkActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</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:host="example.com"
android:scheme="http" />
<data
android:host="example.com"
android:scheme="https" />
</intent-filter>
</activity>
答案 4 :(得分:0)
2019年1月更新
确保已将应用程序的SHA256证书指纹添加到Firebase控制台的项目中。
在要动态链接到便当的活动下的AndroidManifest.xml中添加以下代码:
<intent-filter android:autoVerify="true">
<action android:name="android.intent.action.VIEW"/>
<category android:name="android.intent.category.DEFAULT"/>
<category android:name="android.intent.category.BROWSABLE"/>
<data android:host="mydomainname.page.link" android:scheme="http"/>
<data android:host="mydomainname.page.link" android:scheme="https"/>
</intent-filter>