android-----------实现微信登录和分享功能。
1.通过微信官网获得APPID和.jks文件。
(.jks文件的获得是通过AS中的Build-Generate Signed APK-如果已有.jks就选择已有的路径,对应好两次的密码。 )
2.导依赖
compile 'com.tencent.mm.opensdk:wechat-sdk-android-with-mta:+'
3.添加权限
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
4.要使你的程序启动后微信终端能响应你的程序,必须在代码中向微信终端注册你的id。
public static final String APP_ID="wxbd3e6bba8efbae73";//(这个APP_ID为在微信开放平台创建应用后获得的ID)
private IWXAPI api;//要导入微信相关包
private String text="zgwhjhjjh";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
login=(TextView)findViewById(R.id.login) ;
api= WXAPIFactory.createWXAPI(this, APP_ID,true);
api.registerApp(APP_ID);
5.Android平台应用授权登录接入代码示例:
final SendAuth.Req req2 = new SendAuth.Req();
req2.scope = "snsapi_userinfo";
req2.state = "wechat_sdk_demo_test";
api.sendReq(req2);
6.需要注意的是在AS中Build-Generate signed APK中的.jks文件和两次密码必须对应好,最后把生成的APK文件导入到有微信的模拟器或者真机上就可以实现登录了。
7.登录结果的处理
请求成功后,可拉起微信的授权登录页面。用户点击“确认登录”后,SDK通过SendAuth的Resp返回数据给调用方(即app),此时WXEntryActivity中的public void onResp(BaseResp resp)方法被调用(微信、朋友圈分享成功后,此方法同样会被调用),微信登录的返回值说明如下。这里app可以做相关的处理,见WXEntryActivity.Java文件中的处理,取code为下一步获取access_token和openid等信息做准备。此处获取code的方法
1)微信提供的登录结果的类叫WXEntryActivity,
微信开放平台有个 不成文的规定(文档里没有说明),就是回调的Activity必须是:你的包名+.wxapi.WXEntryActivity.java 如下:
public class WXEntryActivity extends AppCompatActivity implements IWXAPIEventHandler { private IWXAPI api; private TextView textView; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_wxentry); textView= (TextView) findViewById(R.id.GG); api = WXAPIFactory.createWXAPI(this, "wxbd3e6bba8efbae73", false); // api.registerApp("wxbd3e6bba8efbae73"); api.handleIntent(getIntent(),this); textView.setText("GGHHHHHHHHH"); } // 微信发送请求到第三方应用时,会回调到该方法 @Override protected void onNewIntent(Intent intent) { super.onNewIntent(intent); setIntent(intent); api.handleIntent(intent,this); } @Override public void onReq(BaseReq baseReq) { } @Override public void onResp(BaseResp baseResp) { int result = 0; Toast.makeText(this, "baseresp.getType = " + baseResp.getType(), Toast.LENGTH_SHORT).show(); switch (baseResp.errCode) { case BaseResp.ErrCode.ERR_OK: result = R.string.errcode_success; break; case BaseResp.ErrCode.ERR_USER_CANCEL: result = R.string.errcode_cancel; break; case BaseResp.ErrCode.ERR_AUTH_DENIED: result = R.string.errcode_deny; break; case BaseResp.ErrCode.ERR_UNSUPPORT: result = R.string.errcode_unsupported; break; default: result = R.string.errcode_unknown break; } Toast.makeText(this, result, Toast.LENGTH_LONG).show(); textView.setText("GG"+result+baseResp.getType()); this.finish(); } }
注:res-values-strings中:
<resources> <string name="app_name">WeixinDemo</string> <string name="errcode_success">发送成功</string> <string name="errcode_cancel">发送取消</string> <string name="errcode_deny">发送被拒绝</string> <string name="errcode_unsupported">不支持错误</string> <string name="errcode_unknown">发送返回</string> </resources>
2)在MainActivity中调用微信登录和微信分享
public class MainActivity extends AppCompatActivity { private Button login; //(这个APP_ID为在微信开放平台创建应用后获得的ID) public static final String APP_ID="wxbd3e6bba8efbae73"; private IWXAPI api;//要导入微信相关包 private String text="zgwhjhjjh"; // E:\yidonghulian\WeixinDemo\app\build\outputs @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); api= WXAPIFactory.createWXAPI(this, APP_ID,true); api.registerApp(APP_ID); //微信分享功能的实现 /* WXTextObject textObj=new WXTextObject(); textObj.text=text; WXMediaMessage msg=new WXMediaMessage(); msg.mediaObject=textObj; msg.description=text; SendMessageToWX.Req req=new SendMessageToWX.Req(); req.transaction=String.valueOf(System.currentTimeMillis()); req.message=msg; api.sendReq(req);*/ login=(Button)findViewById(R.id.login); login.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { //调用微信登录 final SendAuth.Req req2 = new SendAuth.Req(); req2.scope = "snsapi_userinfo"; req2.state = "wechat_sdk_demo_test"; api.sendReq(req2); } }); } }
8.记得,在配置文件Androidmanifest注册WXPayEntryActivity
<activity android:name="(你的包名).wxapi.WXEntryActivity " android:exported="true"//这一句一定不能少 android:launchMode="singleTop" />
9.每次测试需要打包测试,需要找到生成的APK包,安装到模拟机或者是真机运行。