前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >【Unity游戏开发】不接SDK也能在游戏内拉起加QQ群操作?

【Unity游戏开发】不接SDK也能在游戏内拉起加QQ群操作?

作者头像
马三小伙儿
发布于 2019-07-30 06:55:44
发布于 2019-07-30 06:55:44
1.9K00
代码可运行
举报
运行总次数:0
代码可运行

一、引子

  一般在游戏进行对外测试的时候都会有一个玩家QQ群,方便玩家反馈问题、交流游戏心得等。那么为了增加玩家加QQ群的欲望,可能会在游戏里面设计一个小功能,点击一下可以直接拉起手Q加群的操作,加了QQ群以后,也会自动下发一些小奖励刺激玩家。原本我以为要拉起手Q加QQ群的操作一定要接入相关平台的SDK才行,直到我详细地阅读了下腾讯官网的QQ群官方主页,我才了解到在游戏内拉起手Q发起加群的操作是如此的简单,根本不需要接入任何第三方SDK,只需短短几行代码即可轻松实现。闲言少叙,书归正文,咱们马上就开始实际操作一下。

二、解决方案

1.Android端的工作

  在腾讯官网的QQ群官方主页,我们可以直接看到官方已经为我们提供好了Android相关的代码,直接复制出来并集成到我们游戏项目对应的Android工程中就可以使用了。如果是使用Internal打包方式的话,可以在Eclispe编写Java的相关代码,然后打成jar包供Unity端调用。如果是使用Gradle方式的话,可以在项目导出AndroidStudio工程的过程中,自动化添加进这一段代码。关于使用Gradle方式进行非侵入式SDK接入打包,马三有在工作中有了一些新的心得体会,会在以后博客中讲解一下。(妈的这小子又挖坑,不会过段时间又太监了吧)

图1:QQ群官网Android端代码

  在你的Java代码中添加以下代码即可,key不要写死在Java代码中,最好由Unity调用端传入:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 1 /****************
 2      *
 3      * 发起添加群流程。群号:ColaFramework交流群(421527940) 的 key 为: xxxxxxxxx
 4      * 调用 joinQQGroup(xxxxxxxxx) 即可发起手Q客户端申请加群 ColaFramework交流群(421527940)
 5      *
 6      * @param key 由官网生成的key
 7      * @return 返回true表示呼起手Q成功,返回fals表示呼起失败
 8      ******************/
 9     public boolean joinQQGroup(String key) {
10         Intent intent = new Intent();
11         intent.setData(Uri.parse("mqqopensdkapi://bizAgent/qm/qr?url=http%3A%2F%2Fqm.qq.com%2Fcgi-bin%2Fqm%2Fqr%3Ffrom%3Dapp%26p%3Dandroid%26k%3D" + key));
12         // 此Flag可根据具体产品需要自定义,如设置,则在加群界面按返回,返回手Q主界面,不设置,按返回会返回到呼起产品界面    //intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
13         try {
14             startActivity(intent);
15             return true;
16         } catch (Exception e) {
17             // 未安装手Q或安装的版本不支持
18             return false;
19         }
20     }

  至此我们Android端所需要做的工作就完成了,是不是超级方便哈~几乎啥也没干,蛤蛤。  

2.iOS端的工作

  再来看看我们需要在iOS端做些什么?其实跟Android端的工作大同小异,主要还是提供一个接口给Unity端调用。在腾讯官网的QQ群官方主页,官方也同样为我们提供好了iOS相关的代码,不过这些代码要在Unity上使用的话,还需要小小地改造和封装一下。轻轻点亮一个赞,咱们下面马上就现场教学,教大家怎么处理一下:

图2:QQ群官网 iOS端代码

在Unity工程对应的iOS工程中的UnityAppController.mm中添加以下的代码就可以了。相较于Android,iOS上面还需要多传入一个uid参数。而且Unity端这边传过来的是const char *类型的字符串指针,我们需要将其转换成 NSString 以便供API调用。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 1     extern "C" BOOL iOSJoinQQGroup(const char* rawKey,const char* rawUid){
 2         NSString * key = [NSString stringWithUTF8String:rawKey];
 3         NSString * uid = [NSString stringWithUTF8String:rawUid];
 4         NSString *urlStr = [NSString stringWithFormat:@"mqqapi://card/show_pslcard?src_type=internal&version=1&uin=%@&key=%@&card_type=group&source=external", uid,key];
 5         NSURL *url = [NSURL URLWithString:urlStr];
 6         if([[UIApplication sharedApplication] canOpenURL:url]){
 7         [[UIApplication sharedApplication] openURL:url];
 8             return YES;
 9         }
10     else return NO;
11     }

  至此,我们在iOS端需要做的工作也完成了,下一步就是在Unity中去调用这些接口了。

