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;
}
}
}
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.
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 ?