Android M App链接验证失败

时间:2017-01-17 22:58:52

标签: android json android-6.0-marshmallow deep-linking applinks

我在AndroidManifest.xml

中按如下方式定义了我的应用链接
<intent-filter android:autoVerify="true">
    <action android:name="android.intent.action.VIEW"/>
    <category android:name="android.intent.category.BROWSABLE"/>
    <category android:name="android.intent.category.DEFAULT"/>

    <data android:host="mysite.com" android:scheme="http"/>
    <data android:host="mysite.com" android:scheme="https"/>
    <data android:host="www.mysite.com" android:scheme="http"/>
    <data android:host="www.mysite.com" android:scheme="https"/>
</intent-filter>

应用程序正确检测主机中的URL,但提示用户是否要在应用程序或浏览器中打开它们,因为验证失败,如Android监视器控制台中所示:

01-17 15:44:28.847 7084-30015/? I/IntentFilterIntentSvc: Verifying IntentFilter. verificationId:2 scheme:"https" hosts:"mysite.com www.mysite.com" package:"com.site.myapp.android.flavor".
01-17 15:44:29.821 7084-30015/? I/IntentFilterIntentSvc: Verification 2 complete. Success:false. Failed hosts:mysite.com,www.mysite.com.

我的assetlinks.json文件位于mysite.com/.well-known/assetlinks.json,包含正确的包名称和SHA256哈希值。它也可以通过http和https访问。我已经通过从APK中提取CERT.RSA文件并使用keytool -printcert -file CERT.RSA

验证了来自密钥库的SHA哈希匹配

我尝试过调用https://digitalassetlinks.googleapis.com/v1/statements:list?source.web.site=https://domain1:port&relation=delegate_permission/common.handle_all_urls以及使用google site Statement List Tester,并且都返回OK。

我正在使用运行Android 7的Nexus设备进行测试。

根据the documentation我已经完成了应用链接工作所需的一切。还有什么我可以检查的吗?

我的服务器在Windows 7上运行IIS,我已经在IIS和web.config文件中添加了应用程序/ json作为mimetype。它是否会因为我使用自签名SSL证书而失败?

编辑:SingleHostAsyncVerifier还记录验证失败。 (用示例和SHA哈希替换了mysite)

01-17 15:44:29.817 7084-30017/? I/SingleHostAsyncVerifier: Verification result: checking for a statement with source a <
a: "https://www.example.com"
>
, relation delegate_permission/common.handle_all_urls, and target b <
a: "com.mypackage.flavor"
b <
a: "(SHA256 hash)"
>
>
--> false.
01-17 15:44:29.820 7084-30016/? I/SingleHostAsyncVerifier: Verification result: checking for a statement with source a <
a: "https://example.com"
>
, relation delegate_permission/common.handle_all_urls, and target b <
a: "com.mypackage.flavor"
b <
a: "(SHA256 hash)"
>
>
--> false.

1 个答案:

答案 0 :(得分:3)

虽然应用程序链接文档中未提及,但应用程序链接要求服务器具有来自公共或受信任证书颁发机构的有效SSL证书。自签名证书不起作用。

切换到https://www.thawte.com/发出的SSL证书后,应用链接验证成功完成。