3.Unity端的工作

  简单地搭建一个模拟游戏中加群的界面,有一个二维码和一键加群按钮,我们期待的是玩家在游戏里面点击按钮就可以直接加入QQ群。

  对应的C#代码如下,就是一些简单的封装与Unity和Android、iOS端通信交互的基本操作,如果对这块不太了解的话,可以看马三之前的博客《【Unity游戏开发】SDK接入与集成——小白入门篇》。值得注意的是,我们需要处理好不同平台下调用的问题,加入必要的平台宏判断,在Unity编辑器下运行的这种情况也要考虑进去。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 1 using System.Collections;
 2 using System.Collections.Generic;
 3 using System.Runtime.InteropServices;
 4 using UnityEngine;
 5 using UnityEngine.UI;
 6 
 7 public class MyScript : MonoBehaviour
 8 {
 9 
10     private static readonly string AndroidKey = "YouAndroidQQGroupKey";
11 
12     private static readonly string iOSUid = "YouiOSUid";
13     private static readonly string iOSKey = "YouiOSQQGroupKey";
14 
15     private AndroidJavaClass _jc;
16     private AndroidJavaObject _jo;
17 
18     // Use this for initialization
19     void Start()
20     {
21         _jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
22         _jo = _jc.GetStatic<AndroidJavaObject>("currentActivity");
23 
24         var btnObj = this.transform.Find("BtnQQ");
25         var button = btnObj.GetComponent<Button>();
26         button.onClick.AddListener(OnClick);
27     }
28 
29     private void OnClick()
30     {
31         bool result = JoinQQGroup();
32         if (result)
33         {
34             //TODO 你的业务逻辑
35         }
36         else
37         {
38             Debug.LogWarning("未安装手Q或者版本不支持!");
39         }
40     }
41 
42     /// <summary>
43     /// 加入QQ群的方法,有返回值,代表成功或者失败
44     /// </summary>
45     /// <returns></returns>
46     private bool JoinQQGroup()
47     {
48 #if !UNITY_EDITOR && UNITY_ANDROID
49         return CallAndroidMethod<bool>("joinQQGroup", AndroidKey);
50 #elif !UNITY_EIDTOR && UNITY_IOS
51         return iOSJoinQQGroup(iOSKey, iOSUid);
52 #else
53         return false;
54 #endif
55     }
56 
57     /// <summary>
58     /// 调用一个带有返回值的原生Android方法
59     /// </summary>
60     /// <typeparam name="ReturnType"></typeparam>
61     /// <param name="method"></param>
62     /// <param name="args"></param>
63     /// <returns></returns>
64     private ReturnType CallAndroidMethod<ReturnType>(string method, params object[] args)
65     {
66 #if !UNITY_EDITOR && UNITY_ANDROID
67         return _jo.Call<ReturnType>(method, args);
68 #endif
69         return default(ReturnType);
70     }
71 
72     //iOS方法导入
73 #if !UNITY_EDITOR && UNITY_IOS
74     [DllImport("__Internal")]
75     private static extern bool iOSJoinQQGroup(string key, string uid);
76 #endif
77 
78 }

  Android和iOS的效果马三就不单独打包展示了,感兴趣的话,大家可以自己打包测试一下。

