suchen

Heim  >  Fragen und Antworten  >  Hauptteil

Android-integriertes WeChat-Login

Kürzlich gibt es ein Projekt, das die Anmeldung von WeChat von Drittanbietern integrieren muss und die Verwendung eines nativen SDK erfordert. Der Client wurde von Unity3D entwickelt, daher muss Android Studio verwendet werden, um ein Plugin für U3D zu erstellen Ich habe selbst darüber nachgedacht. Es gibt einige. Nach dem Aufrufen der WeChat-Autorisierung klickte der Benutzer auf die Anmeldung und kehrte zu MainActivity zurück hatte einen Wert in der onResume-Methode zurückgegeben, obwohl es immer umständlich ist. 2 Dieses Projekt muss in eine ARR-Datei konvertiert werden, damit es von U3D verwendet werden kann Das access_token erfolgt auf der Serverseite.
Das Folgende ist der Code, den ich geschrieben habe. Er kann unter Android verwendet werden. Bitte teilen Sie mir mit, wie ich meinen Code so optimieren kann, dass der Benutzer auf „Anmelden“ in der WeChat-Autorisierung klickt Kehrt zu MainActivity zurück und kann in arr gepackt werden. u3D kann abgerufen werden. Vielen Dank, unten ist mein Code

Hauptaktivität

package com.mazingtec.hxddz;

import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

import com.mazingtec.hxddz.wxapi.WXEntryActivity;
import com.tencent.mm.opensdk.modelmsg.SendAuth;
import com.tencent.mm.opensdk.openapi.IWXAPI;
import com.tencent.mm.opensdk.openapi.WXAPIFactory;
import com.unity3d.player.UnityPlayerActivity;

public class MainActivity extends UnityPlayerActivity implements View.OnClickListener {

    boolean lock = true;
    Button btnWeChat;
    public String code;

    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        btnWeChat = (Button) findViewById(R.id.btnWeChat);
        btnWeChat.setOnClickListener(this);
    }

    @Override
    protected  void onResume()
    {
        super.onResume();

        if(WXEntryActivity.isOK && lock)
        {
            lock = false;
            code = WXEntryActivity.CODE;
        }
    }

    private void GetCode()
    {
        IWXAPI iwxapi = WXAPIFactory.createWXAPI(this, WXEntryActivity.APP_ID, true);
        iwxapi.registerApp(WXEntryActivity.APP_ID);

        if (iwxapi != null && iwxapi.isWXAppInstalled()) {
            SendAuth.Req req = new SendAuth.Req();
            req.scope = "snsapi_userinfo";
            req.state = "We_did_it";
            iwxapi.sendReq(req);
        } else
            Toast.makeText(this, "用户未安装微信", Toast.LENGTH_SHORT).show();
    }

    @Override
    public void onClick(View v)
    {
        if(v == btnWeChat)
        {
            GetCode();
        }
    }
}

WXEntryActivity

package com.mazingtec.hxddz.wxapi;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;

import com.tencent.mm.opensdk.modelbase.BaseReq;
import com.tencent.mm.opensdk.modelbase.BaseResp;
import com.tencent.mm.opensdk.modelmsg.SendAuth;
import com.tencent.mm.opensdk.openapi.IWXAPI;
import com.tencent.mm.opensdk.openapi.IWXAPIEventHandler;
import com.tencent.mm.opensdk.openapi.WXAPIFactory;

/**
 * Created by wei on 2017/6/21.
 */

public class WXEntryActivity extends Activity implements IWXAPIEventHandler {

    public static final String APP_ID = "wxopq239o809uqewfojoasidfj";
    private IWXAPI iwxapi;
    public static String CODE;
    public static boolean isOK = false;

    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        iwxapi = WXAPIFactory.createWXAPI(this, APP_ID, true);
        iwxapi.handleIntent(this.getIntent(), this);
    }

    @Override
    protected void onNewIntent(Intent intent)
    {
        super.onNewIntent(intent);
        setIntent(intent);
        iwxapi.handleIntent(intent, this);
    }

    @Override
    public void onReq(BaseReq baseReq) {

    }

    @Override
    public void onResp(BaseResp baseResp)
    {
        switch (baseResp.errCode)
        {
            case BaseResp.ErrCode.ERR_OK:
                //发送成功
                SendAuth.Resp sendResp = (SendAuth.Resp) baseResp;
                if (sendResp != null) {
                    CODE = sendResp.code;
                    isOK = true;
                }
                WXEntryActivity.this.finish();
                break;
            case BaseResp.ErrCode.ERR_USER_CANCEL:
                isOK = false;
                WXEntryActivity.this.finish();
                //发送取消
                break;
            case BaseResp.ErrCode.ERR_AUTH_DENIED:
                isOK = false;
                WXEntryActivity.this.finish();
                //发送被拒绝
                break;
            default:
                isOK = false;
                WXEntryActivity.this.finish();
                //发送返回
                break;
        }
    }
}
某草草某草草2737 Tage vor1219

Antworte allen(2)Ich werde antworten

  • 世界只因有你

    世界只因有你2017-06-23 09:17:06

    1. 问题是从WXEntryActivity 拿到的Code如何回传给MainActivity, 如果图方便的话通过Intent携带这个code, 返回给MainActivity就可以了, 在MainActivity中getIntent再取出这个code. 其次就是可以通过EventBus来解决, 不过有点得不偿失.

    2. 看着应该是Unity3D和android的通信问题吧? 网上解决方案蛮多的

    Antwort
    0
  • 伊谢尔伦

    伊谢尔伦2017-06-23 09:17:06

    泻药。
    没集成过微信登录,也没用过U3D,不敢妄下评论。
    但是我有个疑问,微信SDK回传的code不应该是通过onActivityResult之类的回传的么?

    Antwort
    0
  • StornierenAntwort