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

最近在项目中集成一个智能客服的SDK,实现App的智能咨询,应需求抛弃原生的转人工(即第三方客服平台的人工服务应该要收费什么的),改为直接转到公司公众号,实现微信、网站、Android的统一。
错误描述
虽然跳转到了QQ,但并没有显示出QQ号码对应的公众号,而是一个独立的普通QQ,发送消息失败。
App跳转到与手机版QQ公众服务号聊天界面会话异常_第1张图片
App跳转到与手机版QQ公众服务号聊天界面会话异常_第2张图片
实现代码

        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if(isQQClientAvailable(MainActivity.this)){
                    String url = "mqqwpa://im/chat?chat_type=crm&uin=800095555&version=1&src_type=web&web_src=http:://wpa.b.qq.com";
                    startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(url)));
                }else{
                    Toast.makeText(MainActivity.this, "您的手机暂未安装QQ客户端", Toast.LENGTH_SHORT).show();
                }
            }
        });
    }
    /**
     * 判断qq是否可用
     * @param context
     * @return
     */
    public static boolean isQQClientAvailable(Context context) {
        final PackageManager packageManager = context.getPackageManager();
        List 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;
    }

实现思路:对应的URL可以在腾讯开发平台查看,点击跳转到QQ。
问题原因:我是百度的,说的不对请指正,从app请求某些公众号跳转到QQ客户端,UID用户身份证明(User Identification)会发生变化,与对应的QQ号码不一致
参考博客:http://blog.csdn.net/jamy2015/article/details/51188509
我用某些公众号 是因为我使用的是800开头的,但还是发生了这种错误。
解决办法
既然知道是因为UID发生了变化,我们就应该找到正确的UID再来请求
参考博客:http://blog.csdn.net/jyqj123/article/details/51171122
代码实现

webView = (WebView) findViewById(R.id.webview);
        webView.loadUrl("http://wpa.b.qq.com/cgi/wpa.php?ln=2&uin=4008205555");
        WebSettings webSettings = webView.getSettings();
        webSettings.setJavaScriptEnabled(true);
        //设置可自由缩放网页
        webView.getSettings().setSupportZoom(true);
        webView.getSettings().setBuiltInZoomControls(true);
        webView.setWebViewClient(new WebViewClient() {
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                view.loadUrl(url);
                Log.i("TTT", url);
                return true;
            }
        });

得到URL
这里写图片描述
这时候我们把原来的UID换成URL中的UID,再次实现跳转。(记住网络权限的添加)
最终效果图
App跳转到与手机版QQ公众服务号聊天界面会话异常_第3张图片

bingo!!!填了一小坑,记录一下
最后附上所有代码

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

import java.util.List;

public class MainActivity extends AppCompatActivity {
    private Button button;
    private WebView webView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        button = (Button) findViewById(R.id.button);
        webView = (WebView) findViewById(R.id.webview);
        webView.loadUrl("http://wpa.b.qq.com/cgi/wpa.php?ln=2&uin=4008205555");
        WebSettings webSettings = webView.getSettings();
        webSettings.setJavaScriptEnabled(true);
        //设置可自由缩放网页
        webView.getSettings().setSupportZoom(true);
        webView.getSettings().setBuiltInZoomControls(true);
        webView.setWebViewClient(new WebViewClient() {
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                view.loadUrl(url);
                Log.i("TTT", url);
                return true;
            }
        });
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if(isQQClientAvailable(MainActivity.this)){
                    String url = "mqqwpa://im/chat?chat_type=crm&uin=800095555&version=1&src_type=web&web_src=http:://wpa.b.qq.com";
                    startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(url)));
                }else{
                    Toast.makeText(MainActivity.this, "您的手机暂未安装QQ客户端", Toast.LENGTH_SHORT).show();
                }
            }
        });
    }
    /**
     * 判断qq是否可用
     * @param context
     * @return
     */
    public static boolean isQQClientAvailable(Context context) {
        final PackageManager packageManager = context.getPackageManager();
        List 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公众服务号聊天界面会话异常)