add most of the android poc

pull/504/head
FabianLars 2 years ago
parent 04cf5278e3
commit 7e75e5c2fb
No known key found for this signature in database
GPG Key ID: 3B12BC1DEBF61125

@ -0,0 +1,23 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
<!-- TODO: (tauri-cli?) Add auto manifest rewriter to add domains. Format: -->
<application>
<activity android:name="app-id.MainActivity" android:exported="true">
<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:scheme="http" />
<data android:scheme="https" />
<!-- Each host needs a new intent-filter -->
<data android:host="fabianlars.de" />
<!-- This should also be configurable otherwise the app will trigger on all paths -->
<data android:pathPrefix="/some-path" />
</intent-filter>
</activity>
</application>
</manifest>

@ -0,0 +1,61 @@
// Copyright 2019-2023 Tauri Programme within The Commons Conservancy
// SPDX-License-Identifier: Apache-2.0
// SPDX-License-Identifier: MIT
package app.tauri.deep_link
import android.app.Activity
import android.content.Intent
import android.webkit.WebView
import app.tauri.Logger
import app.tauri.annotation.Command
import app.tauri.annotation.TauriPlugin
import app.tauri.plugin.JSObject
import app.tauri.plugin.Plugin
import app.tauri.plugin.Invoke
@TauriPlugin
class DeepLinkPlugin(private val activity: Activity): Plugin(activity) {
private val implementation = Example()
private var webView: WebView? = null
private var lastUrl: String? = null
companion object {
var instance: DeepLinkPlugin? = null
}
@Command
fun getLastLink(invoke: Invoke) {
val ret = JSObject()
ret.put("url", this.lastUrl ?: "")
invoke.resolve(ret)
}
/* @Command
fun registerListenerRust(invoke: Invoke) {
val value = invoke.getString("value") ?: ""
val ret = JSObject()
ret.put("value", this.lastUrl ?: "none")
invoke.resolve(ret)
} */
override fun load(webView: WebView) {
instance = this
if (intent.action == intent.ACTION_VIEW) {
// TODO: check if it makes sense to split up init url and last url
this.lastUrl = intent.action.toString() + intent.data.toString()
// TODO: Emit event - may not work here timing wise
}
super.load(webView)
this.webView = webView
}
override fun onNewIntent(intent: Intent) {
if (intent.action == intent.ACTION_VIEW) {
this.lastUrl = intent.data.toString()
// TODO: Emit event
}
}
}

@ -1,23 +0,0 @@
// Copyright 2019-2023 Tauri Programme within The Commons Conservancy
// SPDX-License-Identifier: Apache-2.0
// SPDX-License-Identifier: MIT
package app.tauri.deep_link
import android.app.Activity
import app.tauri.annotation.Command
import app.tauri.annotation.TauriPlugin
import app.tauri.plugin.JSObject
import app.tauri.plugin.Plugin
import app.tauri.plugin.Invoke
@TauriPlugin
class ExamplePlugin(private val activity: Activity): Plugin(activity) {
@Command
fun ping(invoke: Invoke) {
val value = invoke.getString("value") ?: ""
val ret = JSObject()
ret.put("value", value)
invoke.resolve(ret)
}
}

@ -1,3 +1,17 @@
// Copyright 2019-2023 Tauri Programme within The Commons Conservancy
// SPDX-License-Identifier: Apache-2.0
// SPDX-License-Identifier: MIT
declare global {
interface Window {
__TAURI_INVOKE__: <T>(cmd: string, args?: unknown) => Promise<T>;
}
}
export async function getLastLink() {
await window.__TAURI_INVOKE__<string | null>(
"plugin:deep-link|get_last_link"
);
}
// TODO: REGISTER EVENT LISTENER

