深度链接

 

1. 深度链接功能介绍
1.1 链接目标 — 跳转到哪儿?
1.2 链接触发点 — 从哪儿发起跳转?

2. 功能接入
2.1 预先配置的深度链接
2.2 动态深度链接
2.3 处理链接到游戏中的深度链接

1. 深度链接功能介绍

KTplay的深度链接功能,主要用于实现社区、游戏、网站等不同功能模块之间的快速跳转。

1.1 链接目标 — 跳转到哪儿?

链接目标是指所有可以跳转到的位置,主要包括:

  • KTplay社区 (KTRL)

    KTplay可跳转位置,即社区子页面如话题列表,收件箱,专题等。

    KTplay已定义好所有可跳转页面,创建链接时直接选择即可。

    触发链接时,SDK直接打开对应的社区页面。

  • 游戏 (GRL)

    游戏可跳转位置,即游戏的不同场景如主菜单,商店,设置等。

    你需要事先定义好所有位置名称,命名规则可自己定义,如game.menu代表游戏主菜单,game.store代表游戏商店。

    触发链接时,SDK将位置名称回调给游戏,游戏需要根据位置名称(如game.store)跳转到相应的位置。

  • 网站 (URL)

    位置即具体的网址。

    触发链接时,SDK会打开对应的网页(使用外部浏览器)

除了链接位置的名称,你还可以通过附加参数,跳转到更具体的位置,或展示更细节的内容。

  • KTplay社区

    根据不同的页面提供不同的参数选择,如发布话题页面支持设置话题分类,预置标题,预置内容。

  • 游戏

    参数可附加在你的命名规则中,如你的游戏商店共有8个商品,可以使用game.store.3代表第3个商品。

1.2 链接触发点 — 从哪儿发起跳转?

链接触发点即发起链接的位置,可理解为链接入口或载体。

  • KTplay社区

    KTplay目前支持在通知和话题中附带深度链接

  • 游戏

    游戏的链接触发点,可以是一个具体的按钮,也可以是游戏的某类事件如关卡结束。

2. 功能接入

你可以通过两种方法使用深度链接: 预先配置的深度链接 动态深度链接

2.1 预先配置的深度链接

深度链接需要在KTplay后台预先定义,KTplay后台会为每个深度链接生成唯一ID, 接入SDK时依据ID打开对应的链接内容。
好处是接入完成后,深度链接的内容可以根据需要在后台作调整,不需要更新游戏。

第1步 设计深度链接触发点

接入具体功能之前,你需要根据具体需求设计好深度链接触发点(在哪些地方放置深度链接)。

第2步 创建深度链接并导出配置

SDK通过深度链接ID来标识一个具体的链接,在游戏上线之前,你需要在开发者后台创建好所有使用到的深度链接,并导出链接ID供代码接入使用。

  • 打开应用设置-深度链接,创建新的深度链接。
  • 导出深度链接配置,配置包括包含链接ID、名称、描述和类型。

第3步 添加打开深度链接代码

在每个深度链接入口添加代码,打开对应的深度链接。

String deeplinkId = "KTRL.1472120161";
KTPlay.openDeepLink(deeplinkId);

NSString* deeplinkId = @"KTRL.1472120161";
[KTPlay openDeepLink: deeplinkId];

String deeplinkId = "KTRL.1472120161";
KTPlayC::openDeepLink(deeplinkId);

string deeplinkId = "KTRL.1472120161";
KTPlay.OpenDeepLink(deeplinkId);

2.2 动态深度链接

有些链接内容无法预先定义,只有在运行时才能获得(比如一场战斗的回放ID),使用动态深度链接可解决此类问题。
动态深度链接不需要在后台预先定义,接入时根据需要实时组织链接内容。

使用下面的格式来定义动态链接内容。
scheme://path?parametersString

  • scheme . 链接协议,用来标识链接的类型,目前支持:
    • ktplay : 链接到KTplay资源,比如打开社区某个页面,KTplay所有可链接资源可 参考这里
    • game : 链接到游戏,用户触发链接时,SDK会将“//”之后的所有内容回调给游戏
    • 其他 : 以上所列scheme之外的内容,都会被认为是网站链接,用户触发链接时,SDK会调起打开网站流程。
  • path : 目标资源路径
  • parametersString : 参数。格式要求与标准URL中的参数相同,参数的名字与值之间用=分隔,不同参数之间使用&分隔,部分参数的值需要做URLEncode ( 参考这里 )。如果参数的值本身又是一个包含多个的对象

