为了增加玩家粘性,我们在游戏 SDK 内集成了一键加群的功能。
其实一键加群的功能并不难实现,只要『QQ』客户端给我们开放了相关的入口即可,在『QQ群』官网中我们可以看到有「加群组件」,就是它了。
登录后选择对应的群,它就会自动为我们在右边生成代码段,我们只需根据自己的平台复制对应的代码到自己的项目中即可。
Android 平台生成的代码段大概是这样的:
/****************
*
* 发起添加群流程。群号:*****群(965***949) 的 key 为: lTK**************************HTg
* 调用 joinQQGroup(lTK**************************HTg) 即可发起手Q客户端申请加群 *****群(965***949)
*
* @param key 由官网生成的 key
* @return 返回 true 表示呼起手Q成功,返回 false 表示呼起失败
******************/
public boolean joinQQGroup(String key) {
Intent intent = new Intent();
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));
// 此Flag可根据具体产品需要自定义,如设置,则在加群界面按返回,返回手Q主界面,不设置,按返回会返回到呼起产品界面
// intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
try {
startActivity(intent);
return true;
} catch (Exception e) {
// 未安装手Q或安装的版本不支持
return false;
}
}
这段代码的重点其实是 QQ 群号码所生成的 key
,我们只需要传入这个 key
即可,通过 URI 的方式拉起『QQ』客户端的 QQ 群资料页面,『QQ』客户端会解析这个 key
并加载对应的群信息。
效果如下:
该代码段十分简单,用到的知识点就是隐式 Intent
。
我们可以查看一下『QQ』的 AndroidManifest.xml 文件,很容易找到其配置:
<manifest ...
package="com.tencent.mobileqq">
...
<application ...>
...
<activity ...
android:name="com.tencent.mobileqq.activity.JumpActivity">
...
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.BROWSABLE" />
<category android:name="android.intent.category.DEFAULT" />
<data android:scheme="mqqopensdkapi" />
</intent-filter>
</activity>
</application>
</manifest>
『QQ』客户端在 JumpActivity
中响应第三方应用的隐式 Intent
,处理唤起请求,除了该功能用到的 mqqopensdkapi
协议外,还定义了其他各种各样的协议,比如 mqqverifycode
、mqqapi
等等,JumpActivity
在内部再根据不同的 Intent
做相应的处理。