iOS——奇葩需求QQ号与QQ群添加与跳转

最近在做一个新的二次元游戏App,说真的第一次做游戏一开始有点压力,但是后面了解到用到的技术其实跟游戏没有太多关系,就巴拉巴拉的开始写了,但是由于只有一个人,项目赶着上线,再加上之前需求的不明确和中途的调整,导致期间也浪费了不少时间,最近在实现最后一个功能的时候遇到了点问题,一开始是我想的太复杂了,后面群里一问,网上一了解,发现:MMP,这么简单,说多了都是尿,于是记录了这一切……..

前言

本文的起因:

新项目,一个人纯swift开发,有个小功能第一次遇到,就是在用户中心有一行显示(群号+点击加群)文案,点击这一行拉起QQ App,如果QQ APP所登录的QQ已经加入了QQ号就直接到群聊页面,如果没有就跳到加群页面,可以点击申请加群。

注意: 这里其实是打开QQ后,使用QQ来去打开了一个网页。

下面上代码:

一下是朋友提供的OC代码

- (NSURL*)getQQQunUrl {
    NSString *qq_number = @"??"
    NSString* urlStr = [NSString stringWithFormat:@"mqqapi://card/show_pslcard?src_type=internal&version=1&uin=%@&key=%@&card_type=group&source=external", qq_number, @"44a6e01f2dab126f87ecd2ec7b7e66ae259b30535fd0c2c25776271e8c0ac08f"];
    return [NSURL URLWithString:urlStr];
}

调用方式:

NSURL* url = [self getQQqunUrl];
if ([[UIApplication sharedApplication] canOpenURL:url]) {
    [[UIApplication sharedApplication] openURL:url];
}

这是我最终Swift的实现方式

func getQQQunUrl() -> String {
    let qq_number = "??"
    let url_str = "mqqapi://card/show_pslcard?src_type=internal&version=1&uin=\(qq_number)&key=44a6e01f2dab126f87ecd2ec7b7e66ae259b30535fd0c2c25776271e8c0ac08f&card_type=group&source=external"
    return url_str
}

调用方式:

let urlString = self.getQQQunUrl()
if let url = URL(string: urlString) {
    //根据iOS系统版本,分别处理
    if #available(iOS 10, *) {
        UIApplication.shared.open(url, options: [:], completionHandler: { (success) in })
    } else {
        UIApplication.shared.openURL(url)
    }
}

只要替换以上QQ好就可以,看着代码是不是很简单,算了不说了,我都想静一静……

来看看效果图:

加群之前的效果

曹理鹏(iCocos)-梦工厂

曹理鹏(iCocos)-梦工厂

加群之后的效果

曹理鹏(iCocos)-梦工厂

曹理鹏(iCocos)-梦工厂

QQ号调整

最近又有一个新的需求,由于需求比较相似,于是我直接在这里追加了。

需要处理QQ号的跳转,点击直接打开QQ调用网页版加号或者聊天页面

其实功能并没有任何难度在,其实寻找对应的链接,替换内部信息就可以。

一下只提供OC和Swift的关键代码:

OC的实现方式

//qqNumber就是你要打开的QQ号码, 也就是你的客服号码。
NSString  *qqNumber=@"QQ号";

if ([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"mqq://"]]) {
    UIWebView *webView = [[UIWebView alloc] initWithFrame:CGRectZero];
    NSURL * url=[NSURL URLWithString:[NSString stringWithFormat:@"mqq://im/chat?chat_type=wpa&uin=%@&version=1&src_type=web",qqNumber]];

    NSURLRequest *request = [NSURLRequest requestWithURL:url];
    webView.delegate = self;
    [webView loadRequest:request];
    [self.view addSubview:webView];
}

Swift的实现方式

// 打开Url
class func openOuterUrl(_ url: String) {
    if let url = URL(string: url) {
        //根据iOS系统版本,分别处理
        if UIApplication.shared.canOpenURL(url)  {
            //根据iOS系统版本,分别处理
            if #available(iOS 10, *) {
                UIApplication.shared.open(url, options: [:],
                completionHandler: { (success) in })
            } else {
                UIApplication.shared.openURL(url)
            }
        }
    }
}

class func getQQUrl() -> String {
    let url_str = "mqq://im/chat?chat_type=wpa&uin=\(self.getQQ())&version=1&src_type=web"
    return url_str
}

参考链接

iOS调用QQ客户端,发起临时会话
IOS APP中打开指定qq聊天界面

坚持原创技术分享,您的支持将鼓励我继续创作!