示例(打开与游戏ID为952780的用户聊天窗口)
ktplay://chat/message?game_user_id=952780

2.2.1 功能接入

第1步. 设计深度链接触发点

根据需求设计深度链接触发点(在哪些地方放置深度链接入口)。

第2步. 生成深度链接内容

附加深度链接所需参数,生成最终的链接内容。

第3步. 打开深度链接

游戏代码中需要打开深度链接的地方,调用openDeeplink方法。

String deeplinkSchema = "ktplay://chat/message?game_user_id=952780";
KTPlay.openDeepLink(deeplinkSchema);

NSString* deeplinkSchema = @"ktplay://chat/message?game_user_id=952780";
[KTPlay openDeepLink: deeplinkSchema];

String deeplinkSchema = "ktplay://chat/message?game_user_id=952780";
KTPlayC::openDeepLink(deeplinkSchema);

string deeplinkSchema = "ktplay://chat/message?game_user_id=952780";
KTPlay.OpenDeepLink(deeplinkSchema);

2.2.2 示例 - 使用深度链接发布话题

本示例要实现下列功能:

  • 游戏有战斗回放功能;
  • 玩家结束战斗时,可选择分享战斗回放到社区;
  • 其他玩家查看该话题时,可以选择查看战斗回放,打开对应的战斗回放;
第1步. 确定要链接的页面

要实现发话题功能,需要打开KTplay社区的发话题页面,查看 KTplay可链接资源 可确定对应的路径为 topic/creation

ktplay://topic/creation

第2步. 追加基础参数

假设发话题时预置标题和文本内容

title=分享战斗
text=我完成了一场战斗

根据参数要求,title和text的值需要做URL Encode:

title=%e5%88%86%e4%ba%ab%e6%88%98%e6%96%97
text=%e6%88%91%e5%ae%8c%e6%88%90%e4%ba%86%e4%b8%80%e5%9c%ba%e6%88%98%e6%96%97

将参数追加到链接内容中:

ktplay://topic/creation?title=%e5%88%86%e4%ba%ab%e6%88%98%e6%96%97&text=%e6%88%91%e5%ae%8c%e6%88%90%e4%ba%86%e4%b8%80%e5%9c%ba%e6%88%98%e6%96%97

第3步. 追加action参数

发布话题支持action参数,action参数包含一个深度链接,以及该链接显示在话题中的样式配置。一旦话题包含action,用户查看该话题时会显示一个链接入口(目前为一个可点击的按钮),点击后触发对应的深度链接。
此示例中,我们需要设置一个链接回游戏的深度链接,从话题中链接回游戏的战斗回放界面。

game://replay?reply_id=xxx

action对象包含:

deeplink=game://replay?replay_id=1234
title=查看回放
icon=replay

根据参数要求,deeplink和title的值需要做URL Encode:

deeplink=game%3a%2f%2freplay%3freplay_id%3d1234
title=%e6%9f%a5%e7%9c%8b%e5%9b%9e%e6%94%be
icon=replay

使用URL参数的形式拼接action的内容:

deeplink=game%3a%2f%2freplay%3freplay_id%3d1234&title=%e6%9f%a5%e7%9c%8b%e5%9b%9e%e6%94%be&icon=replay

对拼接好的内容再做一次URL Encode:

deeplink%3dgame%253a%252f%252freplay%253freplay_id%253d1234%26title%3d%25e6%259f%25a5%25e7%259c%258b%25e5%259b%259e%25e6%2594%25be%26icon%3dreplay

将最终的action值追加到deeplink参数中:

ktplay://topic/creation?title=%e5%88%86%e4%ba%ab%e6%88%98%e6%96%97&text=%e6%88%91%e5%ae%8c%e6%88%90%e4%ba%86%e4%b8%80%e5%9c%ba%e6%88%98%e6%96%97&action=deeplink%3dgame%253a%252f%252freplay%253freplay_id%253d1234%26title%3d%25e6%259f%25a5%25e7%259c%258b%25e5%259b%259e%25e6%2594%25be%26icon%3dreplay

第4步. 打开Deeplink

在需要发布话题的地方调用打开上面生成的Deeplink即可,代码示例 参考这里

第5步. 游戏中处理Deeplink回调

当用户在话题中点击查看战斗回放时,SDK会将发话题时附带的链接内容回调给游戏,游戏解析出replay_id并打开对应的战斗回放。

