集成微信授权登录时,遇到WXPayEntryActivity不回调问题。需要注意以下几个问题。
(1)WXPayEntryActivity名称不可以改变。
(2)对于package name 和applicationId不一样的。需要在创建和applicationId相同的文件目录。
<activity
android:name="${applicationId}.wxapi.WXEntryActivity"
android:label="@string/app_name"
android:theme="@android:style/Theme.Translucent.NoTitleBar"
android:exported="true"
android:taskAffinity="${applicationId}"
android:launchMode="singleTask">
</activity>
(3)对于多个不同的applicationId的。首先想到可以建立多个文件夹,然后在不同文件夹中放WXPayEntryActivity,并且继承统一的基类,在基类中处理回调。但是太麻烦了。
可以使用 activity-alias 的 targetActivity 属性。如下面代码所示。真正处理的是PbWXEntryHandleActivity,可以放在任意文件夹。“${applicationId}.wxapi.WXEntryActivity“只是个名称,不需要创建对应类。
<!--微信授权登录回调-->
<activity
android:name=".wxapi.PbWXEntryHandleActivity"
android:label="@string/app_name"
android:theme="@android:style/Theme.Translucent.NoTitleBar"
android:exported="true"
android:taskAffinity="${applicationId}"
android:launchMode="singleTask">
</activity>
<activity-alias
android:name="${applicationId}.wxapi.WXEntryActivity"
android:exported="true"
android:screenOrientation="portrait"
android:targetActivity=".wxapi.PbWXEntryHandleActivity"
android:theme="@android:style/Theme.Translucent.NoTitleBar"
android:taskAffinity="${applicationId}"
/>
顺便给出PbWXEntryHandleActivity 的代码。
/**
* Time:2020/10/23
* Author:
* Description: 微信回调的activity
*/
public class PbWXEntryHandleActivity extends Activity implements IWXAPIEventHandler {
private static String TAG = "WXPbLogin";
private IWXAPI api;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//替换为正确的wxAppId
String wxAppID ="wx1234567890";
api = WXAPIFactory.createWXAPI(this, wxAppID, true);
try {
Intent intent = getIntent();
api.handleIntent(intent, this);
} catch (Exception e) {
e.printStackTrace();
}
Log.d(TAG, "onCreate: ");
}
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
setIntent(intent);
api.handleIntent(intent, this);
Log.d(TAG, "onNewIntent: ");
}
@Override
public void onReq(BaseReq req) {
}
@Override
public void onResp(BaseResp resp) {
Log.d(TAG, "onResp: ");
int result = 0;
switch (resp.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(mContext, mContext.getString(result) + ", type=" + resp.getType(), Toast.LENGTH_SHORT).show();
Log.d(TAG, "onResp: "+mContext.getString(result) + ", type=" + resp.getType());
finish();
}
}
网友评论