安卓接入企业微信
概述:博主是个三流代码搬运工,最近接手某个课题,需要做一个数据可视化的 app
,将一些信息直观的统计并且展示在地图上,所以也会用到高德地图 API
的接口,所以后续也会分享一下使用高德 API
遇到的一些问题。有技术的看个热闹,没技术的窥个门道,权当增加业余知识~~
准备工作
既然要接入企业微信,必要的企业 微信管理员账号 还是要有的!
首先建一个类保存一下登陆时可能需要用到的各种 key
,具体看图片中每个 key
所对应的值;
QYWXConstants.class
public class QYWXConstants {//企业idpublic final static String CORPID = "***";//应用IDpublic final static String AGENT_ID = "***";//应用密钥public final static String SECRET = "***";//应用schemapublic final static String SCHEMA = "***";//签名的keypublic final static String APP_ALIAS = "android";//包名public final static String APP_PACKAGE_NAME = "com.example.testapplication";//通讯录secretpublic final static String MOBILE_LIST_SECRET = "***";//后台请求链接前缀public final static String ADMIN_LINK = "https://qyapi.weixin.qq.com/cgi-bin/";//企业对外名称public static final String CORP_NAME = "***";
}
corpid:
agentid & secret:
schema:
请注意,这里的应用签名为上图格式,可通过 gradle
生成后查看。
去除 md5
中间的 :
号,我试了好多次发现这样才能调出授权页,巨坑!!!
同时,在 app
的 build.gradle
填加以下配置:
signingConfigs {release {storeFile file('C:/Users/lonuslan/Desktop/debug.jks')storePassword '***'keyAlias '***'keyPassword '***'}}buildTypes {debug {signingConfig signingConfigs.release}release {signingConfig signingConfigs.releaseminifyEnabled falseproguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'}}
签名文件的 storePassword
, keyAlias
, keyPassword
自定义;
然后添加企业微信的 sdk
jar 包到项目中:
在根目录新建 libs
文件夹, 添加 sdk
, 右击 jar
包 , add as a library. 由于官方给出的是解压包,要导入项目只能以模块导入。解压包中不包含jar包,只有在官方的演示代码中才包含jar包,这里贴出 jar
包的下载链接,有需要的使用。 qiwxsdkapi.jar
之后就可以按照官方文档愉快的进行开发了!!!
这里给以下示例代码,具体自己看官方文档,自己动手,丰衣足食,发扬中华名族传统美德从我做起!
public class LoginActivity extends AppCompatActivity implements View.OnClickListener {private volatile static LoginActivity instance = null;private static final String TAG = "LoginActivity";private IWWAPI iwwapi;private WWAuthMessage.Resp resp;// private Toast mToast;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_login);registerApp();//TODO 这里写你的逻辑登录代码,调用welogin()...}public void wxLogin() {Log.i(TAG, "wxLogin...begin...");final WWAuthMessage.Req req = new WWAuthMessage.Req();req.sch = QYWXConstants.SCHEMA;req.agentId = QYWXConstants.AGENT_ID;req.appId = QYWXConstants.CORPID;req.state = "wwapitest";iwwapi.sendMessage(req, new IWWAPIEventHandler() {@Overridepublic void handleResp(BaseMessage resp) {if (resp instanceof WWAuthMessage.Resp) {WWAuthMessage.Resp rsp = (WWAuthMessage.Resp) resp;if (rsp.errCode == WWAuthMessage.ERR_CANCEL) {Log.i(TAG, "登陆取消");Toast.makeText(LoginActivity.this, "登录取消", Toast.LENGTH_SHORT).show();} else if (rsp.errCode == WWAuthMessage.ERR_FAIL) {Log.i(TAG, "登陆失败");Toast.makeText(LoginActivity.this, "登陆失败", Toast.LENGTH_SHORT).show();} else if (rsp.errCode == WWAuthMessage.ERR_OK) {String loginCode= rsp.code;
// ToastUtil.showShort(LoginActivity.this, loginCode);//安卓中的网络请求必须写在子线程中,不能直接暴露在activity中Intent intent = new Intent();String accessToken = QywxUtil.getAccessToken(QYWXConstants.CORPID, QYWXConstants.SECRET);String userId = QywxUtil.getUserId(accessToken, loginCode);User user = QywxUtil.getUser(accessToken, userId);intent.putExtra("user", user);intent.setClass(LoginActivity.this, MainTabActivity.class);ToastUtil.showShort(LoginActivity.this, "登陆成功");startActivity(intent);//TODO 获取用户的组织信息,判断其字段中是否包含“” ,有则跳转,无则限制登录
// String externalCorpName = user.getExternalProfile().getExternalCorpName();
// if (QYWXConstants.CORP_NAME.equals(externalCorpName)){
// intent.putExtra("user", user);
// ToastUtil.showShort(LoginActivity.this, "登陆成功");
// startActivity(intent);
// }else {
// ToastUtil.showShort(LoginActivity.this, "对不起,您没有该权限,请联系管理员");
// }}}}});}public void registerApp() {iwwapi = WWAPIFactory.createWWAPI(LoginActivity.this);iwwapi.registerApp(QYWXConstants.SCHEMA);Log.i(TAG, "register...");}}
有问题请在我的私人博客: https://www.lonuslan.com/articles/2020/06/23/1592905144300.html 留言,看到了秒回,哈哈哈!