为 Garmin 移动 SDK 创建 Cordova 插件

     2023-03-14     36

关键词:

【中文标题】为 Garmin 移动 SDK 创建 Cordova 插件【英文标题】:Creating a Cordova Plugin for Garmin Mobile SDK 【发布时间】:2016-12-18 23:47:05 【问题描述】:

我主要是使用 Cordova 的混合应用程序开发人员。我遇到了一个有趣的场景,我认为我需要创建一个 Cordova 插件来实现适用于 iOS 和 Android 的原生 Garmin SDK available here。

我查看了 cordova 的插件文档并完成了他们的示例。 Link here。我还查看了一些关于此事的体面资源,请参阅 Instabug's 和 Modus 的一个。

但是,我缺乏足够的知识来理解为什么 Garmin SDK 中缺少其他教程中包含的某些组件。主要是 ConnectIQ.bundle。

我也不确定是什么导致了我遇到的错误。我感觉该项目无法通过我正在尝试开发的自定义插件找到实现 ConnectIQ.framework 的特定文件。

我什至找到了另一个人实现的非官方 cordova Connect IQ 插件they released last year。执行后,这是我的错误日志:

2016-12-18 18:35:04.748 appTest[56419:4257397] CDVPlugin class CIQPlugin (pluginName: connectiq) does not exist.
2016-12-18 18:35:04.748 appTest[56419:4257397] [CDVTimer][connectiq] 0.180006ms
2016-12-18 18:35:13.942 appTest[56419:4257397] CDVPlugin class CIQPlugin (pluginName: ConnectIQ) does not exist.
2016-12-18 18:35:13.942 appTest[56419:4257397] ERROR: Plugin 'ConnectIQ' not found, or is not a CDVPlugin. Check your plugin mapping in config.xml.
2016-12-18 18:35:13.942 app Test[56419:4257397] -[CDVCommandQueue executePending] [Line 142] FAILED pluginJSON = ["INVALID","ConnectIQ","initializeWithUrlScheme",["prefs-123456"]]

这包含 plugin.xml 文件的内容:

    <?xml version="1.0" encoding="UTF-8"?>
<!-- Copyright (c) 2014 PayPal. All rights reserved. -->
<plugin xmlns="http://apache.org/cordova/ns/plugins/1.0"
    xmlns:rim="http://www.blackberry.com/ns/widgets"
    xmlns:android="http://schemas.android.com/apk/res/android"
    id="com.heavydutydev.cordova.ciq"
    version="0.0.1">
    <name>Cordova CIQ</name>
    <description>This plugin allows basic interactions with the Garmin Connect IQ native interfaces</description>
    <keywords>garmin, connect-iq, connect iq</keywords>
    <license>NONE</license>
    <engines>
            <engine name="cordova" version="&gt;=5.0.0" />
    </engines>




    <!-- ios -->
    <platform name="ios">
        <js-module src="www/cdv-plugin-connect-iq.js" name="ConnectIQ">
         <clobbers target="ConnectIQ" />
        </js-module>
        <config-file target="config.xml" parent="/*">
            <feature name="ConnectIQ">
                <param name="ios-package" value="CIQPlugin" onload="true" />
            </feature>
        </config-file>
        <source-file src="src/ios/ConnectIQ.framework" framework="true" />
    <!--    <header-file src="src/ios/PayPalMobileCordovaPlugin.h" />
        <source-file src="src/ios/PayPalMobileCordovaPlugin.m" />

        <header-file src="src/ios/PayPalMobile/PayPalConfiguration.h" />
        <header-file src="src/ios/PayPalMobile/PayPalFuturePaymentViewController.h" />
        <header-file src="src/ios/PayPalMobile/PayPalMobile.h" />
        <header-file src="src/ios/PayPalMobile/PayPalOAuthScopes.h" />
        <header-file src="src/ios/PayPalMobile/PayPalPayment.h" />
        <header-file src="src/ios/PayPalMobile/PayPalPaymentViewController.h" />
        <header-file src="src/ios/PayPalMobile/PayPalProfileSharingViewController.h" />

        <source-file src="src/ios/PayPalMobile/libPayPalMobile.a" framework="true" />
        <source-file src="src/ios/PayPalMobile/libCardIO.a" framework="true" />
        <source-file src="src/ios/PayPalMobile/libopencv_core.a" framework="true" />
        <source-file src="src/ios/PayPalMobile/libopencv_imgproc.a" framework="true" />


        <framework src="Accelerate.framework" />
        <framework src="AudioToolbox.framework" />
        <framework src="AVFoundation.framework" />
        <framework src="CFNetwork.framework" />
        <framework src="CoreGraphics.framework" />
        <framework src="CoreLocation.framework" weak="true" />
        <framework src="CoreMedia.framework" weak="true" />
        <framework src="CoreVideo.framework"/>
        <framework src="MessageUI.framework" />
        <framework src="OpenGLES.framework" />
        <framework src="MobileCoreServices.framework" />
        <framework src="Security.framework" />
        <framework src="SafariServices.framework"/>
        <framework src="SystemConfiguration.framework" />
        <framework src="QuartzCore.framework"/>
        <framework src="UIKit.framework"/>


        <framework src="libc++.dylib" />
        <framework src="libPayPalMobile.a" />
        <framework src="libCardIO.a" />
        <framework src="libopencv_core.a" />
        <framework src="libopencv_imgproc.a" /> -->

    </platform> 

    <platform name="android">
        <js-module src="www/cdv-plugin-connect-iq.js" name="ConnectIQ">
        <clobbers target="ConnectIQ" />
        </js-module>
        <config-file target="res/xml/config.xml" parent="/*">
            <feature name="ConnectIQ">
                <param name="android-package" value="com.heavydutydev.cordova.ciq.CIQPlugin" />
            </feature>
        </config-file>

        <source-file src="src/android/com/heavydutydev/cordova/ciq/CIQPlugin.java" target-dir="src/com/heavydutydev/cordova/ciq" />
        <source-file src="src/android/com/heavydutydev/cordova/ciq/CIQContext.java" target-dir="src/com/heavydutydev/cordova/ciq" />
        <source-file src="src/android/libs/connectiq.jar" target-dir="libs" />
<!-- 
        <config-file target="AndroidManifest.xml" parent="/manifest">
            <uses-permission android:name="android.permission.CAMERA" />
            <uses-permission android:name="android.permission.VIBRATE" />

            <uses-feature android:name="android.hardware.camera" android:required="false" />
            <uses-feature android:name="android.hardware.camera.autofocus" android:required="false" />

            <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
            <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
            <uses-permission android:name="android.permission.INTERNET"/>
        </config-file> -->

<!--         <config-file target="AndroidManifest.xml" parent="/manifest/application">
            <service android:name="com.paypal.android.sdk.payments.PayPalService"
            android:exported="false" />
            <activity android:name="com.paypal.android.sdk.payments.PaymentActivity" />
            <activity android:name="com.paypal.android.sdk.payments.LoginActivity" />
            <activity android:name="com.paypal.android.sdk.payments.PaymentMethodActivity" />
            <activity android:name="com.paypal.android.sdk.payments.PaymentConfirmActivity" />
            <activity android:name="com.paypal.android.sdk.payments.PayPalFuturePaymentActivity" />
            <activity android:name="com.paypal.android.sdk.payments.FuturePaymentConsentActivity" />
            <activity android:name="com.paypal.android.sdk.payments.FuturePaymentInfoActivity" />
            <activity android:name="com.paypal.android.sdk.payments.PayPalProfileSharingActivity" />
            <activity android:name="com.paypal.android.sdk.payments.ProfileSharingConsentActivity" />
            <activity
                android:name="io.card.payment.CardIOActivity"
                android:configChanges="keyboardHidden|orientation" />
            <activity android:name="io.card.payment.DataEntryActivity" />
        </config-file> -->

    </platform>

</plugin>

基于这些错误和我的研究,我认为 plugin.xml 和 config.xml 与我尝试实现的 SDK 没有正确对齐。如果有人可以提供一些额外的故障排除步骤,以便我可以了解有关该问题的更多信息,将不胜感激。

【问题讨论】:

【参考方案1】:

我已经开始了我自己的插件,灵感来自 ddteeter 插件。 但它只支持Android操作系统。

据我了解,您在使用 ConnectIQ Сordova 插件时遇到了一些错误。 因此,我建议您从头开始执行以下操作:

1) 从github 下载/克隆 ddteeter 插件。 2)创建科尔多瓦项目。添加 Android 平台。 3) 使用 NPM 安装 plugman 实用程序。 4) 将 ddteeter 插件安装到您刚刚创建的项目中。

call plugman install --platform android --project platforms\android --plugin some\filesystem\path\to\ddteeter\plugin\root\directory

之后,您将能够连接到您的设备(如果需要,也可以连接到 Monkey C 应用程序)。 此外,即使是直接消息传递,您也必须从 Google Play 安装 Garmin Connect 应用程序,否则 Android BLE SDK 将无法工作。

还要记住,这个插件不包含任何有价值的逻辑。但它允许您枚举配对设备以检查是否一切正常。 此插件公开了可从您的 JavaScript 代码访问的“ConnectIQ”全局变量。

【讨论】:

Maxim,我的工作基于 ddteeter 的插件。我正在寻找一种在 android 和 IOS 上支持此功能的方法。由于提供的文档不再有效,因此我似乎未正确实施 ConnectIQ.framework。

为 Facebook 移动应用安装广告安装 Facebook SDK

】为Facebook移动应用安装广告安装FacebookSDK【英文标题】:InstallFacebookSDKjustforFacebookMobileAppInstallAds【发布时间】:2013-02-0600:01:27【问题描述】:我正在尝试为我的iOS应用启用Facebook移动应用安装广告,我已经安装了FacebookSDK,SDK本... 查看详情

PayPal 移动 SDK,链式支付

】PayPal移动SDK,链式支付【英文标题】:PayPalmobileSDK,chainedpayments【发布时间】:2015-05-2315:04:24【问题描述】:正如我在有关PayPal移动SDK链式支付的网站上发现的那样,那里尚不支持。建议使用旧的MPL。是否已经知道移动SDK何时... 查看详情

为多个平台创建移动框架

】为多个平台创建移动框架【英文标题】:Createmobileframeworkformultipleplatforms【发布时间】:2012-08-0912:00:22【问题描述】:嘿,我一直在研究为多个移动平台开发应用程序的javascript/jquery方面。我遇到了这个框架:http://www.u360mobile.c... 查看详情

移动端车牌识别sdk开发包(可下载)

移动端车牌识别是一项基于OCR识别的应用技术。移动端车牌识别过程主要包含五个步骤,其中包括图像采集、图像预处理、车牌定位、字符分割、字符识别、输出结果等一系列计算机算法运算, 第一步【图像采集】:此步骤... 查看详情

在 ReactJs 中为组件创建不同的移动布局

