android-----------实现微信登录和分享功能。

来源:互联网 发布:知乎周刊pdf 编辑:程序博客网 时间:2024/06/05 17:43

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包,安装到模拟机或者是真机运行。