亚洲视频二区_亚洲欧洲日本天天堂在线观看_日韩一区二区在线观看_中文字幕不卡一区

公告:魔扣目錄網(wǎng)為廣大站長提供免費收錄網(wǎng)站服務,提交前請做好本站友鏈:【 網(wǎng)站目錄:http://www.430618.com 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網(wǎng)站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

本篇文章給大家了解安卓app和微信授權登錄及分享完整對接,有一定的參考價值,有需要的朋友可以參考一下,希望對你們有所助。


淺析安卓app和微信授權登錄及分享完整對接(代碼分享)


安卓app和微信授權登錄、分享完整對接

準備

賬號體系

注冊微信開放平臺,創(chuàng)建移動應用,填寫一系列的信息,在應用平臺填寫app簽名和包名,審核通過之后,取得AppIDAppSecret


加載sdk和初始化

加載微信sdk

implementation 'com.tencent.mm.opensdk:wechat-sdk-android-without-mta:+'

初始化

public class App extends Application {
  public static IWXAPI iwxapi;
  public void onCreate() {
    super.onCreate();
 
    // 通過WXAPIFactory工廠,獲取IWXAPI的實例
    iwxapi = WXAPIFactory.createWXAPI(this, BuildConfig.WXAPP_ID, true);
    // 將應用的appId注冊到微信
    iwxapi.registerApp(BuildConfig.WXAPP_ID);
    //建議動態(tài)監(jiān)聽微信啟動廣播進行注冊到微信
    registerReceiver(new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            // 將該app注冊到微信
            iwxapi.registerApp(BuildConfig.APPLICATION_ID);
        }
    }, new IntentFilter(ConstantsAPI.ACTION_REFRESH_WXAPP));
  }
}

WXAPP_ID為開放平臺提供的AppID

APPLICATION_IDapp包名

授權登錄部分

app根目錄(/java/com.xxx.xxx/) 新建Packagewxapi, 在wxapi新建Activity名為:WXEntryActivity,大概長這樣:/java/com.xxx.xxx/wxapi/WXEntryActivity.java

public class WXEntryActivity extends Activity implements IWXAPIEventHandler {
  @Override
  protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      // 隱藏狀態(tài)欄
      getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
      //接收到分享以及登錄的intent傳遞handleIntent方法,處理結果
      App.iwxapi.handleIntent(getIntent(), this);
 
  }
 
  @Override
  public void onReq(BaseReq baseReq) {
  }
 
  @Override
  public void onResp(BaseResp baseResp) {
    switch (baseResp.errCode) {
      case BaseResp.ErrCode.ERR_OK:  //微信回調成功
        String code = ((SendAuth.Resp) baseResp).code;
        //取得微信的code ,就可以干很多事情
        finish();
        break;
      case BaseResp.ErrCode.ERR_AUTH_DENIED://用戶拒絕授權
        finish();
        break;
      case BaseResp.ErrCode.ERR_USER_CANCEL://用戶取消
        finish();
        break;
      default:
        finish();
        break;
    }
  }
}

通過code取得open信息,比如openidaccess_token等一系列信息。

private void getOpenInfo(String code) {
  OkHttpUtils.get().url("https://api.weixin.qq.com/sns/oauth2/access_token")
          .addParams("appid", BuildConfig.WXAPP_ID)
          .addParams("secret", BuildConfig.WXAPP_Secret)
          .addParams("code", code)
          .addParams("grant_type", "authorization_code")
          .build().execute(new StringCallback() {
      @Override
      public void onError(Call call, Exception e, int id) {
          Toast.makeText(WXEntryActivity.this, "微信授權失敗", Toast.LENGTH_LONG).show();
          finish();
      }
 
      @Override
      public void onResponse(String response, int id) {
          JSONObject jsonObject = JSONObject.parseObject(response);
          String openId = jsonObject.getString("openid");
          String access_token = jsonObject.getString("access_token");
          Log.v("openId", openId + "---" + access_token);
          // 取得openid 又可以干很多事情
          // 在這里可以 對接 自己的 系統(tǒng)的用戶信息等
          finish();
      }
  });
}

通過openid可以查詢用戶昵稱,頭像等信息。

private void getUserInfo(String access_token, String openid) {
  OkHttpUtils.get().url("https://api.weixin.qq.com/sns/userinfo")
          .addParams("access_token", access_token)
          .addParams("openid", openid)
          .build().execute(new StringCallback() {
      @Override
      public void onError(Call call, Exception e, int id) {
          finish();
          Toast.makeText(WXEntryActivity.this, "微信授權失敗", Toast.LENGTH_LONG).show();
      }
 
      @Override
      public void onResponse(String response, int id) {
          //JSONObject jsonObject = JSONObject.parseObject(response);
          Log.v("response", response);
      }
  });
}


分享部分

分享圖片:

