Вход в Wechat - не получить токен

Я просто следил за всем, что упоминается в этом примере от Аарона Брукнера. Пробовал с логическим флагом и без него для включения checkSignature.

инициализировать API:

api = WXAPIFactory.createWXAPI(getContext(), WXEntryActivity.APP_ID,
            true);

отправить реестр:

api.registerApp(WXEntryActivity.APP_ID);

отправить логин:

SendAuth.Req req = new SendAuth.Req();
      req.scope = "snsapi_userinfo";
      req.state = "none";
      api.sendReq(req);

При попытке войти я получаю экран подтверждения от wechat. При нажатии «Подтвердить вход» меня перенаправляют в мое приложение, но ничего не происходит.

введите здесь описание изображения

WXEntryActivity.class не вызывается, поэтому я не получаю токена для продолжения аутентификации.

Логи при установке подписи false:

D/MicroMsg.PaySdk.WXFactory: createWXAPI, appId = wx41XXXXXXXXX41, checkSignature = false
D/MicroMsg.SDK.WXApiImplV10: <init>, appId = wx41XXXXXXXXX41, checkSignature = false
D/MicroMsg.SDK.WXMsgImplComm: ignore wechat app signature validation
D/MicroMsg.SDK.WXApiImplV10: registerApp, appId = wx41XXXXXXXXX41
D/MicroMsg.SDK.WXApiImplV10: registerApp, appId = wx41XXXXXXXXX41
D/MicroMsg.SDK.WXApiImplV10: register app com.my.packagename.debug
D/MicroMsg.SDK.MMessage: send mm message, intent=Intent { act=com.tencent.mm.plugin.openapi.Intent.ACTION_HANDLE_APP_REGISTER (has extras) }, perm=co
D/MicroMsg.SDK.WXMsgImplComm: ignore wechat app signature validation
I/MicroMsg.SDK.WXApiImplV10: sendReq, req type = 1
D/MicroMsg.SDK.MMessageAct: send, targetPkgName = com.tencent.mm, targetClassName = com.tencent.mm.plugin.base.stub.WXEntryActivity
D/MicroMsg.SDK.MMessageAct: send mm message, intent=Intent { flg=0x18000000 cmp=com.tencent.mm/.plugin.base.stub.WXEntryActivity (has extras) }

Журналы, когда подпись true, в основном такие же, за исключением:

D/MicroMsg.SDK.WXMsgImplComm: check signature:3XXXXXXXXX02eb30820254a00302010202XXXXXXXXXXXXXXXXXXXXXXXXX
D/MicroMsg.SDK.WXMsgImplComm: pass

У меня есть правильная подпись приложения MD5 без :, добавленная в Wechat-Dev-Console, а также имя пакета com.my.packaname.debug, поскольку я использую свой debug.keystore для подписи своей отладочной версии. WXEntryActivity находится внутри моего com.my.packagename.wxapi и зарегистрирован в моем AndroidManifest.xml с флагом exported. Также я добавил правило в proguard-rules.pro на всякий случай:

 -keep class com.tencent.mm.sdk.** {
      *;
  }

Просто не могу понять, почему onCreate и onResp из WxEntryActivity не вызываются для получения токена.


person Maxi    schedule 02.02.2018    source источник


Ответы (1)


Решение найдено:

Проблема была вызвана именем пакета.

Поскольку я использую два варианта сборки выпуск и отладка, я ожидал, что имя пакета будет com.my.packagename.debug для моей отладочной сборки (которая настроена в build.gradle). Wechat я использовал com.my.packagename.debug. Проблема в том, что WxEntryActivity вызывается через отражение, а мой WxEntryActivity находится в моем com.my.packagename.wxapi.

Поэтому класс не может быть найден и его необходимо поместить в "ручной" пакет .debug.wxapi.

Таким образом, вам нужны два действия, расположенные в двух разных пакетах, при использовании выпуска и отладки.

person Maxi    schedule 02.02.2018
comment
Это WXEntryActivity не WxEntryActivity см. sepc: open.weixin.qq.com/cgi-bin/ - person Maher Abuthraa; 06.06.2018
comment
@Maxi, значит, мне нужно дважды добавить копию одного и того же класса в две разные папки? - person Rameshbabu; 18.06.2021
comment
@Rameshbabu да, вам нужно иметь активность в отладке и в основной папке - person Maxi; 20.06.2021