三、总结

  在本篇博客中,马三和大家一起学习了如何实现在不接SDK的情况在手机上拉起手Q加群。在开发工作中,有些问题可能并没有我们想象中的那么复杂,进行功能开发之前多阅读一下官方文档、收集下相关资料,说不定就会有更加简单优雅的解决方案。

  本篇博客中的项目代码已经同步至Github,欢迎Fork! https://github.com/XINCGer/Unity3DTraining/tree/master/SDK/PullUpQQGroupDemo

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019-07-28 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
车联网安全入门——ICSim模拟器使用
🚀🚀最近对于车联网安全非常有兴趣,但是不知道怎么入门,无意间发现了ICSim,可以用来简单模拟一下汽车,学习了一段时间后决定写一下笔记,怕自己学完就忘记了(仅供学习参考)。
小点点
2024/06/04
3390
车联网安全入门——ICSim模拟器使用
【Linux】SocketCAN设备调试与开发(模拟器)
大家都知道,车辆底盘系统是通过CAN进行通信的,而常见的有USB-CAN和SocketCAN两种,前者是通过USB口接入PC的,代表的有周立功、创芯等(较便宜),后者是通过网口接入PC的,代表的有Kvaser。
DevFrank
2024/07/24
5950
基于 CAN 总线操作汽车仪表盘模拟器实用指南
最近在外文博客看了相关的系列文章,学习结束后决定翻译整理做一个笔记,整理笔记的过程中曾试图放弃,阅读实践半小时,整理笔记用几天,以后再慢慢培养整理笔记的技能吧。
信安之路
2020/07/16
5.8K1
基于 CAN 总线操作汽车仪表盘模拟器实用指南
CAN总线安全之ICSim模拟器
最近越来越多的人开始关注车联网安全(可能是传统安全实在太卷),在各种会议中也能看到不少车联网安全相关的议题。其中很重要的一部分就是车载通信安全,而在各种车载通信协议中,使用的最多的就是CAN总线,本章介绍CAN模拟器ICSim的安装和使用。
九筒网络安全研究社
2023/10/12
1.3K0
世界智能驾驶挑战赛信息安全组——新人扫盲
0x00前言 感谢天津市人民政府与国家发展和改革委员会、科学技术部、工业和信息化部、国家互联网信息办公室、中国科学院、中国工程院、中国汽车技术研究中心、XCTF联赛组委会、永信至诚i春秋,我们ChaM
ChaMd5安全团队
2018/03/29
8520
世界智能驾驶挑战赛信息安全组——新人扫盲
车联网安全入门——CAN总线逆向(ICSim)
🚀🚀最近对于车联网安全非常有兴趣,但是不知道怎么入门,无意间发现了ICSim,可以用来简单模拟一下汽车,学习了一段时间后决定写一下笔记,怕自己学完就忘记了(仅供学习参考)。
小点点
2024/06/05
3610
车联网安全入门——CAN总线逆向(ICSim)
车联网安全入门——CAN总线模糊测试
🚀🚀最近对于车联网安全非常有兴趣,但是不知道怎么入门,无意间发现了ICSim,可以用来简单模拟一下汽车,学习了一段时间后决定写一下笔记,怕自己学完就忘记了(仅供学习参考)。
小点点
2024/06/05
4240
车联网安全入门——CAN总线模糊测试
如何激活成功教程汽车–CAN协议
汽车后装的辅助驾驶设备,一般需要知道汽车的CAN协议,各汽车厂家的CAN协议又是保密的,这时就需要激活成功教程,因为CAN协议是明文,所以激活成功教程也就轻松些。
全栈程序员站长
2022/09/14
1.7K0
如何激活成功教程汽车–CAN协议
2024年智能汽车多样化攻击途径
随着攻击变得越来越复杂和频繁,能给整个生态系统带来大规模影响的大门已经打开,智能移动汽车利益相关者必须意识到新兴威胁以及它们对网络韧性的潜在影响。在2023年,网络攻击变得更加复杂和频繁,针对各种车辆系统和组件,以及智能移动平台、物联网设备、应用程序,并使整个行业快速意识到任何连接点都有遭受攻击的风险。
FB客服
2024/02/29
1740
2024年智能汽车多样化攻击途径
如何建立汽车安全研究环境
安全公司如何研究汽车安全?第一时间想到的,是买一辆车,以攻防测试为核心,积累能力,孵化产品等。想法是很好,但是,如今汽车种类繁多,想研究得通透且广泛,就需要要将所有种类的汽车买来研究,这是成本不允许的。将汽车拆除后又重装,这是时间不允许的。如何在安全公司内部建立车联网的研究环境,是多数安全厂商在研究初期面临的困境。
绿盟科技研究通讯
2023/08/31
2400
如何建立汽车安全研究环境
CAN总线简介:如何以编程方式控制汽车
最近,我正与Voyage公司的朋友合作研究,以实现福特Fusion空调系统(A/C)的编程控制。目前,Voyage公司正努力打造自动驾驶的终极目标:能够以低廉的价格成本和广泛的投放范围,把世界任何地方有用车需求的人们安全自动地送达目的地。对Voyage来说,在真正实现不需司机的无人驾驶之后,必须给予后座乘客对车辆关键功能的访问控制权。 Voyage Auto:硅谷自动自动驾驶出租车初创公司,由专注机器学习、人工智能等方面的在线培训机构Udacity于2017年4月成立,在无人驾驶领域,Voyage将与谷
FB客服
2018/02/28
3.7K0
CAN总线简介:如何以编程方式控制汽车
汽车黑客:没有Security就没有Safety
作者 Taskiller 简介 “汽车黑客”(car hacking) 的话题正越来越多地在媒体和安全公司之间讨论。曾几何时,黑客利用手中的工具黑掉一辆汽车的画面还只是出现在电影中,现如今已经在现实中成为可能,且成为了人们开始担忧的问题,这正是本文要讨论的话题。 对车辆进行大规模技术引进的影响之一就是汽车黑客的出现。汽车黑客(car hacking)这一术语特指可以破坏汽车中的某些高科技组件(technological components)的黑客。 现代汽车(译者注:这里的现代指当今的、现在这个时代的,不
FB客服
2018/02/02
1.2K0
汽车黑客:没有Security就没有Safety
人工智能安全来袭?2016 SyScan360大会最全记录
前言 2016年11月24日,SyScan360国际前瞻信息安全会议在上海召开,该安全会议为期两天时间(24日至25日)。 SyScan360由奇虎360公司举办,会议中涉及众多技术干货,包括但不限于
FB客服
2018/02/09
1.7K0
人工智能安全来袭?2016 SyScan360大会最全记录
我所知道的车联网30年史,5G智能座舱开启汽车新时代
车联网(IoV:Internet of Vehicle)顾名思义就是让车联上网。这是物联网(IoT: Internet of Things)在汽车领域的一个细分应用。车辆和外界建立联系,并创造出丰富多彩的功能。
科技旋涡
2022/03/30
1K0
我所知道的车联网30年史,5G智能座舱开启汽车新时代
易航智能CEO陈禹行:为什么以场景为核心的“渐进式”路径先看到了无人驾驶量产的曙光?|量子位·视点分享回顾
视点 发自 凹非寺 量子位 | 公众号 QbitAI 2022年4月,特斯拉公司首席执行官埃隆·马斯克宣布,预计到2024年将实现无方向盘和踏板的新型“Robotaxi”的量产。 这表明以特斯拉为代表的自动驾驶“渐进式”发展路径,率先看到了无人驾驶大规模量产的曙光。 自动驾驶领域“渐进式”路径为什么能够被更多机构看好?“渐进式”技术的发展路径是什么?自动驾驶量产的难点在哪里?而距离我们的生活又还有多远? 关于自动驾驶“渐进式”路径的发展与实现,易航智能CEO陈禹行在「量子位·视点」直播中分享了他的从业经验和
量子位
2022/06/20
3770
易航智能CEO陈禹行:为什么以场景为核心的“渐进式”路径先看到了无人驾驶量产的曙光?|量子位·视点分享回顾
玩转Flipper Zero:了解滚动码及其可能的缺陷
在开始之前先来想一下为什么要有滚动码这个机制,最简单的固定码机制每次发送的信号是不变的,可以录制信号后直接进行重放,来达到与原来的遥控钥匙相同的控制效果。通过一张动态图片感受一下,固定码技术就像是你在附近喊一句:芝麻开门,车门就打开了
yichen
2024/05/08
1.7K0
玩转Flipper Zero:了解滚动码及其可能的缺陷
全国大学生智能汽车竞赛-室外光电组无人驾驶挑战赛-2019
版权声明:本文为zhangrelay原创文章,有错请轻拍,转载请注明,谢谢... https://blog.csdn.net/ZhangRelay/article/details/89639965
zhangrelay
2019/05/10
2.9K0
全国大学生智能汽车竞赛-室外光电组无人驾驶挑战赛-2019
自动驾驶的“大脑”-控制工程篇(二)
点击上方“专知”关注获取专业AI知识! 自动驾驶的“大脑”——控制工程篇(二) 中国人工智能系列白皮书 -智能驾驶2017 中国人工智能系列白皮书 --智能交通2017(附报告pdf下载) 一文带你看懂自动驾驶 给自动驾驶一双"通天眼"——环境感知器篇 自动驾驶的“大脑”——决策规划篇 ▌自动驾驶控制技术方案 ---- 根据从行驶环境到驾驶动作的映射过程,自动驾驶控制技术可以分为间接控制和直接控制两种不同方案。 基于规划-跟踪的间接控制方法 ---- 自动驾驶间接控制是一类基于规划-跟踪的主流智能驾驶车辆
WZEARW
2018/04/10
1.5K0
自动驾驶的“大脑”-控制工程篇(二)
Google Waymo自动驾驶安全技术报告(二)
Waymo的技术在公开道路上、封闭测试场、仿真器进行了广泛的测试,所以可以保证自动驾驶系统的每一部分在其ODD内都有强大、可靠、安全的处理能力。
YoungTimes
2022/04/28
6120
Google Waymo自动驾驶安全技术报告(二)
自动驾驶汽车真的比人驾驶汽车更安全吗?
作者 | Steve Shwartz 译者 | 王强 策划 | 刘燕 自动驾驶汽车是人工智能技术最令人兴奋和最具影响力的应用场景之一。 仅在美国,每年就有超过 35,000 人死于车祸。由于自动驾驶汽车理论上可以比人类司机更快做出反应,并且不会醉酒驾驶、不会边开车边发短信或感到疲倦,所以它们应该能够显著提高车辆安全性。这种技术还承诺让老年人和其他不能轻松驾车的人们更加独立,出行更方便。 在过去三年中,自动驾驶汽车行业获得的投资超过 2500 亿美元。 下面列举了行业中各个自动驾驶车辆类型领域中的典型企业:
深度学习与Python
2023/04/01
5670
自动驾驶汽车真的比人驾驶汽车更安全吗?
推荐阅读
相关推荐
车联网安全入门——ICSim模拟器使用
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档