/**
*bmp 分享圖片
*width 縮略圖寬
*height 縮略圖高
*sence 分享場景 0:分享到對話,1:朋友圈 ,2:分享到收藏
*/
public static void Image(Bitmap bmp, int width, int height, int sence) {
    //初始化 WXImageObject 和 WXMediaMessage 對象
    WXImageObject imgObj = new WXImageObject(bmp);
    WXMediaMessage msg = new WXMediaMessage();
    msg.mediaObject = imgObj;
 
    //設置縮略圖
    Bitmap thumbBmp = Bitmap.createScaledBitmap(bmp, width, height, true);
    //bmp.recycle();
    msg.thumbData = bmpToByteArray(thumbBmp);
 
    //構造一個Req
    SendMessageToWX.Req req = new SendMessageToWX.Req();
    req.transaction = buildTransaction("img");
    req.message = msg;
    req.scene = sence;
    req.userOpenId = App.userInfo.getOpenId();
    //調用api接口,發(fā)送數(shù)據(jù)到微信
    App.iwxapi.sendReq(req);
}

分享鏈接

/**
*url: 分享鏈接
*title: 分享標題
*desc: 分享描述
*thumbBmp: 分享縮略圖
*sence: 分享場景 0:分享到對話,1:朋友圈 ,2:分享到收藏
*/
public static void Url(String url, String title, String desc, Bitmap thumbBmp, int sence) {
    //初始化一個WXWebpageObject,填寫url
    WXWebpageObject webpage = new WXWebpageObject();
    webpage.webpageUrl = url;
 
    //用 WXWebpageObject 對象初始化一個 WXMediaMessage 對象
    WXMediaMessage msg = new WXMediaMessage(webpage);
    msg.title = title;
    msg.description = desc;
    msg.thumbData = bmpToByteArray(thumbBmp);
 
    //構造一個Req
    SendMessageToWX.Req req = new SendMessageToWX.Req();
    req.transaction = buildTransaction("webpage");
    req.message = msg;
    req.scene = sence;
    req.userOpenId = App.userInfo.getOpenId();
 
    //調用api接口,發(fā)送數(shù)據(jù)到微信
    App.iwxapi.sendReq(req);
}

倆輔助函數(shù)

private static String buildTransaction(String type) {
    return (type == null) ? String.valueOf(System.currentTimeMillis()) : type + System.currentTimeMillis();
}
 
private static byte[] bmpToByteArray(Bitmap bmp) {
    ByteArrayOutputStream output = new ByteArrayOutputStream();
    bmp.compress(Bitmap.CompressFormat.PNG, 100, output);
 
    byte[] result = output.toByteArray();
    try {
        output.close();
    } catch (Exception e) {
        e.printStackTrace();
    }
    return result;
}


注意事項

這個逼庫經(jīng)常加載失敗,時不時的抽風

implementation 'com.tencent.mm.opensdk:wechat-sdk-android-without-mta:+'

解決辦法:把包給down 下來,手動加載 ,在這里:https://bintray.com/wechat-sdk-team/maven

下載對應版本庫如: wechat-sdk-android-without-mta-6.6.5.aar,放到libs目錄,手動加載即可

android {
    compileSdkVersion 28
 
    repositories {  //本地aar方式
      flatDir {
        dirs 'libs' //this way we can find the .aar file in libs folder
      }
  }
}
 
implementation(name: 'wechat-sdk-android-without-mta-6.6.5', ext: 'aar')


分享之后關閉不掉的問題,也就是finish失效

事實上在回調之后,不是BaseResp.ErrCode.ERR_OK就完了,這里面得還有一層邏輯判斷:

public void onResp(BaseResp baseResp) {
  switch (baseResp.errCode) {
      case BaseResp.ErrCode.ERR_OK:
        // 在此處應該還需要判斷 回調成功類型。是登錄還是分享,然后做相對應的操作
        switch (baseResp.getType()) {
          case ConstantsAPI.COMMAND_SENDAUTH: //登錄成功的回調
              String code = ((SendAuth.Resp) baseResp).code;
              // 登錄 todo              
              break;
          case ConstantsAPI.COMMAND_SENDMESSAGE_TO_WX: //分享成功
              // 分享 todo
              Toast.makeText(getApplicationContext(), "分享成功!", Toast.LENGTH_LONG).show();
              finish();
              break;
          default:
              finish();
              break;
        }
      case BaseResp.ErrCode.ERR_USER_CANCEL://用戶取消
        finish();
        break;
      default:
        finish();
        break;
  }
}


分享到:
標簽:安卓app分享對接 微信授權登錄
用戶無頭像

網(wǎng)友整理

注冊時間:

網(wǎng)站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網(wǎng)站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網(wǎng)站吧!
最新入駐小程序

數(shù)獨大挑戰(zhàn)2018-06-03

數(shù)獨一種數(shù)學游戲,玩家需要根據(jù)9

答題星2018-06-03

您可以通過答題星輕松地創(chuàng)建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數(shù)有氧達人2018-06-03

記錄運動步數(shù),積累氧氣值。還可偷

每日養(yǎng)生app2018-06-03

每日養(yǎng)生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定