Как получить токен авторизации авторизации?

Цель: получить токен, который мне нужно отправить на сервер приложений.

Проблема: зарегистрированная возвращает true, выполняемые запросы возвращают true, но onReq и onResp не вызываются. Вот код:

 public class WeChatActivity extends Activity implements IWXAPIEventHandler { private static final String APP_ID = ; private IWXAPI api; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_signin); api = WXAPIFactory.createWXAPI(this, APP_ID, true); api.handleIntent(getIntent(), this); regToWx(); getAuthToken(); } private void regToWx() { api.handleIntent(getIntent(), this); boolean registered = api.registerApp(APP_ID); Le(this, "registered: " + registered); } @Override protected void onNewIntent(Intent intent) { super.onNewIntent(intent); setIntent(intent); api.handleIntent(intent, this); } public void getAuthToken() { SendAuth.Req req = new SendAuth.Req(); req.scope = "post_timeline"; req.state = "none"; boolean requestDone = api.sendReq(req); Le(this, "request done: " + requestDone); SendAuth.Resp resp = new SendAuth.Resp(); requestDone = api.sendResp(resp); Le(this, "request done: " + requestDone); } @Override public void onReq(BaseReq baseReq) { Le(this, "scope: " + ((SendAuth.Req) baseReq).scope); } @Override public void onResp(BaseResp baseResp) { Le(this, "token: " + ((SendAuth.Resp) baseResp).token); } } 

Выход логарифма:

 D/MicroMsg.SDK.WXApiImplV10﹕ check signature:308202eb30820254a003020... D/MicroMsg.SDK.WXApiImplV10﹕ pass D/MicroMsg.SDK.WXApiImplV10﹕ register app cn.wegazine.wegazine D/MicroMsg.SDK.MMessage﹕ send mm message, intent=Intent { act=com.tencent.mm.plugin.openapi.Intent.ACTION_HANDLE_APP_REGISTER (has extras) }, perm=com.tencent.mm.permission.MM_MESSAGE E/WeChatActivity﹕ registered: true D/MicroMsg.SDK.WXApiImplV10﹕ check signature:308202eb30820... D/MicroMsg.SDK.WXApiImplV10﹕ pass D/MicroMsg.SDK.MMessageAct﹕ send mm message, intent=Intent { flg=0x18000000 cmp=com.tencent.mm/.plugin.base.stub.WXEntryActivity (has extras) } E/WeChatActivity﹕ request done: true D/MicroMsg.SDK.WXApiImplV10﹕ check signature:308202eb30820... D/MicroMsg.SDK.WXApiImplV10﹕ pass D/MicroMsg.SDK.MMessageAct﹕ send mm message, intent=Intent { flg=0x18000000 cmp=com.tencent.mm/.plugin.base.stub.WXEntryActivity (has extras) } E/WeChatActivity﹕ request done: true 

    Я столкнулся с той же проблемой и решил с двумя шагами.

    Сначала проверьте, успешно ли вы прыгнули в приложение wechat и авторизированы. Если нет, проверьте, используете ли вы один и тот же ключ для подписания, который вы подписали для wechat. (Например, если вы подписались с ключом выпуска и скомпилировали с помощью отладочного ключа, то приложение wechat не откроется)

    Во-вторых, по документу wechat , имя класса должно быть WXEntryActivity и должно быть помещено под пакетом wxapi под пакетом с именем, которое вы зарегистрировали в wechat .

    Пример в документе: если вы зарегистрируетесь в «net.sourceforge.simcpux» , структура проекта должна выглядеть так:

    Кроме того, добавьте api.HandleIntent(getIntent(), this) после sendReq и sendResp

    Не уверен, что имя класса необходимо, но я уверен, что вы можете вызывать sendReq в другом классе и обрабатывать ответ с помощью WXEntryActivity

    Надеюсь, это полезно.

    onReq и onResp будут вызваны в WXEntryActivity.java в отражении JAVA

    Предположим, что имя пакета io.github.you

    Вы должны создать каталог с именем wxapi , а затем создать WXEntryActivity.java

    Вы получаете io.github.you.wxapi.WXEntryActivity.java

    В AndroidManifest.xml

     <activity android:name=".wxapi.WXEntryActivity" android:exported="true" android:label="@string/title_activity_wxentry" android:screenOrientation="portrait" android:theme="@android:style/Theme.NoDisplay" > 

    В WXEntryActivity.java

     public class WXEntryActivity implements IWXAPIEventHandler{ @Override public void onReq(BaseReq arg0) { SendAuth.Resp r = (SendAuth.Resp)resp; String code = r.code; } @Override public void onResp(BaseResp arg0) { // TODO Auto-generated method stub } } 

    Удачи