为了方便客服与顾客联系,最近公司产生这样一种需求,从公司App客户端跳转到与手机版QQ公众服务号聊天界面。与QQ有关的需求按理说都应该去QQ开发平台查找相关资料。然并卯,没有找到与这一需求相关的资料。经过一番咨询查找,终于找到这么一个链接(http://wpa.b.qq.com/cgi/wpa.php?ln=2&uin=4008205555(说明:4008205555表示公司QQ公众服务号,4008205555是招商银行信用卡的QQ公众服务号))。 从网页中打开可以进入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; } }
其效果图如下所示。
效果图
经过测试发现,可以成功调起QQ客户端,但发送消息始终失败,Title也不显示招商银行信用卡,只显示4008205555。由此设想是不是这个QQ号有问题,于是,分别换了4008868400 和以800083942进行测试,经测试发现800开头的QQ号可以成功发送消息,但400开头QQ号还是消息发送失败。由此猜想,400开头的QQ号是不是就不能成功调起QQ客户端呢,但800开头的QQ又可以,这怎么解释呢。觉得这不是腾讯这么大公司的做事风格。
经过对调起web版和手机版QQ这个流程的详细研究发现了一个问题。4008205555QQ号网页版的uin=800095555与客户端版的不一致,客户端是直接使用4008205555,而网页版弹出的uin如下标红处所示。
由此猜想是不是400开头的QQ号要经过转换才能成功的调起QQ客户端并成功发送消息呢,下面来见证这一猜想。
将代码中的4008205555换成800095555试试。结果发现居然真的能成功发送消息。其具体效果图所下所示。
效果图
由此无论400开头还是800开头QQ号都可以成功调起QQ客户端并成功发送消息。下面我们来做下简单的总结。
1. 400开头QQ号能直接使用协议调起QQ客户端,但不能成功发送消息,要经过uin转换(将Web版的uin替换对应的协议uin)。
2. 800开头QQ号可直接使用协议调起QQ客户端,并成功发送消息。
App跳转到与手机版QQ公众服务号聊天界面介绍到此结束。以上就是本人开发中遇到的一些实际问题以及问题的一些解决办法。可能办法不是很完美,希望大家给予批评与建议。也希望能与大家深入学习并交流。