admin管理员组文章数量:1656251
为了方便客服与顾客联系,最近公司产生这样一种需求,从公司App客户端跳转到与手机版QQ公众服务号聊天界面。与QQ有关的需求按理说都应该去QQ开发平台查找相关资料。然并卯,没有找到与这一需求相关的资料。经过一番咨询查找,终于找到这么一个链接(http://wpa.b.qq/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(说明:其中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.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";
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公众服务号聊天界面介绍到此结束。以上就是本人开发中遇到的一些实际问题以及问题的一些解决办法。可能办法不是很完美,希望大家给予批评与建议。也希望能与大家深入学习并交流。
版权声明:本文标题:App跳转到与手机版QQ公众服务号聊天界面 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://www.elefans.com/xitong/1729732959a1211550.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论