Connexion WeChat intégrée à Android
某草草
某草草 2017-06-23 09:15:06
0
2
1199

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;
        }
    }
}
某草草
某草草

répondre à tous(2)
世界只因有你
  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

伊谢尔伦

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 ?

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal