您的位置:首页 > 移动开发 > 微信开发

android集成第三方微信登录

2018-03-07 11:31 155 查看

第一步:

在微信开放平台创建安卓应用,需要输入的包名和签名就不用再提吧,不知道的自行百度。 
应用创建完毕后会得到两个值:AppID、AppSecret,用这两个值来请求微信。 
然后去微信开放平台的资源中心 ,选择安卓资源包 ,如图: 



注意:输入的包名和签名要和项目中的一致!

第二步:

将安卓资源包中的libammsdk.jar 导入到项目中的libs文件夹下面。 
并在项目中的创建一个包 ,包名必须为 package+wxapi,比如你的包名是com.xxx.android,那就要创建一个 com.xxx.android.wxapi。然后在这个 包下面 建一个类 ,类名为WXEntryActivity。 
在AndroidManifest.xml 注册这个类
<activity
android:name="com.xxx.android.wxapi.WXEntryActivity"
android:configChanges="keyboardHidden|orientation|screenSize"
android:exported="true"
android:launchMode="singleTop"
android:screenOrientation="portrait"
android:theme="@android:style/Theme.Translucent.NoTitleBar" >
</activity>
1
2
3
4
5
6
7
8
下面是WXEntryActivity中的代码:
public class WXEntryActivity extends Activity implements IWXAPIEventHandler {
private IWXAPI api;
private BaseResp resp = null;
private String WX_APP_ID = "创建应用后得到的APP_ID";
// 获取第一步的code后,请求以下链接获取access_token
private String GetCodeRequest = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code";
// 获取用户个人信息
private String GetUserInfo = "https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID";
private String WX_APP_SECRET = "创建应用后得到的APP_SECRET";

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
api = WXAPIFactory.createWXAPI(this, WX_APP_ID, false);
api.handleIntent(getIntent(), this);
}

// 微信发送请求到第三方应用时,会回调到该方法
@Override
public void onReq(BaseReq req) {
finish();
}

// 第三方应用发送到微信的请求处理后的响应结果,会回调到该方法
@Override
public void onResp(BaseResp resp) {
String result = "";
if (resp != null) {
resp = resp;
}
switch (resp.errCode) {
case BaseResp.ErrCode.ERR_OK:
result = "发送成功";
Toast.makeText(this, result, Toast.LENGTH_LONG).show();
String code = ((SendAuth.Resp) resp).code;

/*
* 将你前面得到的AppID、AppSecret、code,拼接成URL 获取access_token等等的信息(微信)
*/
String get_access_tok
4000
en = getCodeRequest(code);
AsyncHttpClient client = new AsyncHttpClient();
client.post(get_access_token, new JsonHttpResponseHandler() {
@Override
public void onSuccess(int statusCode, JSONObject response) {
// TODO Auto-generated method stub
super.onSuccess(statusCode, response);
try {

if (!response.equals("")) {
String access_token = response
.getString("access_token");
String openid = response.getString("openid");
String get_user_info_url = getUserInfo(
access_token, openid);
getUserInfo(get_user_info_url);
}

} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
});

finish();
break;
case BaseResp.ErrCode.ERR_USER_CANCEL:
result = "发送取消";
Toast.makeText(this, result, Toast.LENGTH_LONG).show();
finish();
break;
case BaseResp.ErrCode.ERR_AUTH_DENIED:
result = "发送被拒绝";
Toast.makeText(this, result, Toast.LENGTH_LONG).show();
finish();
break;
default:
result = "发送返回";
Toast.makeText(this, result, Toast.LENGTH_LONG).show();
finish();
break;
}
}

/**
* 通过拼接的用户信息url获取用户信息
*
* @param user_info_url
*/
private void getUserInfo(String user_info_url) {
AsyncHttpClient client = new AsyncHttpClient();
client.get(user_info_url, new JsonHttpResponseHandler() {
@Override
public void onSuccess(int statusCode, JSONObject response) {
// TODO Auto-generated method stub
super.onSuccess(statusCode, response);
try {

System.out.println("获取用户信息:" + response);

if (!response.equals("")) {
String openid = response.getString("openid");
String nickname = response.getString("nickname");
String headimgurl = response.getString("headimgurl");

}

} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
});
}

@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
setIntent(intent);
api.handleIntent(intent, this);
finish();
}

/**
* 获取access_token的URL(微信)
*
* @param code
*            授权时,微信回调给的
* @return URL
*/
private String getCodeRequest(String code) {
String result = null;
GetCodeRequest = GetCodeRequest.replace("APPID",
urlEnodeUTF8(WX_APP_ID));
GetCodeRequest = GetCodeRequest.replace("SECRET",
urlEnodeUTF8(WX_APP_SECRET));
GetCodeRequest = GetCodeRequest.replace("CODE", urlEnodeUTF8(code));
result = GetCodeRequest;
return result;
}

/**
* 获取用户个人信息的URL(微信)
*
* @param access_token
*            获取access_token时给的
* @param openid
*            获取access_token时给的
* @return URL
*/
private String getUserInfo(String access_token, String openid) {
String result = null;
GetUserInfo = GetUserInfo.replace("ACCESS_TOKEN",
urlEnodeUTF8(access_token));
GetUserInfo = GetUserInfo.replace("OPENID", urlEnodeUTF8(openid));
result = GetUserInfo;
return result;
}

private String urlEnodeUTF8(String str) {
String result = str;
try {
result = URLEncoder.encode(str, "UTF-8");
} catch (Exception e) {
e.printStackTrace();
}
return result;
}

}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172

第三步:

在Activity中调起访问微信
public class LoginActivity extends Activity implements OnClickListener {

private Button login;

// 微信登录
private static IWXAPI WXapi;
private String WX_APP_ID = "创建应用后得到的APP_ID";

@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
// 启动activity时不自动弹出软键盘
getWindow().setSoftInputMode(
WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.login);
init();
}

private void init() {
login = (Button) findViewById(R.id.bt_login);

login.setOnClickListener(this);
}

@Override
public void onClick(View v) {
// TODO Auto-generated method stub
switch (v.getId()) {

case R.id.login:
WXLogin();
break;
default:
break;
}

}

/**
* 登录微信
*/
private void WXLogin() {
WXapi = WXAPIFactory.createWXAPI(this, WX_APP_ID, true);
WXapi.registerApp(WX_APP_ID);
SendAuth.Req req = new SendAuth.Req();
req.scope = "snsapi_userinfo";
req.state = "wechat_sdk_demo";
WXapi.sendReq(req);

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: