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

时间:2024-04-01 19:02:36

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

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