加载中...

Android(安卓) 接入企业微信 置顶!

安卓接入企业微信

概述:博主是个三流代码搬运工,最近接手某个课题,需要做一个数据可视化的 app ,将一些信息直观的统计并且展示在地图上,所以也会用到高德地图 API 的接口,所以后续也会分享一下使用高德 API 遇到的一些问题。有技术的看个热闹,没技术的窥个门道,权当增加业余知识~~

准备工作

既然要接入企业微信,必要的企业 微信管理员账号 还是要有的!

首先建一个类保存一下登陆时可能需要用到的各种 key ,具体看图片中每个 key 所对应的值;

QYWXConstants.class

public class QYWXConstants {

    //企业id
    public final static String CORPID = "***";

    //应用ID
    public final static String AGENT_ID = "***";

    //应用密钥
    public final static String SECRET = "***";

    //应用schema
    public final static String SCHEMA = "***";

    //签名的key
    public final static String APP_ALIAS = "android";

    //包名
    public final static String APP_PACKAGE_NAME = "com.example.testapplication";

    //通讯录secret
    public 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:

mark

agentid & secret:

mark

mark

schema:

mark

mark

请注意,这里的应用签名为上图格式,可通过 gradle 生成后查看。

mark

去除 md5 中间的 :号,我试了好多次发现这样才能调出授权页,巨坑!!!

同时,在 appbuild.gradle 填加以下配置:

signingConfigs {
        release {
            storeFile file('C:/Users/lonuslan/Desktop/debug.jks')
            storePassword '***'
            keyAlias '***'
            keyPassword '***'
        }
    }
    buildTypes {
        debug {
            signingConfig signingConfigs.release
        }
        release {
            signingConfig signingConfigs.release
            minifyEnabled false
            proguardFiles 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;

    @Override
    protected 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() {
            @Override
            public 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...");
    }
    
}


标题:Android(安卓) 接入企业微信
作者:lonuslan
地址:https://lonuslan.com/articles/2020/06/23/1592905144300.html


评论