Rumah > Soal Jawab > teks badan
Baru-baru ini terdapat projek yang perlu menyepadukan log masuk pihak ketiga WeChat dan memerlukan penggunaan SDK asli Pelanggan dibangunkan oleh Unity3D, jadi Android Studio perlu digunakan untuk membuat pemalam untuk U3D Terfikir tentangnya sendiri. Terdapat beberapa Soalan
1 Selepas menarik keizinan WeChat, pengguna mengklik untuk log masuk dan kembali ke MainActivity, tetapi kod itu tidak diperolehi, jadi saya menetapkan kunci dalam MainActivity dan menilai sama ada kod itu. telah mengembalikan nilai dalam kaedah onResume , walaupun ia berfungsi, ia sentiasa berasa janggal
2 Projek ini perlu ditukar kepada fail arr untuk digunakan oleh u3d access_token dilakukan di bahagian pelayan.
Berikut ialah kod yang saya tulis Ia boleh digunakan di bawah Android Semuanya adalah normal dan kod itu boleh diperolehi. kembali ke MainActivity, dan boleh dibungkus ke dalam u3D boleh diperolehi, terima kasih banyak, di bawah adalah kod saya
Aktiviti Utama
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;
}
}
}
世界只因有你2017-06-23 09:17:06
Masalahnya ialah bagaimana untuk menghantar Kod yang diperolehi dari WXEntryActivity kembali ke MainActivity, hanya bawa kod ini melalui Intent dan kembalikan ke MainActivity dan kemudian keluarkan kod ini melalui EventBus. Tetapi ia sedikit mengatasi keuntungan.
Nampaknya ia sepatutnya menjadi masalah komunikasi antara Unity3D dan android, bukan?
伊谢尔伦2017-06-23 09:17:06
Laksatif.
Saya belum menyepadukan log masuk WeChat, saya juga tidak menggunakan U3D, jadi saya tidak berani membuat sebarang komen.
Tetapi saya ada soalan, bukankah kod yang dikembalikan oleh WeChat SDK sepatutnya dikembalikan melalui onActivityResult atau sebagainya?