cari

Rumah  >  Soal Jawab  >  teks badan

Log masuk WeChat bersepadu Android

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;
        }
    }
}
某草草某草草2737 hari yang lalu1221

membalas semua(2)saya akan balas

  • 世界只因有你

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

    1. 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.

    2. Nampaknya ia sepatutnya menjadi masalah komunikasi antara Unity3D dan android, bukan?

      balas
      0
  • 伊谢尔伦

    伊谢尔伦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?

    balas
    0
  • Batalbalas