App跳轉到與手機版QQ公眾服務號聊天介面會話異常
阿新 • • 發佈:2019-02-12
最近在專案中整合一個智慧客服的SDK,實現App的智慧諮詢,應需求拋棄原生的轉人工(即第三方客服平臺的人工服務應該要收費什麼的),改為直接轉到公司公眾號,實現微信、網站、Android的統一。
錯誤描述
雖然跳轉到了QQ,但並沒有顯示出QQ號碼對應的公眾號,而是一個獨立的普通QQ,傳送訊息失敗。
實現程式碼
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<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;
}
實現思路:對應的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,再次實現跳轉。(記住網路許可權的新增)
最終效果圖
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<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;
}
}