我在Android上使用Chrome的“添加到主屏幕”按钮创建了一个渐进式网络应用app.example.com
。
我有一个NFC标签,通常会在Chrome中点按app.example.com/nfc_app
。
如何点击此NFC标签,以便在点按时打开app.example.com/nfc_app
PWA而不是Chrome?
答案 0 :(得分:0)
添加帮助应用程序作为解决方法:
package com.something;
import android.content.Intent;
import android.net.Uri;
import android.nfc.NfcAdapter;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
private void handleNfcIntent(@Nullable Intent intent) {
if (intent != null && NfcAdapter.ACTION_NDEF_DISCOVERED.equals(intent.getAction())) {
//clear the intent so it doesn't come back
intent.setAction("");
Uri uri = intent.getData();
if (uri != null) {
Intent uriOnlyIntent = new Intent(Intent.ACTION_VIEW, uri);
//call the progressive web app registered to view the uri
startActivity(uriOnlyIntent);
}
}
}
@Override
protected void onNewIntent(final Intent intent) {
super.onNewIntent(intent);
setIntent(intent);
}
@Override
protected void onResume() {
super.onResume();
//https://stackoverflow.com/a/36942185 provided the insight for handling this way
//always called after onNewIntent and onCreate allowing a tag reward for a closed app
handleNfcIntent(getIntent());
}
}
您的AndroidManifest.xml会侦听您的目标网址:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.something">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
<intent-filter>
<action android:name="android.nfc.action.NDEF_DISCOVERED"/>
<category android:name="android.intent.category.DEFAULT"/>
<data android:host="something.com" android:scheme="https" />
</intent-filter>
</activity>
</application>
</manifest>
现在,当您扫描标签时,NFC意图将由安装的应用程序处理,该应用程序转发到您的Progressive Web App注册的View Intent。
对我来说,这仅适用于Android 8,而不适用于Android 6,因为通过点击Chrome中的链接显然打开了PWA也不受支持。
一个不幸的解决方案,所以我希望能找到更好的答案。
答案 1 :(得分:0)
可以确认,Android 8,其他网站或其他应用程序上的链接打开PWA就好了,但NFC意图会打开Chrome。这是另一种解决方法,不需要您安装本机帮助程序APK:
创建一个简单的重定向HTML文件pwa.html
并从其他域提供服务,比如说other.example.com:
<html>
<body><a id="link"></a></body>
<script type="text/javascript">
var a = document.getElementById('link');
// set the target link as desired, may add routes and params etc.
a.href = "https://app.example.com/...";
a.click();
</script>
</html>
然后,您不必将NFC标记指向https://app.example.com
,而是将其编程为指向您的重定向HTML https://other.example.com/pwa.html
。它并不完美,实际上只是一种解决方法,但比构建和安装单独的APK更简单。