AigensSdkCore
Aigens SDK 允许原生 iOS/Android 应用将 Aigens 通用的 UX 嵌入到该应用中。
要求
- IOS - Swift 4.2+ , iOS 12+
- Android - API Level 22+, Android 9+
安装指南
AigensSdkCore 通过 CocoaPods 提供。要安装它,只需将以下行添加到您的 Podfile 中
初始化 pod 文件,如果尚未启用
pod init
将 AigensSdkCore 添加到 Podfile 中
pod 'AigensSdkCore', '0.0.30'
# If have applepay
pod 'AigensSdkApplepay', '0.0.8'
运行 pod install 下载依赖。
pod install
根据功能需求,在 "Info.plist" 中添加所需的权限。
#GPS Feature
- NSLocationAlwaysUsageDescription (Privacy - Location Always Usage Description)
- NSLocationWhenInUseUsageDescription (Privacy - Location When In Use Usage Description)
#Camera Feature
- NSCameraUsageDescription (Privacy - Camera Usage Description)
- NSPhotoLibraryAddUsageDescription (Privacy - Photo Library Additions Usage Description)
- NSPhotoLibraryUsageDescription (Privacy - Photo Library Usage Description)
# add schemes in info.plist
<key>LSApplicationQueriesSchemes</key>
<array>
<string>weixinULAPI</string>
<string>weixin</string>
<string>octopus</string>
<string>wechat</string>
<string>hsbcpaymepay</string>
<string>alipay</string>
<string>alipays</string>
<string>alipayhk</string>
<string>mpay</string>
</array>
Android 安装
请确保 "settings.gradle" 配置文件中包含了 jcenter() 仓库。较新版本的 Android 项目可能不会自动包含此仓库。
repositories {
google()
mavenCentral()
jcenter()
}
在 "build.gradle" 中包含 aigens-sdk-core 依赖。
dependencies {
implementation 'com.aigens:aigens-sdk-core:0.0.27'
# If have googlepay
implementation 'com.aigens:aigens-sdk-googlepay:0.0.6'
}
在 "AndroidManifest.xml" 中包含 activity。
根据功能需求在 "AndroidManifest.xml" 中添加所需的权限。
<manifest>
<application>
<activity
android:name="com.aigens.sdk.WebContainerActivity"
android:screenOrientation="portrait"
android:exported="true"
android:launchMode="singleTask"
>
<!-- 1. android:autoVerify="true" -->
<!-- 2. <data android:scheme="https" /> -->
<!-- 3. <data android:host="domain.name" android:pathPrefix="/toapp" /> -->
<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="https" />
<data android:host="domain.name" android:pathPrefix="/toapp" />
</intent-filter>
</activity>
<meta-data
android:name="com.google.android.gms.walletapi.enabled"
android:value="true" />
</application>
<queries>
<package android:name="com.tencent.mm" />
<package android:name="com.octopuscards.nfc_reader" />
<package android:name="hk.com.hsbc.paymefromhsbc" />
<package android:name="com.macaupass.rechargeEasy" />
<package android:name="hk.alipay.wallet" />
<package android:name="com.eg.android.AlipayGphone" />
</queries>
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-feature android:name="android.hardware.location.gps" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.CAMERA" />
</manifest>
IOS 示例
示例项目:[Aigens Technology/AigensSdkDemo](https://github.com/AigensTechnology/AigensSdkDemo)
SDK 会打开一个用于 Web UI 的 URL。这个 URL 可以是预定义的 URL 或来自 QR 码的扫描。开发者可以使用扫描仪获取 URL,并使用以下代码在原生应用中打开 UI。
- AppDelegate.m
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options
{
[[NSNotificationCenter defaultCenter] postNotificationName:@"CapacitorOpenURLNotification" object:[NSDictionary dictionaryWithObject: url forKey:@"url"]];
return YES;
}
- (BOOL)application:(UIApplication *)application willContinueUserActivityWithType:(NSString *)userActivityType {
return YES;
}
- (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray *restorableObjects))restorationHandler {
[[NSNotificationCenter defaultCenter] postNotificationName:@"CapacitorOpenUniversalLinkNotification" object:[NSDictionary dictionaryWithObject: userActivity.webpageURL forKey:@"url"]];
return YES;
}
- AppDelegate.swift
import Capacitor
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey: Any] = [:]) -> Bool {
return ApplicationDelegateProxy.shared.application(app, open: url, options: options)
}
func application(_ application: UIApplication, willContinueUserActivityWithType userActivityType: String) -> Bool {
return true
}
func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([Any]?) -> Void) -> Bool {
return ApplicationDelegateProxy.shared.application(application, continue: userActivity, restorationHandler: restorationHandler)
}
}
import UIKit
import Foundation
import aigens_sdk_core
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
}
@IBAction func openClicked(_ sender: Any) {
let url = "https://scantest.aigens.com/scan?code=c3RvcmU9NTAwJnNwb3Q9MSZwYWdlPWJ5b2Q="
let bridgeVC = WebContainerViewController()
var options = [String: Any]()
options["url"] = url
let member:Dictionary<String, Any> = [
"memberCode" : "<crmMemberId>",
"source" : "<merchant>",
"sessionId" : "<sessionId>",
"pushId": "<applePushToken>",
"deviceId": "<deviceId>",
"universalLink": "<start with https://xxxx>",
"appleMerchantId": "<YourAppleMerchantId>",
"language": "en" // en/zh
]
let deeplink:Dictionary<String, Any> = [
"addItemId" : "<itemId>",
"addDiscountCode" : "<discountCode>",
"addOfferId" : "<offerId>"
]
options["member"] = member
options["deeplink"] = deeplink
options["debug"] = isUat ? true : false;
bridgeVC.options = options
bridgeVC.modalPresentationStyle = .fullScreen
self.present(bridgeVC, animated: true)
}
}
Android 示例
示例项目:[Aigens Technology/AigensSdkDemo](https://github.com/AigensTechnology/AigensSdkDemo)
import com.aigens.sdk.WebContainerActivity;
//...
private void openUrl(){
Activity activity = this;
Intent intent = new Intent(activity, WebContainerActivity.class);
String url = "https://scantest.aigens.com/scan?code=c3RvcmU9NTAwJnNwb3Q9MSZwYWdlPWJ5b2Q=";
intent.putExtra("url", url);
Map<String, String> member = new HashMap<String, String>();
member.put("memberCode", "<crmMemberId>");
member.put("source", "<merchant>");
member.put("sessionId", "<sessionId>");
member.put("pushId", "<googlePushToken>");
member.put("deviceId", "<deviceId>");
member.put("language", "en"); // en / zh
// from : <data android:scheme="https" />
// <data android:host="domain.name" android:pathPrefix="/toapp" />
member.put("universalLink", "https://xxx.xx.com/toapp");
Map<String, String> deeplink = new HashMap<String, String>();
deeplink.put("addItemId", "<itemId>");
deeplink.put("addDiscountCode", "<discountCode>");
deeplink.put("addOfferId", "<offerId>");
intent.putExtra("member", (Serializable) member);
intent.putExtra("deeplink", (Serializable) deeplink);
intent.putExtra("debug", isUat ? true : false);
intent.putExtra("ENVIRONMENT_PRODUCTION", true);
// intent.putExtra("ENVIRONMENT_PRODUCTION", false);
activity.startActivity(intent);
}
会员数据
可选地,传递一个会员对象以实现自动登录客户。
会员数据
- memberCode - 会员在 CRM 后端中的唯一标识符
- source - 表示会员所属品牌名称的商家品牌字符串
- sessionId - 会员用于 CRM 访问的当前会话密钥
- pushId - 提供与Google推送服务注册的推送令牌。您可以不为匿名用户设置pushId而无需其他成员详细信息。
- deviceId - 每个设备都是唯一的,每个设备具有相同的值。
- universalLink - 使用它来返回应用。
- appleMerchantId - 如果有applepay则需要设置。
- 语言 - en/zh
深度链接数据
- addItemId - 用户导航到订单页面时要添加的项目。
- addDiscountCode - 要自动添加的折扣码。
- addOfferId - 用户结账时应用属于用户的相关优惠。
ENVIRONMENT_PRODUCTION
- 默认: true,为Google Pay设置环境
插件
待定
作者
爱因思科技有限公司
请联系相应的项目经理以获得更多支持。
许可
Aigens SDK适用于具有有效订阅的商户。