6

目标:获取我需要发送到应用服务器的令牌

问题:注册返回真,请求完成返回真,但onReqonResp没有被调用。这是代码:

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);

        L.e(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);
        L.e(this, "request done: " + requestDone);

        SendAuth.Resp resp = new SendAuth.Resp();
        requestDone = api.sendResp(resp);
        L.e(this, "request done: " + requestDone);
    }

    @Override
    public void onReq(BaseReq baseReq) {
        L.e(this, "scope: " + ((SendAuth.Req) baseReq).scope);
    }

    @Override
    public void onResp(BaseResp baseResp) {
        L.e(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
4

3 回答 3

4

我遇到了同样的问题并通过两个步骤解决。

首先检查您是否成功跳转到微信应用并授权。如果不是,请检查您是否使用与微信签名相同的签名密钥。(例如,如果您使用发布密钥签名并使用调试密钥进行编译,则微信应用将无法打开)

其次,通过微信文档,类名应该是WXEntryActivity,并且应该放在你在微信注册的名字的包下的一个名为wxapi的包下。

文档中的示例:如果您使用“net.sourceforge.simcpux”注册,项目结构应如下所示

图片

此外,添加api.HandleIntent(getIntent(), this)之后sendReqsendResp

不确定类名是否必要,但我相信您可以调用sendReq其他类并使用WXEntryActivity处理响应

希望这会有所帮助。

于 2016-01-20T09:13:37.993 回答
2

有同样的问题!爱德华兹的回答很有帮助。

WxEntryActivity 需要在你在微信注册的名字的包里!

特别是当您有多个构建变体(调试、发布)时: 微信登录 - 不接收令牌

于 2018-02-02T15:14:39.150 回答
-2

onReq并将在JAVA 反射onResp中调用WXEntryActivity.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
    }
}

祝你好运

于 2015-01-17T04:11:28.020 回答