Cordova的自定义URL方案

lg40wkob  于 2023-02-05  发布在  其他
关注(0)|答案(4)|浏览(225)

我正试图找出一个关于“如何为Cordova应用程序定义自定义URL方案(在iOS和Android平台上)"的好文档。
我花了几个小时在网上,但没有找到一个好的答案。我得到了一些链接,这是相关的,但没有帮助我。
我的是一个Cordova应用程序,运行在iOS和Android平台上。我需要启用我的应用程序,以便在调用电子邮件的URL时启动(例如:我的应用程序://)。
请告诉我应该对Cordova应用程序进行哪些配置更改才能启用此功能。

**编辑:**Android清单

<?xml version='1.0' encoding='utf-8'?>
<manifest android:hardwareAccelerated="true" android:versionCode="1" android:versionName="0.0.1" package="com.simple.app" xmlns:android="http://schemas.android.com/apk/res/android">
    <supports-screens android:anyDensity="true" android:largeScreens="true" android:normalScreens="true" android:resizeable="true" android:smallScreens="true" android:xlargeScreens="true" />
    <uses-permission android:name="android.permission.INTERNET" />
    <application android:hardwareAccelerated="true" android:icon="@drawable/icon" android:label="@string/app_name" android:supportsRtl="true">
        <activity android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale" android:label="@string/activity_name" android:launchMode="singleTop" android:name="MainActivity" android:theme="@android:style/Theme.Black.NoTitleBar" android:windowSoftInputMode="adjustResize">
            <intent-filter android:label="@string/launcher_name">
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
            <intent-filter>
                <data android:scheme="com.test.simple" />
                <action android:name="android.intent.action.VIEW" />
                <category android:name="android.intent.category.DEFAULT" />
                <category android:name="android.intent.category.BROWSABLE" />
            </intent-filter>
        </activity>
    </application>
    <uses-sdk android:minSdkVersion="10" android:targetSdkVersion="21" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
</manifest>

网址

<a href="com.test.simple://">Launch The App</a>
watbbzwu

watbbzwu1#

我知道你是专门要求有关如何手工编码这自己的文档,但只是FYI有一个很好的插件,将做所有的(相当数量!)为您工作:

https://github.com/EddyVerbruggen/Custom-URL-scheme

安装时,您只需提供要用于启动应用的URL方案:

$ cordova plugin add https://github.com/EddyVerbruggen/LaunchMyApp-PhoneGap-Plugin.git --variable URL_SCHEME=myCustomUrlScheme

这就是它的全部功能,可以在Android和iOS上运行。

vd8tlhqk

vd8tlhqk2#

安卓系统:
在清单中:

<activity
            android:name=".MainActivity"
            android:label="@string/activity_name"
            android:launchMode="singleTask"
            <intent-filter android:label="@string/launcher_name" >
                <action android:name="android.intent.action.MAIN" />
                    <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
            <intent-filter>
                <data android:scheme="yourappscheme"/>
                <action android:name="android.intent.action.VIEW" />
                <category android:name="android.intent.category.DEFAULT" />
                <category android:name="android.intent.category.BROWSABLE" />
            </intent-filter>
        </activity>
    • 安卓系统:启动模式="单一任务"**

试着使用singleTask和singleTop并找出它们的不同之处,两者都有不同的功能。
对于iOS:

因此,在你的应用页面创建一个名为"重定向到我的应用"的按钮,其href为"yourappscheme://"。

<a href="yourappscheme://">Open my app</a>

此外还有其他部分,如方案,主机。
如果你想从url中获取参数,你必须使用本地代码。
假设你的网址是这样的:yourappscheme://?用户名="www.example.com" Android:将此代码放入OnCreate中。xxx@gmail.com" Android: put this code in OnCreate.

Intent intent = getIntent();
Uri data = intent.getData();
if(data!=null) { //
    //get schma
    String scheme = data.getScheme(); // 
    Toast.makeText(getActivity(), scheme, Toast.LENGTH_LONG).show();
    if(scheme.contains("yourappscheme")) {
        //get parameter
        String urltextboxname = data.getQueryParameter("username");
        system.out.println(urltextboxname) // it will print xxx@gmail.com
    }
}

适用于iOS:在应用程序代理中:

- (BOOL)application:(UIApplication*)application openURL:(NSURL*)url sourceApplication:(NSString*)sourceApplication annotation:(id)annotation
{
    if (!url) {
        return NO;
    }

    // calls into javascript global function 'handleOpenURL'
    NSString* jsString = [NSString stringWithFormat:@"handleOpenURL(\"%@\");", url];
    [self.viewController.webView stringByEvaluatingJavaScriptFromString:jsString];

    // all plugins will get the notification, and their handlers will be called
    [[NSNotificationCenter defaultCenter] postNotification:[NSNotification notificationWithName:CDVPluginHandleOpenURLNotification object:url]];
    NSString *myUrlString = [url absoluteString];
    if ([myUrlString containsString:@"yourappscheme://"])
    {
        NSLog(@"Calling Application Bundle ID: %@", sourceApplication);
        NSLog(@"URL scheme:%@", [url scheme]);
        NSLog(@"URL query: %@", [url query]);
    }
    return YES;
}

希望这是清楚的。

hkmswyz6

hkmswyz63#

我这样做:
1.转到你的文件夹项目并打开你的cmd
1.接下来键入以下内容:
cordova插件添加cordova插件自定义方案变量URL_SCHEME = mycoolapp
而不是mycoolapp写你的应用程序名称,但我只是删除(应用程序)的命令时,我粘贴这一点,但我不知道它是重要的或不,所以写在下面的(index.html)文件夹(www)。

<script type="text/javascript" src="js/plugins/LaunchMyApp.js"></script>

接下来,当你添加插件(customurlschema)时,它会添加到你项目的plugin文件夹中,所以请转到

cordova-plugin-customurlscheme->www->android->LaunchMyApp.js

并复制(LaunchMyApp.js),现在您可以看到

<script type="text/javascript" src="js/plugins/LaunchMyApp.js"></script>

(src)是"js/plugins/LaunchMyApp.js",因此您在您的(www)文件夹中创建此路径并将(LaunchMyApp.js)粘贴到该路径上。现在构建您的应用程序。如果第一次未构建您的应用程序,请使用以下命令删除Android

cordova platform rm android

并再次添加到您的项目,并建立两次。可能它为您工作,因为我在项目测试,与此插件工作,你应该把喜欢标签下面在您的html页面

<a href="mycoolapp://">Open my app</a>

例如:我把它写在下面:

cordova plugin add cordova-plugin-customurlscheme --variable URL_SCHEME=mycoolenglish

所以我的(href)如下所示:

<a href="mycoolenglish://index.html">Open my app</a>

然后测试它。
我的英语不太好,所以请原谅我先说。

pod7payv

pod7payv4#

2023年更新

从2023年起,PhoneGap被弃用,因此使用已接受答案建议的安装脚本每次都会失败。PhoneGap的安装没有候选项。
如果您尝试在终端中运行此命令:

cordova plugin add https://github.com/EddyVerbruggen/LaunchMyApp-PhoneGap-Plugin.git --variable URL_SCHEME=myCustomUrlScheme

这将返回以下错误:
无法通过注册表获取插件https://github.com/EddyVerbruggen/LaunchMyApp-PhoneGap-Plugin.git。这可能是连接问题或插件规范不正确。请检查您的连接和插件名称/版本/URL。CordovaError:错误:在$PATH中找不到git二进制文件

TLDR

要安装custom-url-scheme插件,请运行以下命令:

sudo cordova plugin add cordova-plugin-customurlscheme --variable URL_SCHEME=myapp://redirect.html?redirect&return=true

那么在您的服务器上应该有一个页面:

    • 重定向. html**
<a href="myapp://redirect.html?redirect&return=true">Click here to open app</a>

相关问题