微信分享
Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.wx_fxlogo); //图标
WxShareUtils.shareWeb(VipActivity.this, HttpHeader.APP_ID,"http://www.xxx.com","title","info",bitmap);
WxShareUtils.class
import android.content.Context;
import android.graphics.Bitmap;
import android.widget.Toast;
import com.linjia.ljappnew.wxapi.WXEntryActivity;
import com.tencent.mm.opensdk.modelmsg.SendMessageToWX;
import com.tencent.mm.opensdk.modelmsg.WXMediaMessage;
import com.tencent.mm.opensdk.modelmsg.WXWebpageObject;
import com.tencent.mm.opensdk.openapi.IWXAPI;
import com.tencent.mm.opensdk.openapi.WXAPIFactory;
public class WxShareUtils {
/**
* 分享网页类型至微信
*
* @param context 上下文
* @param appId 微信的appId
* @param webUrl 网页的url
* @param title 网页标题
* @param content 网页描述
* @param bitmap 位图
*/
public static void shareWeb(Context context, String appId, String webUrl, String title, String content, Bitmap bitmap) {
// 通过appId得到IWXAPI这个对象
IWXAPI wxapi = WXAPIFactory.createWXAPI(context, appId);
// 检查手机或者模拟器是否安装了微信
if (!wxapi.isWXAppInstalled()) {
Toast.makeText(context, "您还没有安装微信", Toast.LENGTH_SHORT).show();
return;
}
// 初始化一个WXWebpageObject对象
WXWebpageObject webpageObject = new WXWebpageObject();
// 填写网页的url
webpageObject.webpageUrl = webUrl;
// 用WXWebpageObject对象初始化一个WXMediaMessage对象
WXMediaMessage msg = new WXMediaMessage(webpageObject);
// 填写网页标题、描述、位图
msg.title = title;
msg.description = content;
// 如果没有位图,可以传null,会显示默认的图片
msg.setThumbImage(bitmap);
// 构造一个Req
SendMessageToWX.Req req = new SendMessageToWX.Req();
// transaction用于唯一标识一个请求(可自定义)
req.transaction = "webpage";
// 上文的WXMediaMessage对象
req.message = msg;
// SendMessageToWX.Req.WXSceneSession是分享到好友会话
// SendMessageToWX.Req.WXSceneTimeline是分享到朋友圈
req.scene = SendMessageToWX.Req.WXSceneSession;
// 向微信发送请求
wxapi.sendReq(req);
}
}
微信登陆
public static IWXAPI api;
api = WXAPIFactory.createWXAPI(getApplicationContext(), HttpHeader.APP_ID,false);
if (!api.isWXAppInstalled()) {
Toast.makeText(LoginActivity.this, "您还未安装微信客户端", Toast.LENGTH_SHORT).show();
return;
}
api.registerApp(HttpHeader.APP_ID);
SendAuth.Req req = new SendAuth.Req();
isClick=true;
req.scope = "snsapi_userinfo";
req.state = "wechat_sdk_demo_test";
api.sendReq(req);
finish();
分享与登陆回执//WXEntryActivity.class
import android.app.Activity;
import android.content.ContentValues;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Color;
import android.os.Build;
import android.os.Handler;
import android.support.v7.app.ActionBar;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
import com.linjia.ljappnew.R;
import com.linjia.ljappnew.layout.LoginActivity;
import com.linjia.ljappnew.layout.MainActivity;
import com.linjia.ljappnew.layout.home.HomeActivity;
import com.linjia.ljappnew.layout.order.OrderDetailActivity;
import com.linjia.ljappnew.layout.wxapi.UIUtils;
import com.linjia.ljappnew.layout.wxapi.WxData;
import com.linjia.ljappnew.layout.wxapi.WxRegisterActivity;
import com.linjia.ljappnew.pojo.UserInfo;
import com.linjia.ljappnew.register.RegisterActivity;
import com.linjia.ljappnew.util.HttpHeader;
import com.linjia.ljappnew.util.HttpUtil;
import com.linjia.ljappnew.util.MD5StringUtil;
import com.tencent.mm.opensdk.constants.ConstantsAPI;
import com.tencent.mm.opensdk.modelbase.BaseReq;
import com.tencent.mm.opensdk.modelbase.BaseResp;
import com.tencent.mm.opensdk.modelmsg.SendAuth;
import com.tencent.mm.opensdk.modelpay.PayReq;
import com.tencent.mm.opensdk.openapi.IWXAPI;
import com.tencent.mm.opensdk.openapi.IWXAPIEventHandler;
import com.tencent.mm.opensdk.openapi.WXAPIFactory;
import com.tsy.sdk.myokhttp.response.JsonResponseHandler;
import com.zhy.http.okhttp.OkHttpUtils;
import com.zhy.http.okhttp.callback.StringCallback;
import org.json.JSONException;
import org.json.JSONObject;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.math.BigDecimal;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URI;
import java.net.URL;
import java.net.URLConnection;
import java.util.List;
import io.netty.handler.codec.http.HttpResponse;
import okhttp3.Headers;
import static com.makeramen.roundedimageview.RoundedImageView.TAG;
public class WXEntryActivity extends AppCompatActivity implements IWXAPIEventHandler {
private static final int RETURN_MSG_TYPE_LOGIN = 1;
private static final int RETURN_MSG_TYPE_SHARE = 2;
private IWXAPI mWeixinAPI;
private TextView id_tv;
private TextView nickname_tv;
private TextView sex_tv;
private ImageView imageView;
private Handler handler;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_wxentry);
handler = new Handler();
mWeixinAPI = WXAPIFactory.createWXAPI(this, WxData.WEIXIN_APP_ID, true);
mWeixinAPI.handleIntent(this.getIntent(), this);
View view = getWindow().getDecorView();
view.setSystemUiVisibility(View.SYSTEM_UI_FLAG_FULLSCREEN);
//得到当前界面的装饰视图
if(Build.VERSION.SDK_INT >= 21) {
View decorView = getWindow().getDecorView();
//设置让应用主题内容占据状态栏和导航栏
int option = View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN|View.SYSTEM_UI_FLAG_LAYOUT_STABLE;
decorView.setSystemUiVisibility(option);
//设置状态栏和导航栏颜色为透明
getWindow().setStatusBarColor(Color.TRANSPARENT);
getWindow().setNavigationBarColor(Color.TRANSPARENT);
}
//隐藏标题栏
ActionBar actionBar = getSupportActionBar();
actionBar.hide();
}
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
setIntent(intent);
mWeixinAPI.handleIntent(intent, this);//必须调用此句话
}
@Override
public void onReq(BaseReq baseReq) {
Log.d("-----", "onReq: " + baseReq);
finish();
}
@Override
public void onResp(BaseResp baseResp) {
/* Log.d("-----", "errStr: " + baseResp.errStr);
Log.d("-----", "openId: " + baseResp.openId);
Log.d("-----", "transaction: " + baseResp.transaction);
Log.d("-----", "errCode: " + baseResp.errCode);
Log.d("-----", "getType: " + baseResp.getType());
Log.d("-----", "checkArgs: " + baseResp.checkArgs());*/
int errorCode = baseResp.errCode;
switch (errorCode) {
case BaseResp.ErrCode.ERR_OK:
/* //用户同意
if(baseResp instanceof SendAuth.Resp){
SendAuth.Resp newResp = (SendAuth.Resp) baseResp;
//获取微信传回的code
String code = newResp.code;
getAccess_token(code);
*//* getUserInfo();*//*
}*/
if(baseResp.getType()== ConstantsAPI.COMMAND_SENDAUTH){
SendAuth.Resp newResp = (SendAuth.Resp) baseResp;
//获取微信传回的code
String code = newResp.code;
getAccess_token(code);
/* getUserInfo();*/
}else if(baseResp.getType()==ConstantsAPI.COMMAND_SENDMESSAGE_TO_WX){
/* Toast.makeText(WXEntryActivity.this, "分享成功", Toast.LENGTH_SHORT).show();*/
finish();
}
break;
case BaseResp.ErrCode.ERR_AUTH_DENIED:
//用户拒绝
finish();
break;
case BaseResp.ErrCode.ERR_USER_CANCEL:
//用户取消
finish();
break;
case ConstantsAPI.COMMAND_SENDMESSAGE_TO_WX:
Log.i("WXEntryActivity" , ">>>errCode = " + baseResp.errCode);
finish();
break;
default:
finish();
break;
}
/* switch (baseResp.errCode) {
case BaseResp.ErrCode.ERR_AUTH_DENIED:
case BaseResp.ErrCode.ERR_USER_CANCEL:
if (RETURN_MSG_TYPE_SHARE == baseResp.getType()) UIUtils.runOnUIToast("分享失败");
else UIUtils.runOnUIToast("登录失败");
break;
case BaseResp.ErrCode.ERR_OK:
switch (baseResp.getType()) {
case RETURN_MSG_TYPE_LOGIN:
//拿到了微信返回的code,立马再去请求access_token
String code = ((SendAuth.Resp) baseResp).code;
getAccess_token(code);
//就在这个地方,用网络库什么的或者自己封的网络api,发请求去咯,注意是get请求
Log.d("--------", "code: " + code);
id_tv.setText("code: " + code);
break;
case RETURN_MSG_TYPE_SHARE:
UIUtils.runOnUIToast("微信分享成功");
finish();
break;
}
break;
}*/
}
/**
* 获取openid accessToken值用于后期操作
*
* @param code 请求码
*/
private void getAccess_token(final String code) {
String path = "https://api.weixin.qq.com/sns/oauth2/access_token?appid="
+ WxData.WEIXIN_APP_ID
+ "&secret="
+ WxData.APP_SECRET
+ "&code="
+ code
+ "&grant_type=authorization_code";
OkHttpUtils.get().url(path).build().execute(new StringCallback() {
@Override
public void onError(okhttp3.Call call, Exception e) {
}
@Override
public void onResponse(String response) {
JSONObject jsonObject = null;
try {
jsonObject = new JSONObject(response);
final String openid = jsonObject.getString("openid").toString().trim();
final String access_token = jsonObject.getString("access_token").toString().trim();
SharedPreferences userPreference = getSharedPreferences("user", Context.MODE_PRIVATE);
SharedPreferences.Editor editor = userPreference.edit();
editor.putString("token",openid);
//*** 保存请求头
editor.commit();
HttpUtil.getInstance().getMyOkHttp()
.get()
.url(HttpUtil.HOST_ADDRESS+"/sms/loginByToken?token="+openid)
.tag(this)
.enqueue(new JsonResponseHandler() {
@Override
public void onSuccess(int statusCode, JSONObject response) {
try {
Boolean isTrue=(Boolean) response.get("success");
if (isTrue) {
JSONObject user = response.getJSONObject("data");
if (user.get("userName").toString() != null &&!"".equals(user.get("userName").toString())) {
/**/
}
} else {
getUserMesg(access_token, openid);
}
} catch (JSONException e) {
e.printStackTrace();
}
}
@Override
public void onFailure(int statusCode, String error_msg) {
}
});
} catch (JSONException e) {
e.printStackTrace();
}
}
});
}
//更新微信个人信息
private void getUserMessage(final String access_token, final String openid) {
String path = "https://api.weixin.qq.com/sns/userinfo?access_token="
+ access_token
+ "&openid="
+ openid;
OkHttpUtils.get().url(path).build().execute(new StringCallback() {
@Override
public void onError(okhttp3.Call call, Exception e) {
}
@Override
public void onResponse(String response) {
JSONObject jsonObject = null;
try {
jsonObject = new JSONObject(response);
String nickname = jsonObject.getString("nickname");
int sex = Integer.parseInt(jsonObject.get("sex").toString());
String headimgurl = jsonObject.getString("headimgurl");
String openid1 = jsonObject.getString("openid");
SharedPreferences userPreference = getSharedPreferences("user", Context.MODE_PRIVATE);
JSONObject param=new JSONObject();
try {
param.put("id",Integer.parseInt(userPreference.getString("userId",null)));
param.put("sex",1);
param.put("nickName",nickname);
param.put("userPic",headimgurl);
} catch (JSONException e) {
e.printStackTrace();
}
HttpUtil.getInstance().getMyOkHttp()
.post()
.url(HttpUtil.HOST_ADDRESS+"/userinfo/updata")
.jsonParams(param.toString())
.tag(this)
.enqueue(new JsonResponseHandler() {
@Override
public void onSuccess(int statusCode, JSONObject response) {
try {
Boolean istrue=(Boolean) response.get("success");
} catch (JSONException e) {
e.printStackTrace();
}
}
public void onFailure(int statusCode, String error_msg) {
Log.d(ContentValues.TAG, "doPostJSON onFailure:" + error_msg);
}
});
SharedPreferences.Editor editor = userPreference.edit();
editor.putString("nickName",nickname);
editor.putString("sex",sex+"");
editor.putString("userPic",headimgurl);
//*** 保存请求头
editor.commit();
} catch (JSONException e) {
e.printStackTrace();
}
// finish();
}
});
}
/**
* 获取微信的个人信息
*
* @param access_token
* @param openid
*/
private void getUserMesg(final String access_token, final String openid) {
String path = "https://api.weixin.qq.com/sns/userinfo?access_token="
+ access_token
+ "&openid="
+ openid;
OkHttpUtils.get().url(path).build().execute(new StringCallback() {
@Override
public void onError(okhttp3.Call call, Exception e) {
}
@Override
public void onResponse(String response) {
JSONObject jsonObject = null;
try {
jsonObject = new JSONObject(response);
String nickname = jsonObject.getString("nickname");
int sex = Integer.parseInt(jsonObject.get("sex").toString());
String headimgurl = jsonObject.getString("headimgurl");
String openid1 = jsonObject.getString("openid");
SharedPreferences userPreference = getSharedPreferences("user", Context.MODE_PRIVATE);
SharedPreferences.Editor editor = userPreference.edit();
editor.putString("nickName",nickname);
editor.putString("sex",sex+"");
editor.putString("userPic",headimgurl);
//*** 保存请求头
editor.commit();
Toast.makeText(WXEntryActivity.this, "登录成功,请按步骤进行", Toast.LENGTH_SHORT).show();
Intent intent = new Intent(WXEntryActivity.this, WxRegisterActivity.class);
startActivity(intent);
finish();
/* imageUrl(headimgurl);*/
// startLoca(nickname, openid1);
} catch (JSONException e) {
e.printStackTrace();
Toast.makeText(WXEntryActivity.this, "登录失败,请稍候重试", Toast.LENGTH_SHORT).show();
}
// finish();
}
});
}
//请求显示图像
private void imageUrl(final String url) {
new Thread(new Runnable() {
@Override
public void run() {
try {
URL url1 = new URL(url);
HttpURLConnection urlConnection = (HttpURLConnection) url1.openConnection();
urlConnection.setRequestMethod("GET");
urlConnection.setReadTimeout(2000);
int responseCode = urlConnection.getResponseCode();
if (responseCode == 200) {
InputStream inputStream = urlConnection.getInputStream();
final Bitmap bitmap = BitmapFactory.decodeStream(inputStream);
handler.post(new Runnable() {
@Override
public void run() {
imageView.setImageBitmap(bitmap);
}
});
}
} catch (Exception e) {
e.printStackTrace();
}
}
}).start();
}
private String getAccessToken(String code) {
String url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid="+ HttpHeader.APP_ID +"&secret="+HttpHeader.APP_SECRET+"&code="+code+"&grant_type=authorization_code";
HttpUtil.getInstance().getMyOkHttp()
.get()
.url(HttpUtil.HOST_ADDRESS+url)
.tag(this)
.enqueue(new JsonResponseHandler() {
@Override
public void onFailure(int statusCode, String error_msg) {
}
@Override
public void onSuccess(int statusCode, JSONObject response) {
Log.d("getAccess_token", "onSuccess: "+response.toString());
try {
String accessToken = response.getString("access_token");
String openID = response.getString("openid");
String refreshToken = response.getString("refresh_token");
long expires_in = response.getLong("expires_in");
SharedPreferences userPreference = getSharedPreferences("user", Context.MODE_PRIVATE);
SharedPreferences.Editor editor = userPreference.edit();
editor.putString("accessToken",accessToken);
editor.putString("openID",openID);
editor.putString("refreshToken",refreshToken);
editor.putString("expires_in",expires_in+"");
editor.commit();
} catch (JSONException e) {
e.printStackTrace();
}
}
});
return "";
}
private void getUserInfo() {
SharedPreferences sharedPreferences=getSharedPreferences("user",MODE_PRIVATE);
String accessToken=sharedPreferences.getString("accessToken","");
String openID=sharedPreferences.getString("accessToken","");
String refreshToken=sharedPreferences.getString("accessToken","");
long expires_in=Long.parseLong(sharedPreferences.getString("accessToken",""));
if (isAccessTokenIsInvalid() && System.currentTimeMillis() < expires_in) {
String uri = "https://api.weixin.qq.com/sns/userinfo?access_token=" + accessToken + "&openid=" + openID;
HttpUtil.getInstance().getMyOkHttp()
.get()
.url(HttpUtil.HOST_ADDRESS+uri)
.tag(this)
.enqueue(new JsonResponseHandler() {
@Override
public void onFailure(int statusCode, String error_msg) {
}
@Override
public void onSuccess(int statusCode, JSONObject response) {
Log.d("getUserInfo", "onSuccess: "+response.toString());
try {
String nikeName = response.getString("nickname");
} catch (JSONException e) {
e.printStackTrace();
}
}
});
}
}
private boolean isAccessTokenIsInvalid() {
SharedPreferences sharedPreferences=getSharedPreferences("user",MODE_PRIVATE);
String accessToken=sharedPreferences.getString("accessToken","");
String openID=sharedPreferences.getString("accessToken","");
String refreshToken=sharedPreferences.getString("accessToken","");
long expires_in=Long.parseLong(sharedPreferences.getString("accessToken",""));
String url = "https://api.weixin.qq.com/sns/auth?access_token=" + accessToken + "&openid=" + openID;
HttpUtil.getInstance().getMyOkHttp()
.get()
.url(HttpUtil.HOST_ADDRESS+url)
.tag(this)
.enqueue(new JsonResponseHandler() {
@Override
public void onFailure(int statusCode, String error_msg) {
}
@Override
public void onSuccess(int statusCode, JSONObject response) {
Log.d("isAccessTokenIsInvalid", "onSuccess: "+response.toString());
try {
int errorCode = response.getInt("errcode");
if (errorCode == 0) {
x=0;
}
} catch (JSONException e) {
e.printStackTrace();
}
}
});
if(x==0)
{
return true;
}
return false;
}
public static int x=1;
private void refreshAccessToken() {
SharedPreferences sharedPreferences=getSharedPreferences("user",MODE_PRIVATE);
String accessToken=sharedPreferences.getString("accessToken","");
String openID=sharedPreferences.getString("accessToken","");
String refreshToken=sharedPreferences.getString("accessToken","");
long expires_in=Long.parseLong(sharedPreferences.getString("accessToken",""));
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.remove("accessToken");
editor.remove("openID");
editor.remove("refreshToken");
editor.remove("expires_in");
editor.commit();
String uri = "https://api.weixin.qq.com/sns/oauth2/refresh_token?appid=" + HttpHeader.APP_ID + "&grant_type=refresh_token&refresh_token=" + refreshToken;
HttpUtil.getInstance().getMyOkHttp()
.get()
.url(HttpUtil.HOST_ADDRESS+uri)
.tag(this)
.enqueue(new JsonResponseHandler() {
@Override
public void onFailure(int statusCode, String error_msg) {
}
@Override
public void onSuccess(int statusCode, JSONObject response) {
Log.d(TAG, "onSuccess: "+response.toString());
try {
String accessToken = response.getString("access_token");
String openID = response.getString("openid");
String refreshToken = response.getString("refresh_token");
long expires_in = response.getLong("expires_in");
SharedPreferences userPreference = getSharedPreferences("user", Context.MODE_PRIVATE);
SharedPreferences.Editor editor = userPreference.edit();
editor.putString("accessToken",accessToken);
editor.putString("openID",openID);
editor.putString("refreshToken",refreshToken);
editor.putString("expires_in",expires_in+"");
editor.commit();
} catch (JSONException e) {
e.printStackTrace();
}
}
});
}
}
httpUtil.class
import com.tsy.sdk.myokhttp.MyOkHttp;
public class HttpUtil {
private static MyOkHttp myOkHttp = new MyOkHttp();
private static HttpUtil httpUtil = new HttpUtil();
private HttpUtil(){}
public static HttpUtil getInstance(){
return httpUtil;
}
public static String HOST_ADDRESS = "http://www.linjiajiazheng.com/api";
public static String HOST_ADDRESS_BYWX = "";
//public static String HOST_ADDRESS = "http://192.168.0.113:8080";
// public static String HOST_ADDRESS = "http://47.104.79.84/api";
public MyOkHttp getMyOkHttp() {
return myOkHttp;
}
}
build.gradle
dependencies {
implementation fileTree(include: ['*.jar'], dir: 'libs')
implementation 'com.android.support:appcompat-v7:28.0.0'
implementation 'com.android.support.constraint:constraint-layout:1.1.3'
implementation 'com.android.support:support-v4:28.0.0'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
implementation 'org.jetbrains:annotations-java5:15.0'
implementation 'com.jaeger.statusbarutil:library:1.5.1'
implementation 'com.ashokvarma.android:bottom-navigation-bar:2.1.0'
implementation 'com.android.support:appcompat-v7:28.0.0'
implementation 'com.squareup.okio:okio:1.5.0'
implementation 'com.google.code.gson:gson:2.8.0'
implementation 'com.tsy:myokhttp:1.1.4'
implementation 'com.squareup.picasso:picasso:2.5.2'
implementation 'com.android.support:cardview-v7:28.0.0'
implementation 'com.ansen.http:okhttpencapsulation:1.0.1'
implementation 'com.makeramen:roundedimageview:2.2.1'
implementation 'com.android.support:design:28.0.0'
implementation 'io.netty:netty-all:4.1.31.Final'
implementation 'com.smarttop:jd-address:1.1.0'
implementation 'com.kyleduo.switchbutton:library:2.0.0'
implementation(name: 'alipaySdk-15.6.0-20190226104053', ext: 'aar')
implementation 'com.zhy.base:fileprovider:1.0.0'
implementation 'com.tsy:myokhttp:1.1.4'
implementation 'cn.jiguang.sdk:jpush:3.2.0'
// 此处以JPush 3.2.0 版本为例。
implementation 'cn.jiguang.sdk:jcore:1.2.7'
// 此处以JCore 1.2.7 版本为例。
implementation 'com.necer.ncalendar:ncalendar:3.4.5'
implementation 'com.sunfusheng:marqueeview:1.3.3'
implementation 'com.lzy.widget:imagepicker:0.6.1'
//指定版本 ImagePicker
implementation 'com.xcheng:easypermission:1.0.1'
implementation 'q.rorbin:VerticalTabLayout:1.2.5'
implementation 'com.github.newcaoguo:EasyRollingNumber:1.0'
implementation 'org.greenrobot:eventbus:3.0.0'
implementation 'org.jsoup:jsoup:1.10.3'
implementation 'com.tencent.mm.opensdk:wechat-sdk-android-with-mta:+'
implementation 'com.zhy:okhttputils:2.4.1'
implementation 'junit:junit:4.12'
implementation 'anylife.downloadinstaller:downloadInstaller:1.0.4'
implementation 'com.github.d746997:ShopcartCode:1.1'
implementation 'com.ansen.http:okhttpencapsulation:1.0.1'
implementation('com.github.gzu-liyujiang.AndroidPicker:WheelPicker:1.5.4') {
exclude group: 'com.android.support'
}
//环信客服SDK
implementation 'com.hyphenate:kefu-easeui-android:latest.release'
//或者 compile 'com.hyphenate:kefu-easeui-android:1.1.9r2'
//EaseUI中 头像获取用到了glide,请添加glide库
implementation 'com.github.bumptech.glide:glide:4.7.1' //其他版本也可以
implementation 'com.easemob:kefu-sdk:1.1.9r2'
}
manifestPlaceholders = [
JPUSH_PKGNAME: applicationId,
JPUSH_APPKEY : "f76bab6b14c3ea54d3dee16e", //JPush 上注册的包名对应的 Appkey.
JPUSH_CHANNEL: "developer-default", //暂时填写默认值即可. 这里记录的是jpush 和微信无关
]