91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

java如何實現安卓app和微信授權登錄功能

發布時間:2021-09-13 14:11:57 來源:億速云 閱讀:167 作者:小新 欄目:編程語言

這篇文章主要為大家展示了“java如何實現安卓app和微信授權登錄功能”,內容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領大家一起研究并學習一下“java如何實現安卓app和微信授權登錄功能”這篇文章吧。


準備

賬號體系

注冊微信開放平臺,創建移動應用,填寫一系列的信息,在應用平臺填寫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);
    //建議動態監聽微信啟動廣播進行注冊到微信
    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);
      // 隱藏狀態欄
      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/oauth3/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 又可以干很多事情
          // 在這里可以 對接 自己的 系統的用戶信息等
          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接口,發送數據到微信
    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接口,發送數據到微信
    App.iwxapi.sendReq(req);
}

倆輔助函數

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;
}

注意事項

這個逼庫經常加載失敗,時不時的抽風

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;
  }
}

以上是“java如何實現安卓app和微信授權登錄功能”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

大方县| 类乌齐县| 白水县| 板桥市| 扶余县| 万山特区| 工布江达县| 叙永县| 宣威市| 屏南县| 五常市| 塔城市| 六盘水市| 长沙市| 通州区| 自贡市| 上犹县| 和林格尔县| 额济纳旗| 隆昌县| 长治市| 衡阳县| 靖安县| 德兴市| 土默特左旗| 仪征市| 灵石县| 吐鲁番市| 特克斯县| 娄底市| 卫辉市| 乳源| 兴文县| 喀喇沁旗| 五家渠市| 松溪县| 巴里| 社旗县| 墨竹工卡县| 格尔木市| 宁蒗|