nativeScript-adobe-marketing-cloud
Nativescript Adobe Marketing Cloud 集成插件
npm i --save nativescript-adobe-marketing-cloud

Nativescript Adobe Marketing Cloud 解决方案插件

npm version

npm install nativescript-adobe-marketing-cloud --save

基于

  • https://github.com/Adobe-Marketing-Cloud/mobile-services/releases/tag/v4.13.4-iOS
  • https://github.com/Adobe-Marketing-Cloud/mobile-services/releases/tag/v4.13.4-Android

设置应用程序以使用此插件。

设置生命周期跟踪

监听生命周期事件

import * as application from "application";
import {AdobeAnalytics} from "nativescript-adobe-marketing-cloud";

application.on(application.launchEvent, function (args: application.ApplicationEventData) {
if (args.android) {
AdobeAnalytics.getInstance().setContext(application.android.context);
} else if (args.ios !== undefined) {
AdobeAnalytics.getInstance().collectLifecycleData(null);
}
});

application.on(application.suspendEvent, function (args: application.ApplicationEventData) {
if (args.android) {
AdobeAnalytics.getInstance().pauseCollectingLifecycleData();
}
});

application.on(application.resumeEvent, function (args: application.ApplicationEventData) {
if (args.android) {
AdobeAnalytics.getInstance().collectLifecycleData(application.android.foregroundActivity);
}
});

if (application.android) {
application.android.on(application.AndroidApplication.activityPausedEvent, function (args: application.AndroidActivityEventData) {
AdobeAnalytics.getInstance().pauseCollectingLifecycleData();
});

application.android.on(application.AndroidApplication.activityResumedEvent, function (args: application.AndroidActivityEventData) {
AdobeAnalytics.getInstance().collectLifecycleData(application.android.foregroundActivity);
});
}

application.start({ moduleName: "main-page" });

设置 ADBMobileConfig.json

从 Adobe 控制面板获取配置文件。

iOS

ADBMobileConfig.json 文件放置在 app\App_Resources\iOS

Android

adbmobileconfig.json 文件放置在 app\App_Resources\Android\raw

跟踪状态和操作

状态和操作可以通过与它们的本地对应者签名匹配的方法调用进行追踪。

隐私选项

见:https://marketing.adobe.com/resources/help/en_US/mobile/ios/privacy.html

选择隐私选项

直到用户选择退出前发送数据

AdobeAnalytics.getInstance().optIn();

直到用户选择加入前保留数据

AdobeAnalytics.getInstance().optOut();

在应用程序和移动网页之间的访客跟踪

见:https://marketing.adobe.com/resources/help/en_US/mobile/ios/hybrid_app.html 您可以调用

AdobeAnalytics.getInstance().visitorAppendToURL(url);

这将返回一个带有访客ID扩展的提供的url。

开发设置

为了便于开发和调试,请继续以下步骤

  1. 打开命令提示符/终端,导航到 src 文件夹并运行 npm run demo.iosnpm run demo.android 以运行演示。
  2. 打开另一个命令提示符/终端,导航到 src 文件夹并运行 npm run plugin.tscwatch 以监视插件中的文件更改。

现在去修改您的插件。它将被自动应用到演示项目中。

注意:如果您需要在插件中使用原生库或在 Info.plist/AndroidManifest.xml 中进行更改,这些更改只能通过 npm link 应用到演示项目。在这种情况下,您需要从 demo 中使用 tns plugin add ../src,以便将原生库和上述文件中的更改应用到演示中。然后您可以从 src 中再次使用 npm run plugin.link 将插件代码链接到演示中。

链接到 CocoaPod 或 Android Arsenal 插件

为了使用原生 API,您需要在 src 文件夹中创建以下文件夹和文件

platforms --
ios --
Podfile
android --
include.gradle

这样做将为您的插件打开这些原生 API :)

请查看这些现有插件以了解如何简单完成此操作

清理插件和演示文件

有时您可能需要删除 node_modulesdemo/platforms 文件夹以重新安装它们。

  • 运行 npm run clean 删除这些文件,然后您可以运行 npm i 以重新安装依赖项。

有时您只需要删除演示的 platforms 目录

  • 运行 npm run demo.reset 仅删除演示的 platforms 目录。

有时您可能需要确保插件文件在演示中已更新

  • 运行 npm run plugin.prepare 将重新构建插件,然后将其从演示中删除并重新添加以确保。

单元测试

插件种子自动将基于 Jasmine 的单元测试支持添加到您的插件中。打开 demo/app/tests/tests.js 并调整其内容,以便测试在您插件的上下文中变得有意义。

您可以在 这里 了解更多关于这个主题的信息。

一旦您准备好测试插件 API,请转到 src 文件夹并执行以下命令之一

npm run test.ios
npm run test.android

发布到 NPM

当您准备发布所有内容时

  • src/package.json 中提升版本号
  • 转到 publish 并执行 publish.sh(如果文件不可执行,请运行 chmod +x *.sh

如果您只想创建一个包,请转到 publish 文件夹并执行 pack.sh。包将创建在 publish/package 文件夹中。

注意:要在 Windows 上运行 bash 脚本,您可以安装 GIT SCM 并使用 Git Bash。

TravisCI

插件结构附带一个完全功能的 .travis.yml 文件,该文件在 Android 模拟器和 iOS 模拟器上部署测试应用程序,并作为后续步骤在 单元测试部分 运行测试。在克隆存储库并实现您的插件和测试之后,您只需在 https://travis-ci.org/ 上注册。然后,在 "https://travis-ci.org/profile/<您的 GitHub 用户>" 上启用您的插件存储库,这样就完成了。下次有人提交 PR 或更改到分支时,TravisCI 将触发构建以测试代码。

为了正确显示当前构建状态,您需要编辑 README.md 文件开头的徽章,使其与您的存储库、用户和分支匹配。

在插件中引用 tns-core-modules

由于 Angular CLI 中存在一个问题,我们建议使用完整的 tns-core-modules 导入。有关更详细的解释,请参阅 此讨论

最终,当 Angular CLI 中的问题得到解决后,这不再是一个限制,但在此之前,建议的方法是从 tns-core-modules 使用完整路径进行导入。以下是一个示例

错误

tsconfig.json

...

"paths": {
"*": [
"./node_modules/*",
"./node_modules/tns-core-modules/*"
]
}
...

yourplugin.common.ts

import * as app from 'application';

正确

yourplugin.common.ts

import * as app from 'tns-core-modules/application';