App跳转到与手机版QQ公众服务号聊天界面

时间:2022-11-09 18:58:07

为了方便客服与顾客联系,最近公司产生这样一种需求,从公司App客户端跳转到与手机版QQ公众服务号聊天界面。与QQ有关的需求按理说都应该去QQ开发平台查找相关资料。然并卯,没有找到与这一需求相关的资料。经过一番咨询查找,终于找到这么一个链接(http://wpa.b.qq.com/cgi/wpa.php?ln=2&uin=4008205555(说明:4008205555表示公司QQ公众服务号,4008205555招商银行信用卡的QQ公众服务号))。 从网页中打开可以进入QQ聊天界面,其具体详情如图一所示。

App跳转到与手机版QQ公众服务号聊天界面

                    图(一)

从浏览器中进入Web版QQ公众服务号聊天界面可以,那从App端进入行不行呢,答案是行的。经过查询相关资料发现使用协议(mqqwpa://im/chat?chat_type=crm&uin=4008205555&version=1&src_type=web&web_src=http:://wpa.b.qq.com(说明:其中4008205555表示公司QQ公众服务号,4008205555招商银行信用卡的QQ公众服务号))可以成功调起QQ客户端进入聊天界面。说了这么多也不知道找的资料靠不靠谱。下面你我就一起来见证奇迹吧。

第一步新建一个TestContactQQ项目。

第二步添加布局文件。由于本项目布局简单,只有一个Button这里就不列出布局代码了。

第三步编写主要跳转代码。其具体的代码如此下所示。

package com.example.testcontactqq;

import java.util.List;

import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.net.Uri;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Button;
import android.widget.Toast;

public class MainActivity extends Activity {
   private Button mContactQQ;
   private Context context;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		context = MainActivity.this;
		mContactQQ = (Button) findViewById(R.id.contact_QQ);
		mContactQQ.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View v) {
				if(isQQClientAvailable(MainActivity.this)){ 
					 String url = "mqqwpa://im/chat?chat_type=crm&uin=4008205555&version=1&src_type=web&web_src=http:://wpa.b.qq.com";
					 context.startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(url)));
				}else{
					Toast.makeText(MainActivity.this, "您的手机暂未安装QQ客户端", 0).show();
				}
			}
		});
	}
	/**
     * 判断qq是否可用
     * @param context
     * @return
     */
    public static boolean isQQClientAvailable(Context context) {
        final PackageManager packageManager = context.getPackageManager();
        List<PackageInfo> pinfo = packageManager.getInstalledPackages(0);
        if (pinfo != null) {
            for (int i = 0; i < pinfo.size(); i++) {
                String pn = pinfo.get(i).packageName;
                if (pn.equals("com.tencent.mobileqq")) {
                    return true;
                }
            }
        }
        return false;
    }
}

 其效果图如下所示。

App跳转到与手机版QQ公众服务号聊天界面

                    效果图

经过测试发现,可以成功调起QQ客户端,但发送消息始终失败,Title也不显示招商银行信用卡,只显示4008205555。由此设想是不是这个QQ号有问题,于是,分别换了4008868400 和以800083942进行测试,经测试发现800开头的QQ号可以成功发送消息,但400开头QQ号还是消息发送失败。由此猜想,400开头的QQ号是不是就不能成功调起QQ客户端呢,但800开头的QQ又可以,这怎么解释呢。觉得这不是腾讯这么大公司的做事风格。

经过对调起web版和手机版QQ这个流程的详细研究发现了一个问题。4008205555QQ号网页版的uin=800095555与客户端版的不一致,客户端是直接使用4008205555,而网页版弹出的uin如下标红处所示。


App跳转到与手机版QQ公众服务号聊天界面

由此猜想是不是400开头的QQ号要经过转换才能成功的调起QQ客户端并成功发送消息呢,下面来见证这一猜想。

将代码中的4008205555换成800095555试试。结果发现居然真的能成功发送消息。其具体效果图所下所示。

App跳转到与手机版QQ公众服务号聊天界面

                      效果图

由此无论400开头还是800开头QQ号都可以成功调起QQ客户端并成功发送消息。下面我们来做下简单的总结。

1. 400开头QQ号能直接使用协议调起QQ客户端,但不能成功发送消息,要经过uin转换(将Web版的uin替换对应的协议uin)。

2. 800开头QQ号可直接使用协议调起QQ客户端,并成功发送消息。

App跳转到与手机版QQ公众服务号聊天界面介绍到此结束。以上就是本人开发中遇到的一些实际问题以及问题的一些解决办法。可能办法不是很完美,希望大家给予批评与建议。也希望能与大家深入学习并交流。