微信授权登录WXPayEntryActivity不回调问题

2020-11-09  本文已影响0人  谁动了我的奶酪_9f00

集成微信授权登录时,遇到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-aliastargetActivity 属性。如下面代码所示。真正处理的是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();
    }
}
上一篇 下一篇

猜你喜欢

热点阅读