recherche

Maison  >  Questions et réponses  >  le corps du texte

Connexion WeChat intégrée à Android

Récemment, il y a un projet qui doit intégrer la connexion tierce à WeChat et nécessite l'utilisation d'un SDK natif. Le client est développé par Unity3D, donc Android Studio doit être utilisé pour créer un plugin pour U3D. J'y ai pensé moi-même. Il y en a quelques-unes. Question
1. Après avoir obtenu l'autorisation WeChat, l'utilisateur a cliqué pour se connecter et est revenu à MainActivity, mais le code n'a pas été obtenu, j'ai donc défini un verrou dans MainActivity et j'ai jugé si le code était valide. avait renvoyé une valeur dans la méthode onResume. , même si cela fonctionne, cela semble toujours gênant
2 Ce projet doit être converti en un fichier arr pour que u3d puisse l'utiliser. Comment transmettre le code à U3D ? le access_token est effectué côté serveur.
Voici le code que j'ai écrit. Il peut être utilisé sous Android. Tout est normal et le code peut être obtenu. Veuillez me dire comment optimiser mon code afin que l'utilisateur puisse l'obtenir après avoir cliqué sur l'autorisation WeChat. revient à MainActivity et peut être empaqueté dans arr u3D peut être obtenu, merci beaucoup, ci-dessous mon code

.

ActivitéMain

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 Il y a quelques jours1220

répondre à tous(2)je répondrai

  • 世界只因有你

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

    1. Le problème est de savoir comment transmettre le code obtenu de WXEntryActivity à MainActivity. Si cela vous convient, transférez simplement ce code via Intent et renvoyez-le à GetIntent dans MainActivity, puis retirez ce code. via EventBus. Mais c'est un peu compensé par le gain.

    2. On dirait qu'il devrait s'agir d'un problème de communication entre Unity3D et Android, n'est-ce pas ? Il existe de nombreuses solutions en ligne

    répondre
    0
  • 伊谢尔伦

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

    Laxatif.
    Je n'ai pas intégré la connexion WeChat, ni utilisé U3D, donc je n'ose faire aucun commentaire.
    Mais j'ai une question. Le code renvoyé par le SDK WeChat ne devrait-il pas être renvoyé via onActivityResult ou similaire ?

    répondre
    0
  • Annulerrépondre