为了增加玩家粘性,我们在游戏 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 协议外,还定义了其他各种各样的协议,比如 mqqverifycodemqqapi 等等,JumpActivity 在内部再根据不同的 Intent 做相应的处理。