】在ReactJs中为组件创建不同的移动布局【英文标题】:CreatingDifferentmobilelayoutforacomponentinReactJs【发布时间】:2017-01-0506:51:52【问题描述】:我们如何使用ReactJs为组件(具有不同的桌面类型布局)创建完全不同的(移动类型布局... 查看详情

为 Xamarin iOS 创建 Aviary SDK 绑定

】为XamariniOS创建AviarySDK绑定【英文标题】:CreatingAviarySDKBindingforXamariniOS【发布时间】:2014-06-2707:58:03【问题描述】:我对XamariniOS有足够的了解,但我对MonotouchBindings很幼稚。我需要在我的项目中使用AviarySDK,我通过阅读了解我... 查看详情

为移动应用创建环境

】为移动应用创建环境【英文标题】:Creatingenvironmentsformobileapps【发布时间】:2021-02-1219:29:25【问题描述】:我来自网络背景,我知道我们创建不同的环境并相应地部署应用程序。假设我有一个webapp和一个域www.abc.com用于测试环... 查看详情

Facebook SDK Unity 插件 - 移动应用广告跟踪

】FacebookSDKUnity插件-移动应用广告跟踪【英文标题】:FacebookSDKUnityPlugin-MobileAppAdsTracking【发布时间】:2014-02-1903:08:56【问题描述】:我在我的Unity项目中使用FacebookSDKUnity插件,我将使用它来创建iOS和Android版本。有谁知道我如何... 查看详情

如何使用 web sdk 为 quickblox 创建自定义对象?

】如何使用websdk为quickblox创建自定义对象?【英文标题】:Howtocreateacustomobjectusingwebsdkforquickblox?【发布时间】:2014-01-0708:21:46【问题描述】:我正在使用Quickblox的WebSDK创建一个phonegapAndroid应用程序。如何使用JavaScript和JSON数组创... 查看详情

为移动应用创建深层链接

】为移动应用创建深层链接【英文标题】:CreateDeepLinkforMobileApp【发布时间】:2015-02-2323:21:07【问题描述】:我想为我的应用创建一个促销链接-我可以通过电子邮件分发。当用户点击电子邮件中的链接时,网页会执行以下操作:... 查看详情

如何在 HTML 中为移动页面创建图像下载链接?

】如何在HTML中为移动页面创建图像下载链接?【英文标题】:HowcanIcreateanImageDownloadLinkinHTMLforaMobilePage?【发布时间】:2014-04-1519:13:53【问题描述】:我有一个包含图像的移动html页面。我想创建一个用于下载图像的按钮或链接。... 查看详情

为 Google Admin SDK 创建和设置自定义属性

】为GoogleAdminSDK创建和设置自定义属性【英文标题】:CreatingandsettingcustomattributesforGoogleAdminSDK【发布时间】:2019-01-1119:32:52【问题描述】:我一直在阅读thisdocumentation,了解如何为用户更新自定义属性。从它的写法来看,我似乎... 查看详情

可以使用 Xamarin 为原生 iOS 和 Android 应用程序创建客户端 sdk 吗?

】可以使用Xamarin为原生iOS和Android应用程序创建客户端sdk吗?【英文标题】:CanXamarinbeusetocreateclientsdksfornativeiOSandAndroidApps?【发布时间】:2016-09-2608:24:25【问题描述】:是否可以在Xamarin中为我们的SAAS产品创建一个sdk,以便在为IO... 查看详情

为移动应用程序创建 API - 身份验证和授权

】为移动应用程序创建API-身份验证和授权【英文标题】:CreatinganAPIformobileapplications-AuthenticationandAuthorization【发布时间】:2011-04-2704:56:21【问题描述】:概述我希望为我的应用程序创建一个(REST)API。最初/主要目的是供移动应用... 查看详情

获取 Facebook 用户信息并从中为 Android SDK 创建配置文件

】获取Facebook用户信息并从中为AndroidSDK创建配置文件【英文标题】:FetchingFacebookUserInfoandcreatingaProfilefromitforAndroidSDK【发布时间】:2014-05-1723:14:52【问题描述】:我希望我的Facebook登录按钮能够自动获取用户的Facebook信息并从中创... 查看详情

在飞镖(颤振)中为移动应用创建“签名区域”[关闭]

】在飞镖(颤振)中为移动应用创建“签名区域”[关闭]【英文标题】:Create`signaturearea`formobileappindart(flutter)[closed]【发布时间】:2018-02-2417:37:50【问题描述】:我想在移动应用中使用dart创建一个签名区域,例如Here!我尝试使用... 查看详情

为 Firebase(Firestore、Cloud Storage 等)创建跨 sdk 包装器

】为Firebase(Firestore、CloudStorage等)创建跨sdk包装器【英文标题】:Creatingacross-sdkwrapperforFirebase(Firestore,CloudStorage,andmore)【发布时间】:2021-05-2502:21:46【问题描述】:我目前正在尝试找到一种抽象,它可以让我运行Firebase产品(主... 查看详情

使用 PayPal 移动 SDK 的 iOS 构建错误

】使用PayPal移动SDK的iOS构建错误【英文标题】:iOSBuildErrorUsingPayPalMobileSDK【发布时间】:2016-07-1600:30:10【问题描述】:我有一个iOS应用程序,它直接引用AWSMobile框架和使用CocoaPods的几个其他库。该项目构建良好,我能够毫无问题... 查看详情