Android微信登陸和微信分享,和登陸分享的回撥處理
阿新 • • 發佈:2019-02-19
首先是微信登陸。
直接上程式碼
在點選登陸時候
public class LandActivity extends Activity { private Button land; private LinearLayout skip; private IWXAPI api; private Handler handler=new Handler(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_land); api= WXAPIFactory.createWXAPI(LandActivity.this,"wx9433d9bf10c7a032",true); init(); } public void init(){ land= (Button) findViewById(R.id.land);//登陸 land.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { SharedPreferences sharedPreferences=getSharedPreferences("landingwx", Context.MODE_PRIVATE); SharedPreferences.Editor editor=sharedPreferences.edit(); editor.putString("landingwx","oneland"); editor.commit(); api.registerApp("wx9433d9bf10c7a032"); SendAuth.Req req = new SendAuth.Req(); //授權讀取使用者資訊 req.scope = "snsapi_userinfo"; //自定義資訊 req.state = "beoka"; //向微信傳送請求 api.sendReq(req); handler.postDelayed(new Runnable() { @Override public void run() { finish(); } },20000); } });
這個其實就可以調取登陸了,但是我們還要請求接口才行 。
請求介面 我放到回撥裡面說、
接下來是我們這個分享
public class AboutActivity extends Activity { private ImageView about_b; private ImageView about_update; private TextView share; private IWXAPI api; private int modelIndex; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_about); api= WXAPIFactory.createWXAPI(AboutActivity.this,"wx9433d9bf10c7a032",true); api.registerApp("wx9433d9bf10c7a032"); about_b= (ImageView) findViewById(R.id.about_b); about_b.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { finish(); } }); about_update= (ImageView) findViewById(R.id.about_update); about_update.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Toast toast=Toast.makeText(AboutActivity.this,"已是最新版本",Toast.LENGTH_LONG); toast.setGravity(Gravity.CENTER, 0, 0); toast.show(); } }); share= (TextView) findViewById(R.id.share); share.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Dialog(); } }); } private void share2weixin(int flag) { if (!api.isWXAppInstalled()) { Toast.makeText(AboutActivity.this, "您還未安裝微信客戶端", Toast.LENGTH_SHORT).show(); return; } WXWebpageObject webpage = new WXWebpageObject(); webpage.webpageUrl = "http://mp.weixin.qq.com/s/ObyplzD9MQJ1OcXATN64hQ"; WXMediaMessage msg = new WXMediaMessage(webpage); msg.title = "頭部按摩器"; msg.description = "四川千里倍益康"; Bitmap thumb = BitmapFactory.decodeResource(getResources(), R.mipmap.beoka); msg.setThumbImage(thumb); SendMessageToWX.Req req = new SendMessageToWX.Req(); req.transaction = String.valueOf(System.currentTimeMillis()); req.message = msg; req.scene = flag; api.sendReq(req); finish(); } private void Dialog() { AlertDialog.Builder builder = new AlertDialog.Builder(this); final String[] models = new String[]{"微信好友", "微信朋友圈"}; builder.setTitle("分享給朋友"); //設定標題 builder.setSingleChoiceItems(models, modelIndex, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss();//消除對話方塊 modelIndex = which; if(modelIndex==1){ share2weixin(1); }else if(modelIndex==0) { share2weixin(0);//分享到朋友圈 } } }).show(); } }
這裡我只列舉了一個分享網頁的方法。其他差不多
接下來是回撥
主要就是這裡區分 登陸和分享的回撥處理public class WXEntryActivity extends Activity implements IWXAPIEventHandler{ private IWXAPI api; private String body; private String bod; private String nickname; private String headimgurl; private String unionid; private static final int RETURN_MSG_TYPE_LOGIN = 1; private static final int RETURN_MSG_TYPE_SHARE = 2; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_wxentry); api= WXAPIFactory.createWXAPI(WXEntryActivity.this,"wx9433d9bf10c7a032"); api.registerApp("wx9433d9bf10c7a032"); //等待微信回撥 api.handleIntent(getIntent(), this); } // 微信傳送請求到第三方應用時,會回撥到該方法 @Override public void onReq(BaseReq baseReq) { } // 第三方應用傳送到微信的請求處理後的響應結果,會回撥到該方法 @Override public void onResp(BaseResp baseResp) { Bundle bundle=getIntent().getExtras(); SendAuth.Resp resp=new SendAuth.Resp(bundle);//這個是登陸必須用到的,要用來獲取code值的。 //而區分分享回撥返回的結果和登陸回撥返回的結果 是用baseResp.getType()== ConstantsAPI.COMMAND_SENDAUTH //和baseResp.getType()==ConstantsAPI.COMMAND_SENDMESSAGE_TO_WX //注意哈 這裡的baseResp和resp是不同的哈。resp這個是登陸用到的 //獲取到code之後,需要呼叫介面獲取到access_token if(baseResp.errCode==BaseResp.ErrCode.ERR_OK){ if(baseResp.getType()== ConstantsAPI.COMMAND_SENDAUTH){ String code=resp.token; getAsync("https://api.weixin.qq.com/sns/oauth2/access_token?appid=wx9433d9bf10c7a032&secret=183112ea358e6c84c5a37f11c03c2478&code="+code+"&grant_type=authorization_code"); }else if(baseResp.getType()==ConstantsAPI.COMMAND_SENDMESSAGE_TO_WX){ Toast.makeText(WXEntryActivity.this, "分享成功", Toast.LENGTH_SHORT).show(); finish(); } }else { WXEntryActivity.this.finish(); } } private void getAsync(String url) { OkHttpClient client = new OkHttpClient(); Request request = new Request.Builder() .url(url) .build(); client.newCall(request).enqueue(new Callback() { @Override public void onFailure(Call call, IOException e) { } @Override public void onResponse(Call call, Response response) throws IOException { if (null != response.cacheResponse()) { String str = response.cacheResponse().toString(); Log.e("wangshu", "cache---" + str); } else { body=response.body().string(); String str = response.networkResponse().toString(); Log.e("wangshu", "network---" + str); Log.e("body", "body---" + body); runOnUiThread(new Runnable() { @Override public void run() { try { JSONObject jsonObject=new JSONObject(body); String access_token=jsonObject.getString("access_token"); int expires_in=jsonObject.getInt("expires_in"); String refresh_token=jsonObject.getString("refresh_token"); String openid=jsonObject.getString("openid"); String scope=jsonObject.getString("scope"); String unionid=jsonObject.getString("unionid"); getAsyncpersonData("https://api.weixin.qq.com/sns/userinfo?access_token="+access_token+"&openid="+openid); Log.e("access_token\n",access_token); Log.e("expires_in\n", String.valueOf(expires_in)); Log.e("refresh_token\n",refresh_token); Log.e("openid\n",openid); Log.e("scope\n",scope); Log.e("unionid\n",unionid); } catch (JSONException e) { e.printStackTrace(); } Toast.makeText(getApplicationContext(), "請求成功", Toast.LENGTH_SHORT).show(); } }); } } }); } private void getAsyncpersonData(String url) { OkHttpClient client = new OkHttpClient(); Request request = new Request.Builder() .url(url) .build(); Response response = null; client.newCall(request).enqueue(new Callback() { @Override public void onFailure(Call call, IOException e) { } @Override public void onResponse(Call call, Response response) throws IOException { if (null != response.cacheResponse()) { String str = response.cacheResponse().toString(); Log.e("wangshu", "cache---" + str); } else { bod=response.body().string(); String str = response.networkResponse().toString(); Log.e("wangshu", "network---" + str); Log.e("bod", "bod---" + bod); runOnUiThread(new Runnable() { @Override public void run() { try { JSONObject jsonObject=new JSONObject(bod); nickname=jsonObject.getString("nickname");//微信使用者暱稱 headimgurl=jsonObject.getString("headimgurl");//微信使用者頭像 unionid=jsonObject.getString("unionid");//使用者統一標識 SharedPreferences sharedPreferences=getSharedPreferences("weixinSave", Context.MODE_PRIVATE); SharedPreferences.Editor editor=sharedPreferences.edit(); editor.putString("nickname",nickname); editor.putString("headimgurl",headimgurl); editor.putString("unionid",unionid); editor.commit(); // String nickname=jsonObject.getString("nickname"); //Glide.with(WXEntryActivity.this).load(headimgurl); Log.e("access_token",nickname); Log.e("refresh_token",headimgurl); Log.e("openid",unionid); } catch (JSONException e) { e.printStackTrace(); } Toast.makeText(getApplicationContext(), "請求成功", Toast.LENGTH_SHORT).show(); SharedPreferences sharedPreferences_wx=getSharedPreferences("landingwx",Context.MODE_PRIVATE); String land=sharedPreferences_wx.getString("landingwx",""); if("oneland".equals(land)){ Intent intent=new Intent(WXEntryActivity.this, MainActivity.class); startActivity(intent); finish(); }else if("meland".equals(land)){ Intent intentdis=new Intent(); intentdis.setAction("com.example.bluetooth.le.WX"); intentdis.putExtra("name",nickname); intentdis.putExtra("headurl",headimgurl); sendBroadcast(intentdis); finish(); } } }); } } }); } }
//獲取到code之後,需要呼叫介面獲取到access_token
if(baseResp.errCode==BaseResp.ErrCode.ERR_OK){
if(baseResp.getType()== ConstantsAPI.COMMAND_SENDAUTH){
//登陸結果回撥
String code=resp.token;
getAsync("https://api.weixin.qq.com/sns/oauth2/access_token?appid=wx9433d9bf10c7a032&secret=183112ea358e6c84c5a37f11c03c2478&code="+code+"&grant_type=authorization_code");
}else if(baseResp.getType()==ConstantsAPI.COMMAND_SENDMESSAGE_TO_WX){
Toast.makeText(WXEntryActivity.this, "分享成功", Toast.LENGTH_SHORT).show();
finish();
}