开发者可以通过创建深度链接来将用户转到应用中的特定页面。如果用户已在设备上安装您的应用,SE SDK 会转向链接中指定的页面。用户通过链接打开应用后,SDK 就可以读取深度链接数据了,具体步骤如下:
注:此方法仅适用于iOS和Android
查看 SolarEngine 后台配置
universal link 示例为:test1.link.solar-engine.com

URL Scheme 示例为:test1://
配置深度链接
iOS 设置深度连接
在native/engine/ios/CMakeLists.txt 中添加如下代码
// 找到这行
set(CC_ALL_SOURCES)
// 添加
list(APPEND CC_PROJ_SOURCES
${CMAKE_CURRENT_LIST_DIR}/SolarEngineSDK/iOS/SECocosCreatorProxyApi.h
${CMAKE_CURRENT_LIST_DIR}/SolarEngineSDK/iOS/SECocosCreatorProxyApi.mm
${CMAKE_CURRENT_LIST_DIR}/SolarEngineSDK/iOS/SECCAppDelegate.h
${CMAKE_CURRENT_LIST_DIR}/SolarEngineSDK/iOS/SECCAppDelegate.m
)
if(IOS)
# Supported for .framework
cs_neteaseyidun_append_string_property(${CC_TARGET_NAME} XCODE_ATTRIBUTE_FRAMEWORK_SEARCH_PATHS ${CMAKE_CURRENT_LIST_DIR}/SolarEngineSDK/iOS/Frameworks)
cs_neteaseyidun_append_string_property(${CC_TARGET_NAME} XCODE_ATTRIBUTE_OTHER_LDFLAGS "-ObjC -fprofile-instr-generate -lz -lc++")
target_link_libraries(${CC_TARGET_NAME} "-framework SolarEngineSDK")
target_link_libraries(${CC_TARGET_NAME} "-framework SESDKRemoteConfig")
target_link_libraries(${CC_TARGET_NAME} "-framework AdSupport")
target_link_libraries(${CC_TARGET_NAME} "-framework AdServices")
target_link_libraries(${CC_TARGET_NAME} "-framework Security")
target_link_libraries(${CC_TARGET_NAME} "-framework CoreTelephony")
# deeplink
set_target_properties(${CC_TARGET_NAME} PROPERTIES
# URL Scheme
MACOSX_BUNDLE_INFO_PLIST "${CMAKE_CURRENT_SOURCE_DIR}/Info.plist"
# universal link
XCODE_ATTRIBUTE_CODE_SIGN_STYLE "Automatic" # Automatic表示打包使用自动签名
XCODE_ATTRIBUTE_DEVELOPMENT_TEAM "你开发者账号的TeamID"
XCODE_ATTRIBUTE_CODE_SIGN_ENTITLEMENTS "${CMAKE_CURRENT_SOURCE_DIR}/SolarEgine.entitlements"
)
endif()
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
....
// deeplink-start
<key>CFBundleURLTypes</key>
<array>
<dict>
<key>CFBundleTypeRole</key>
<string>Editor</string>
<key>CFBundleURLName</key>
<string>solarengine</string>
<key>CFBundleURLSchemes</key>
<array>
<string>test1</string>
</array>
</dict>
</array>
// deeplink-end
</dict>
</plist>
添加后CocosCreator重新导出 iOS工程后能看到如下URL Types
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>com.apple.developer.associated-domains</key>
<array>
<string>applinks:test1.link.solar-engine.com</string>
<string>applinks:pro-test1.link.solar-engine.com</string>
</array>
</dict>
</plist>
Android 设置深度连接
开发者可以通过创建深度链接来将用户转到应用中的特定页面。如果用户已在设备上安装您的应用,SE SDK 会转向链接中指定的页面。用户通过链接打开应用后,SDK 就可以读取深度链接数据了,具体步骤如下:
1.1 配置 URI Scheme
配置 AndroidManifest.xml
文件位置:native/engine/android/app/AndroidManifest.xm
如果用户已经安装了您的应用,那么在与包含深度链接信息的链接互动时,应用就会打开。SE SDK 能够解析深度链接信息,在应用中使用。要设置深度链接,请选择一个唯一的 Scheme 名称 。
开发者可以进行设置,在用户与深度链接互动时启动特定活动。为此请进行下列操作:
- 在您的
AndroidManifest.xml
文件中为活动指定 Scheme 名称 。 - 向活动定义添加一个
intent-filter
节点。 - 在
intent-filter
节点中添加一个包含 Scheme 名称的android:scheme
数据节点。
以下示例展示了如何在AndroidManifest.xml文件中设置名为 AppActivity 的活动,并以 Scheme 名称 sedemo 将其打开。
示例如下
<activity
android:name="com.cocos.game.AppActivity">
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="sedemo" />
</intent-filter>
</activity>
如果用户点击了如下连接,且该参数中包含您的 Scheme 名称 ,并且定义了其接受 URL Scheme 协议格式为scheme://yourhost:port/path
,那么活动就会触发。
示例 :sedemo://lionmobo.com/goods_detail?param1=value1¶m2=value2
接收深度链接信息
开发者需要在 AppActivity 的 onCreate
或 onNewIntent
方法,传递活动 intent 对象中的深度连接信息应用启动,且上述方法之一被调用后,您就可以读取深度链接内容了。然后您可以在应用的其他位置访问这些信息。
在 onCreate
或 onNewIntent
方法中调用 getData()
方法,以提取深度链接信息。
通过 onNewIntent 方法:
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
Uri data = intent.getData();
// data.toString() -> deeplink具体信息.
}
通过 onCreate 方法:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Intent intent = getIntent();
Uri data = intent.getData();
// data.toString() -> deeplink具体信息.
}
1.2 配置App Links
根据App Links的官方定义,App Links是一种特殊的DeepLink(与URL Scheme调起App的实现方式不同),当点击你的网站链接的时候能够调起你的App,不出现选择界面, 也不会出现类似URL Scheme的重复问题,此种方式不支持在浏览器中调起
检查 assetlinks.json
在浏览器中输入https://{domain}/.well-known/assetlinks.json
, 查看是否能正常下载assetlinks.json文件
其中,domain是您再SE后台配置好的域名,如:tlink.solar-engine.com
[{
"relation": ["delegate_permission/common.handle_all_urls"],
"target": {
"namespace": "android_app",
"package_name": "开发者应用唯一包名",
"sha256_cert_fingerprints":
["开发者应用的sha256_cert_fingerprints"]
}
}]
配置 AndroidManifest.xml
<activity
android:name=".activity.SplashActivity">
<intent-filter>
<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"
android:host="开发者在SE后台配置的域名"
android:pathPattern="开发者在SE后台配置的路径地址" />
</intent-filter>
</activity>
1.3 通过深度链接进行再归因
public void appDeeplinkOpenURI(Uri uri);
调用示例:
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
Uri data = intent.getData();
if(data != null) {
SolarEngineManager.getInstance().appDeeplinkOpenURI(data);
}
}
设置 deeplink 链接监听 (需要在SDK 初始化之前调用)
设置deeplink监听在cocos项目中设置
调用示例:
solarengine.deeplinkCallback((result) => {
let code = result.code
if (code == 0) {
console.log("deeplinkCallback success ...")
let data = result.data
console.log(JSON.stringify(data))
} else {
console.log("deeplinkCallback fail ...")
console.log(code)
}
})
let appkey = ""
solarengine.preInitSDK(appkey)
let config = {
"logEnabled": true
};
solarengine.initSDK(appkey, config)
deeplink data 类参数详解:
参数名称 | 参数含义 | 参数类型 |
sedpLink | 跳转参数 | String |
turlId | 7位短链 | String |
from | 链接类型 | String |
customParams | 自定义参数 | Map<String,Object> |
errorCode 错误码:
错误码 | code码释义 |
0 | 成功 |
1 | URI 为空 |
2 | URI 非法 |