@ -1,6 +1,6 @@
import { readFileSync } from "fs";
import { createConfig } from "../rollup.config.mjs";
import { createConfig } from "../../shared/rollup.config.mjs";
export default createConfig({
input: "guest-js/index.ts",

@ -0,0 +1 @@
if("__TAURI__"in window){var __TAURI_DEEPLINK__=function(_){"use strict";return _.getLastLink=async function(){await window.__TAURI_INVOKE__("plugin:deep-link|get_last_link")},_}({});Object.defineProperty(window.__TAURI__,"deepLink",{value:__TAURI_DEEPLINK__})}

@ -39,8 +39,7 @@ impl<R: Runtime, T: Manager<R>> crate::DeepLinkExt<R> for T {
/// Initializes the plugin.
pub fn init<R: Runtime>() -> TauriPlugin<R> {
Builder::new("deep-link")
// TODO: api-iife.js
//.js_init_script(include_str!("api-iife.js").to_string())
.js_init_script(include_str!("api-iife.js").to_string())
.invoke_handler(tauri::generate_handler![commands::execute])
.setup(|app, api| {
#[cfg(mobile)]

@ -11,7 +11,7 @@ use tauri::{
use crate::models::*;
#[cfg(target_os = "android")]
const PLUGIN_IDENTIFIER: &str = "{{ android_package_id }}";
const PLUGIN_IDENTIFIER: &str = "app.tauri.deep_link";
#[cfg(target_os = "ios")]
tauri::ios_plugin_binding!(init_plugin_deep_link);
@ -22,7 +22,7 @@ pub fn init<R: Runtime, C: DeserializeOwned>(
api: PluginApi<R, C>,
) -> crate::Result<DeepLink<R>> {
#[cfg(target_os = "android")]
let handle = api.register_android_plugin(PLUGIN_IDENTIFIER, "ExamplePlugin")?;
let handle = api.register_android_plugin(PLUGIN_IDENTIFIER, "DeepLinkPlugin")?;
#[cfg(target_os = "ios")]
let handle = api.register_ios_plugin(init_plugin_deep_link)?;
Ok(DeepLink(handle))
@ -37,4 +37,12 @@ impl<R: Runtime> DeepLink<R> {
.run_mobile_plugin("ping", payload)
.map_err(Into::into)
}
// TODO: URI instead of String?
/// Get the last saved URL that triggered the deep link.
pub fn get_last_link(&self) -> crate::Result<Option<String>> {
self.0
.run_mobile_plugin("getLastLink", ())
.map_err(Into::into)
}
}

@ -1,4 +1,4 @@
lockfileVersion: '6.0'
lockfileVersion: '6.1'
settings:
autoInstallPeers: true
@ -128,7 +128,7 @@ importers:
version: 3.59.1
unocss:
specifier: ^0.53.1
version: 0.53.1(postcss@8.4.23)(rollup@3.25.1)(vite@4.3.9)
version: 0.53.1(postcss@8.4.23)(vite@4.3.9)
vite:
specifier: ^4.3.9
version: 4.3.9
@ -183,6 +183,16 @@ importers:
specifier: ^2.4.1
version: 2.4.1
plugins/deep-link:
dependencies:
'@tauri-apps/api':
specifier: 2.0.0-alpha.5
version: 2.0.0-alpha.5
devDependencies:
tslib:
specifier: ^2.4.1
version: 2.5.0
plugins/dialog:
dependencies:
'@tauri-apps/api':
@ -951,6 +961,20 @@ packages:
typescript: 5.1.3
dev: true
/@rollup/pluginutils@5.0.2:
resolution: {integrity: sha512-pTd9rIsP92h+B6wWwFbW8RkZv4hiR/xKsqre4SIuAOaOEQRxi0lqLke9k2/7WegC85GgUs9pjmOjCUi3In4vwA==}
engines: {node: '>=14.0.0'}
peerDependencies:
rollup: ^1.20.0||^2.0.0||^3.0.0
peerDependenciesMeta:
rollup:
optional: true
dependencies:
'@types/estree': 1.0.0
estree-walker: 2.0.2
picomatch: 2.3.1
dev: true
/@rollup/pluginutils@5.0.2(rollup@3.25.1):
resolution: {integrity: sha512-pTd9rIsP92h+B6wWwFbW8RkZv4hiR/xKsqre4SIuAOaOEQRxi0lqLke9k2/7WegC85GgUs9pjmOjCUi3In4vwA==}
engines: {node: '>=14.0.0'}
@ -1359,24 +1383,24 @@ packages:
eslint-visitor-keys: 3.4.1
dev: true
/@unocss/astro@0.53.1(rollup@3.25.1)(vite@4.3.9):
/@unocss/astro@0.53.1(vite@4.3.9):
resolution: {integrity: sha512-dvPH2buCL0qvWXFfQFUeB8kbbJsliN0ib2Am5/1r4XyOwCiCvfwc3UuQpsi0xJs/WO9QgIxLWxakxVj3DeAuAQ==}
dependencies:
'@unocss/core': 0.53.1
'@unocss/reset': 0.53.1
'@unocss/vite': 0.53.1(rollup@3.25.1)(vite@4.3.9)
'@unocss/vite': 0.53.1(vite@4.3.9)
transitivePeerDependencies:
- rollup
- vite
dev: true
/@unocss/cli@0.53.1(rollup@3.25.1):
/@unocss/cli@0.53.1:
resolution: {integrity: sha512-K2r8eBtwv1oQ6KcDLb3KyIDaApVle3zbckZmd7W402/IRIJSKScLjxWHtEJpnYEyuxD5MlQpfRZLZgmWWVMOsg==}
engines: {node: '>=14'}
hasBin: true
dependencies:
'@ampproject/remapping': 2.2.1
'@rollup/pluginutils': 5.0.2(rollup@3.25.1)
'@rollup/pluginutils': 5.0.2
'@unocss/config': 0.53.1
'@unocss/core': 0.53.1
'@unocss/preset-uno': 0.53.1
@ -1532,13 +1556,13 @@ packages:
'@unocss/core': 0.53.1
dev: true
/@unocss/vite@0.53.1(rollup@3.25.1)(vite@4.3.9):
/@unocss/vite@0.53.1(vite@4.3.9):
resolution: {integrity: sha512-/N/rjiFyj1ejK1ZQIv9N/NMsNE6i2/V8ISwYhbGxLpc3Sca4jeVjZPsx5cg5DN9Ddas2BRH3YhLhdh8rPUPzxQ==}
peerDependencies:
vite: ^2.9.0 || ^3.0.0-0 || ^4.0.0
dependencies:
'@ampproject/remapping': 2.2.1
'@rollup/pluginutils': 5.0.2(rollup@3.25.1)
'@rollup/pluginutils': 5.0.2
'@unocss/config': 0.53.1
'@unocss/core': 0.53.1
'@unocss/inspector': 0.53.1
@ -4175,7 +4199,7 @@ packages:
'@types/unist': 2.0.6
dev: true
/unocss@0.53.1(postcss@8.4.23)(rollup@3.25.1)(vite@4.3.9):
/unocss@0.53.1(postcss@8.4.23)(vite@4.3.9):
resolution: {integrity: sha512-0lRblA8hX7VUu5dywbcStzm590Iz5ahSJGsMNKNH3+u9C7AfJcKT8epxjkIkJWQBNJLD5vsao4SuuhLWB7eMQQ==}
engines: {node: '>=14'}
peerDependencies:
@ -4184,8 +4208,8 @@ packages:
'@unocss/webpack':
optional: true
dependencies:
'@unocss/astro': 0.53.1(rollup@3.25.1)(vite@4.3.9)
'@unocss/cli': 0.53.1(rollup@3.25.1)
'@unocss/astro': 0.53.1(vite@4.3.9)
'@unocss/cli': 0.53.1
'@unocss/core': 0.53.1
'@unocss/extractor-arbitrary-variants': 0.53.1
'@unocss/postcss': 0.53.1(postcss@8.4.23)
@ -4203,7 +4227,7 @@ packages:
'@unocss/transformer-compile-class': 0.53.1
'@unocss/transformer-directives': 0.53.1
'@unocss/transformer-variant-group': 0.53.1
'@unocss/vite': 0.53.1(rollup@3.25.1)(vite@4.3.9)
'@unocss/vite': 0.53.1(vite@4.3.9)
transitivePeerDependencies:
- postcss
- rollup

@ -1,4 +0,0 @@
{
"extends": "../../tsconfig.base.json",
"include": ["guest-js/*.ts"]
}
Loading…
Cancel
Save