根據官方接入指南第一步需要申請AppId,這裏我們不對此做介紹。
下面主要介紹Andoid Studio打開微端項目的一些配置及其代碼
1、在build.gradle文件中,添加如下依賴即可:
dependencies {
compile 'com.tencent.mm.opensdk:wechat-sdk-android-with-mta:+'
}
這裏注意一下,是在app模塊下的build.gradle文件添加
2、AndroidManifest.xml 配置
添加必要的權限支持:
<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"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
3、註冊到微信
private
void
regToWx() {
// 通過WXAPIFactory工廠,獲取IWXAPI的實例
api = WXAPIFactory.createWXAPI(
this
, Constants.APP_ID,
true
);
// 將應用的appId註冊到微信
api.registerApp(Constants.APP_ID);
}
並在註冊接收JS消息的方法中調用微信登錄授權請求CODE
private
void
setExternalInterfaces() {
launcher.setExternalInterface(
"callNative"
,
new
INativePlayer.INativeInterface() {
@Override
public
void
callback(String s) {
Log.d(
"Egret Launcher"
, s);
getCode();
}
});
}
private
void
getCode(){
// send oauth request
final
SendAuth.Req req =
new
SendAuth.Req();
req.scope =
"snsapi_userinfo"
;
req.state =
"none"
;
api.sendReq(req);
}
4、在你的包名相應目錄下新建一個wxapi目錄,並在該wxapi目錄下新增一個WXEntryActivity類
public class WXEntryActivity extends Activity implements IWXAPIEventHandler { // IWXAPI 是第三方app和微信通信的openapi接口 private IWXAPI api; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // 通過WXAPIFactory工廠,獲取IWXAPI的實例 api = WXAPIFactory.createWXAPI(this, Constants.APP_ID, false); api.registerApp(Constants.APP_ID); //注意: //第三方開發者如果使用透明界面來實現WXEntryActivity,需要判斷handleIntent的返回值,如果返回值爲false,則說明入參不合法未被SDK處理,應finish當前透明界面,避免外部通過傳遞非法參數的Intent導致停留在透明界面,引起用戶的疑惑 try { api.handleIntent(getIntent(), this); } catch (Exception e) { e.printStackTrace(); } Log.i("WXEntryActivity","onCreate"); } @Override protected void onNewIntent(Intent intent) { super.onNewIntent(intent); setIntent(intent); api.handleIntent(intent, this); Log.i("WXEntryActivity","onNewIntent"); } // 微信發送請求到第三方應用時,會回調到該方法 @Override public void onReq(BaseReq req) { Log.i("WXEntryActivity","onReq"); switch (req.getType()) { case ConstantsAPI.COMMAND_GETMESSAGE_FROM_WX: break; case ConstantsAPI.COMMAND_SHOWMESSAGE_FROM_WX: break; default: break; } } // 第三方應用發送到微信的請求處理後的響應結果,會回調到該方法 @Override public void onResp(BaseResp resp) { String result = ""; Log.i("WXEntryActivity","onResp"); // Toast.makeText(this, "baseresp.getType = " + resp.getType(), Toast.LENGTH_SHORT).show(); switch (resp.errCode) { case BaseResp.ErrCode.ERR_OK: result = "用戶同意"; if(resp instanceof SendAuth.Resp){ SendAuth.Resp newResp = (SendAuth.Resp)resp; String code = newResp.code; Log.i("WXEntryActivity","ok:"+ code); MainActivity.call(code); } break; case BaseResp.ErrCode.ERR_USER_CANCEL: result = "用戶取消"; break; case BaseResp.ErrCode.ERR_AUTH_DENIED: result = "用戶拒絕授權"; break; case BaseResp.ErrCode.ERR_UNSUPPORT: result = "暫不支持"; break; default: result = "未知錯誤"; break; } Toast.makeText(this, result, Toast.LENGTH_LONG).show(); finish(); } }
注意WXEntryActivity類一定要嚴格要求在你的包名.wxapi目錄下,否則回調接受不到
並在AndroidManifest.xml添加如下配置
<activity android:name=".wxapi.WXEntryActivity" android:label="@string/app_name" android:theme="@android:style/Theme.Translucent.NoTitleBar" android:exported="true" android:launchMode="singleTop"> </activity>
5、獲取到code後我這裏是送到MainActivity
MainActivity.call(code);
在MainActivity有相應的方法
private static MainActivity activity= null;
public static void call(String code){ activity.callJS(code); } public void callJS(String code){ Log.i("MainActivity","call JS:"+code); launcher.callExternalInterface("callJS", code); }
將code發送到JS端使用
至此,Android端的微信登錄授權配置完成了!