
为了方便反馈问题以及沟通,在 app 的版本界面添加了一个 QQ 群,现在的问题是QQ 群号有了,但是要发消息得先复制群号,打开 QQ 加群,才能发送消息。
网上搜索了一下 uniapp 打开 qq 聊天窗口的方法,网上的代码不少,但是基本都是抄来抄去,多数代码应该只在安卓手机上测试过,在苹果手机上可能没有测试,最后找到这么一篇算是比较有价值的:https://blog.csdn.net/m0_61447532/article/details/127958946
针对 安卓和 ios 需要单独处理:
if (plus.os.name == "Android") {
var main = plus.android.runtimeMainActivity();
var Intent = plus.android.importClass('android.content.Intent');
var Uri = plus.android.importClass('android.net.Uri');
var intent = new Intent(Intent.ACTION_VIEW, Uri.parse("mqqwpa://im/chat?chat_type=wpa&uin=" + qq));
main.startActivity(intent);
if (plus.os.name == "iOS") {
plus.runtime.launchApplication({
action: "mqq://im/chat?chat_type=wpa&uin=" + qq + "&version=1&src_type=web"
plus.nativeUI.confirm("检查到您未安装qq,请先到appstore搜索下载?", function(i) {
iosAppstore("itunes.apple.com/cn/app/mqq/");
let qq = '123456'
if (plus.os.name == "Android") {
var main = plus.android.runtimeMainActivity();
var Intent = plus.android.importClass('android.content.Intent');
var Uri = plus.android.importClass('android.net.Uri');
var intent = new Intent(Intent.ACTION_VIEW, Uri.parse("mqqwpa://im/chat?chat_type=wpa&uin=" + qq));
main.startActivity(intent);
}
if (plus.os.name == "iOS") {
plus.runtime.launchApplication({
action: "mqq://im/chat?chat_type=wpa&uin=" + qq + "&version=1&src_type=web"
}, function(e) {
plus.nativeUI.confirm("检查到您未安装qq,请先到appstore搜索下载?", function(i) {
if (i.index == 0) {
iosAppstore("itunes.apple.com/cn/app/mqq/");
}
});
});
}
let qq = '123456'
if (plus.os.name == "Android") {
var main = plus.android.runtimeMainActivity();
var Intent = plus.android.importClass('android.content.Intent');
var Uri = plus.android.importClass('android.net.Uri');
var intent = new Intent(Intent.ACTION_VIEW, Uri.parse("mqqwpa://im/chat?chat_type=wpa&uin=" + qq));
main.startActivity(intent);
}
if (plus.os.name == "iOS") {
plus.runtime.launchApplication({
action: "mqq://im/chat?chat_type=wpa&uin=" + qq + "&version=1&src_type=web"
}, function(e) {
plus.nativeUI.confirm("检查到您未安装qq,请先到appstore搜索下载?", function(i) {
if (i.index == 0) {
iosAppstore("itunes.apple.com/cn/app/mqq/");
}
});
});
}
不过上面的代码是针对 qq 聊天的,如果要打开 qq 群聊天窗口需要将 qq 群的号码转换成密钥:
登录:https://qun.qq.com/ 点击加群组件,选择 android:

对应代码为:
* 发起添加群流程。群号:闺蜜圈App(323089499) 的 key 为: 9x-uQPZ
* 调用 joinQQGroup(9x-uQPZ) 即可发起手Q客户端申请加群 闺蜜圈App(323089499)
* @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%26jump_from%3Dwebapi%26k%3D" + key));
// 此Flag可根据具体产品需要自定义,如设置,则在加群界面按返回,返回手Q主界面,不设置,按返回会返回到呼起产品界面 //intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
/****************
*
* 发起添加群流程。群号:闺蜜圈App(323089499) 的 key 为: 9x-uQPZ
* 调用 joinQQGroup(9x-uQPZ) 即可发起手Q客户端申请加群 闺蜜圈App(323089499)
*
* @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%26jump_from%3Dwebapi%26k%3D" + key));
// 此Flag可根据具体产品需要自定义,如设置,则在加群界面按返回,返回手Q主界面,不设置,按返回会返回到呼起产品界面 //intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
try {
startActivity(intent);
return true;
} catch (Exception e) {
// 未安装手Q或安装的版本不支持
return false;
}
}
/****************
*
* 发起添加群流程。群号:闺蜜圈App(323089499) 的 key 为: 9x-uQPZ
* 调用 joinQQGroup(9x-uQPZ) 即可发起手Q客户端申请加群 闺蜜圈App(323089499)
*
* @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%26jump_from%3Dwebapi%26k%3D" + key));
// 此Flag可根据具体产品需要自定义,如设置,则在加群界面按返回,返回手Q主界面,不设置,按返回会返回到呼起产品界面 //intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
try {
startActivity(intent);
return true;
} catch (Exception e) {
// 未安装手Q或安装的版本不支持
return false;
}
}
对应代码为安卓java 原生,这里只需要知道 uri 是怎么拼接的就 ok 了,换成 uni 代码:
if (plus.os.name == "Android") {
plus.runtime.openURL('mqqopensdkapi://bizAgent/qm/qr?url=http%3A%2F%2Fqm.qq.com%2Fcgi-bin%2Fqm%2Fqr%3Ffrom%3Dapp%26p%3Dandroid%26jump_from%3Dwebapi%26k%3D' +'9x-uQPZ')
if (plus.os.name == "Android") {
plus.runtime.openURL('mqqopensdkapi://bizAgent/qm/qr?url=http%3A%2F%2Fqm.qq.com%2Fcgi-bin%2Fqm%2Fqr%3Ffrom%3Dapp%26p%3Dandroid%26jump_from%3Dwebapi%26k%3D' +'9x-uQPZ')
}
if (plus.os.name == "Android") {
plus.runtime.openURL('mqqopensdkapi://bizAgent/qm/qr?url=http%3A%2F%2Fqm.qq.com%2Fcgi-bin%2Fqm%2Fqr%3Ffrom%3Dapp%26p%3Dandroid%26jump_from%3Dwebapi%26k%3D' +'9x-uQPZ')
}
ios 代码:
- (BOOL)joinGroup:(NSString *)groupUin key:(NSString *)key{
NSString *urlStr = [NSString stringWithFormat:@"mqqapi://card/show_pslcard?src_type=internal&version=1&uin=%@&authSig=%@&card_type=group&source=external&jump_from=webapi", @"323089499",@"0P27iJ"];
NSURL *url = [NSURL URLWithString:urlStr];
if([[UIApplication sharedApplication] canOpenURL:url]){
[[UIApplication sharedApplication] openURL:url];
- (BOOL)joinGroup:(NSString *)groupUin key:(NSString *)key{
NSString *urlStr = [NSString stringWithFormat:@"mqqapi://card/show_pslcard?src_type=internal&version=1&uin=%@&authSig=%@&card_type=group&source=external&jump_from=webapi", @"323089499",@"0P27iJ"];
NSURL *url = [NSURL URLWithString:urlStr];
if([[UIApplication sharedApplication] canOpenURL:url]){
[[UIApplication sharedApplication] openURL:url];
return YES;
}
else return NO;
}
- (BOOL)joinGroup:(NSString *)groupUin key:(NSString *)key{
NSString *urlStr = [NSString stringWithFormat:@"mqqapi://card/show_pslcard?src_type=internal&version=1&uin=%@&authSig=%@&card_type=group&source=external&jump_from=webapi", @"323089499",@"0P27iJ"];
NSURL *url = [NSURL URLWithString:urlStr];
if([[UIApplication sharedApplication] canOpenURL:url]){
[[UIApplication sharedApplication] openURL:url];
return YES;
}
else return NO;
}
用同样的方法把 uri 拼起来:
if (plus.os.name == "iOS") {
plus.runtime.launchApplication({
// action: "mqq://im/chat?chat_type=wpa&uin=" + qq + "&version=1&src_type=web"
action: "mqqapi://card/show_pslcard?src_type=internal&version=1&uin=323089499&authSig=96utdUKhGUwrEV0Mi9PI8TCupddqg6Trri&card_type=group&source=external&jump_from=webapi"
plus.nativeUI.confirm("检查到您未安装qq,请先到appstore搜索下载?", function(i) {
iosAppstore("itunes.apple.com/cn/app/mqq/");
if (plus.os.name == "iOS") {
plus.runtime.launchApplication({
// action: "mqq://im/chat?chat_type=wpa&uin=" + qq + "&version=1&src_type=web"
action: "mqqapi://card/show_pslcard?src_type=internal&version=1&uin=323089499&authSig=96utdUKhGUwrEV0Mi9PI8TCupddqg6Trri&card_type=group&source=external&jump_from=webapi"
}, function(e) {
plus.nativeUI.confirm("检查到您未安装qq,请先到appstore搜索下载?", function(i) {
if (i.index == 0) {
iosAppstore("itunes.apple.com/cn/app/mqq/");
}
});
});
if (plus.os.name == "iOS") {
plus.runtime.launchApplication({
// action: "mqq://im/chat?chat_type=wpa&uin=" + qq + "&version=1&src_type=web"
action: "mqqapi://card/show_pslcard?src_type=internal&version=1&uin=323089499&authSig=96utdUKhGUwrEV0Mi9PI8TCupddqg6Trri&card_type=group&source=external&jump_from=webapi"
}, function(e) {
plus.nativeUI.confirm("检查到您未安装qq,请先到appstore搜索下载?", function(i) {
if (i.index == 0) {
iosAppstore("itunes.apple.com/cn/app/mqq/");
}
});
});
然后就可以正常打开 qq 群聊窗口了:
参考链接:
https://www.dandelioncloud.cn/article/details/1478993088000643073
https://blog.csdn.net/m0_61447532/article/details/127958946
https://qun.qq.com/
obaby
爱好广泛的火星小妖精,有问题欢迎留言交流啊~(✪ω✪)
爬虫类工具请先点击这个链接查看用法https://oba.by/?p=12240
闺蜜圈APP下载 https://guimiquan.cn
16 comments
丝滑,这个方便,不用做另外的站内信了
本来想用企业微信的,结果不做企业认证只能接待 100 人,哈哈哈。就离谱,总不能用到一半之后不能用了吧。
所以最后还是选择的 qq。
一人顶一个项目组了
太厉害了,赞赞赞!!!
这几天一直在做些细节性的优化功能,嘻嘻。
当然包括华为应用商店的整改。
强,这方法好,需反馈直接对接开发者。
是哒,本来想做个留言功能的,后来觉得有点鸡肋。还不如直接微信或者qq,最后因为认证问题把微信放弃了,就只能选qq了
哇哦,学习了
接入微信得企业认证,这是断了个人独立开发者的后路……
现在个人开发者已经到了狗都嫌弃的地步了,没有企业认证寸步难行。
人家没说不让接,让接,不过接了之后给你限制,
今天收到阿里云的电话通知,说如果发布APP,需要特别备案~
因为 app 备案要依托于域名,所以要先有备案域名才能去备案 app。
一环一环可以说卡的非常紧凑,缺任何一项都无法进行 app 备案。哈哈哈。
不过特别备案是什么备案,怎么特别?
QQ的群和TIM的群是通用的么,安装的TIM也可以跳转吧。
额 这个可能不大行 毕竟appid不一样,sdk应该不通用