replay?replay_id=1234
游戏接收深度链接回调的方法 参考这里

2.2.3 KTplay可链接资源

注意事项:

  • 未明确标明“可选”的参数,均为必须提供。
  • 如果使用网游帐号登录的方式,需要传入user_id的地方可用game_user_id替代(传入游戏的帐号ID),game_user_id需要做URL Encode。
  • 如果单个参数的值中包含多个属性(如发话题时的action),需要将不同属性根据URL参数格式拼接,再对拼接结果做一次URL Encode,具体可 参考样例
资源 路径 参数
首页 homepage  
精华话题 topics/recommended  
全部话题 topics/category category_id (可选)
视频话题 topics/videos  
关注人的话题 topics/following  
话题搜索 topics/search  
话题搜索结果 topics/search/result keyword (需要做URL Encode)
话题详情 topic topic_id
创建话题 topic/creation category_id (可选)
title (可选,需要做URL Encode)
text(可选,需要做URL Encode)
image_path: 图片文件地址(可选).
video_path: 视频文件地址(可选).
action: 深度链接结构(可选,action包含的参数定义 参考这里 )
举报话题 topic/report topic_id
待审核话题 topic/video/reviewing  
创建回复 reply/creation topic_id
text(可选,需要做URL Encode)
image_path: 图片文件地址(可选).
举报回复 reply/report reply_id
影响力排行-总榜 influencers/ranking  
影响力排行-今日榜 influencers/ranking/today  
专题列表 collections  
专题详情 collection collection_id
消息页 messagepage  
收件箱 inbox/message  
聊天会话 chat/message user_id或game_user_id
陌生人聊天消息 chat/message/stranger  
聊天黑名单 chat/user/blocked  
用户搜索 user/search  
用户搜索结果 user/search/result keyword(需要做URL Encode)
用户个人资料 user/profile user_id或game_user_id
用户的回复 user/replies user_id或game_user_id
用户收到的赞 user/likes/received user_id或game_user_id
用户的关注列表 user/following user_id或game_user_id
用户的粉丝列表 user/followers user_id或game_user_id
用户收藏话题 user/favorite user_id或game_user_id
举报用户 user/report user_id或game_user_id
我的跟人资料 me/profile  
我的话题 me/topics  
我的回复 me/replies  
我的通知 me/notifications  
我收到的赞 me/likes/received  
我的关注列表 me/following  
我的粉丝列表 me/followers  
我的草稿 me/drafts  
设置昵称 me/nickname/setting  
设置头像 me/avatar/setting  
帐号绑定 me/account/binding  
我的收藏 me/favorite  
设置个人背景图 me/background_image/setting  
设置个人签名 me/bio/setting  
设置页 settings  
KTPlay用户条款 ktplay/terms  
关于影响力 influence/about  
最近查看话题 topics/recently_viewed  
最近查看用户 users/recently_viewed  
登录 & 注册 authentication  
登录 authentication/login  
注册 authentication/register  
忘记密码 authentication/password/reset  
修改密码 authentication/password/setting  
关于Web社区 web/about  
排行榜列表 leaderboards  
排行榜详情 leaderboard leaderboard_id
发话题中action参数定义
参数 描述 必须提供 必须做URL Encode
deeplink 深度链接内容
title 深度链接描述
icon 深度链接图标样式。
目前提供replay,store,link三种样式可选择。
默认为link。

2.3 处理链接到游戏中的深度链接

如果深度链接类型为链接到游戏中(某个界面),则需要游戏配合实现具体的链接功能。当链接被触发时,SDK会将链接内容回调给游戏,游戏收到回调后,需解析链接内容并实现后续的链接流程。

KTPlay.setOnDeepLinkListener(new OnDeepLinkListener() {
            @Override
            public void onDeepLink(String deepLink) {
      Game::handleDeepLink(deepLink)
            }
        });

  [KTPlay setDeepLinkBlock:^(NSString *linkSchemas) {
  
      Game::handleDeepLink(linkScheme)

  }];

void deepLinkCallback (const char *linkSchemas){
    Game::handleDeepLink(linkScheme)
}

KTPlayC::setDeepLinkCallback(deepLinkCallback );

KTPlay.SetDeepLinkDelegate ((string linkScheme) => {
      handleDeepLink(linkScheme);
    
});
还有其它问题?提交请求

0 评论

登录写评论。