diff --git a/plugins/deep-link/android/src/main/WantedAndroidManifest.xml b/plugins/deep-link/android/src/main/WantedAndroidManifest.xml
new file mode 100644
index 00000000..cd5ce2c9
--- /dev/null
+++ b/plugins/deep-link/android/src/main/WantedAndroidManifest.xml
@@ -0,0 +1,23 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/plugins/deep-link/android/src/main/java/DeepLinkPlugin.kt b/plugins/deep-link/android/src/main/java/DeepLinkPlugin.kt
new file mode 100644
index 00000000..b40d3f45
--- /dev/null
+++ b/plugins/deep-link/android/src/main/java/DeepLinkPlugin.kt
@@ -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
+ }
+ }
+}
diff --git a/plugins/deep-link/android/src/main/java/ExamplePlugin.kt b/plugins/deep-link/android/src/main/java/ExamplePlugin.kt
deleted file mode 100644
index df36085c..00000000
--- a/plugins/deep-link/android/src/main/java/ExamplePlugin.kt
+++ /dev/null
@@ -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)
- }
-}
diff --git a/plugins/deep-link/guest-js/index.ts b/plugins/deep-link/guest-js/index.ts
index a0560385..84fc7967 100644
--- a/plugins/deep-link/guest-js/index.ts
+++ b/plugins/deep-link/guest-js/index.ts
@@ -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__: (cmd: string, args?: unknown) => Promise;
+ }
+}
+
+export async function getLastLink() {
+ await window.__TAURI_INVOKE__(
+ "plugin:deep-link|get_last_link"
+ );
+}
+
+// TODO: REGISTER EVENT LISTENER
diff --git a/plugins/deep-link/rollup.config.mjs b/plugins/deep-link/rollup.config.mjs
index 96840adc..6555e98b 100644
--- a/plugins/deep-link/rollup.config.mjs
+++ b/plugins/deep-link/rollup.config.mjs
@@ -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",
diff --git a/plugins/deep-link/src/api-iife.js b/plugins/deep-link/src/api-iife.js
new file mode 100644
index 00000000..1731225f
--- /dev/null
+++ b/plugins/deep-link/src/api-iife.js
@@ -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__})}
diff --git a/plugins/deep-link/src/lib.rs b/plugins/deep-link/src/lib.rs
index 951263ab..75a858fa 100644
--- a/plugins/deep-link/src/lib.rs
+++ b/plugins/deep-link/src/lib.rs
@@ -39,8 +39,7 @@ impl> crate::DeepLinkExt for T {
/// Initializes the plugin.
pub fn init() -> TauriPlugin {
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)]
diff --git a/plugins/deep-link/src/mobile.rs b/plugins/deep-link/src/mobile.rs
index 450118cc..ab890b4d 100644
--- a/plugins/deep-link/src/mobile.rs
+++ b/plugins/deep-link/src/mobile.rs
@@ -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(
api: PluginApi,
) -> crate::Result> {
#[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 DeepLink {
.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