cocos游戏需要获取安卓原生现在登录的用户信息

cocos游戏需要获取安卓原生现在登录的用户信息,需要安卓给他发信息。最简单的方法是cocos就是个单独的游戏,进去之后要重新登录一下,登录用的账号密码还是安卓里面的,用的一个数据库,这样数据也是同步的,但是进入游戏还要登录,感觉用户体验不好,于是想办法把安卓的数据传递到cocos里。
一种是cocos打包为原生安卓,一种是打包为web-mobile,用WebView显示,我不太想打包为原生安卓,因为编译非常慢
于是采用web-mobile
使用了这个方法
https://www.jianshu.com/p/3cb256de46d3

cocos 代码



export class Bus {
    static curUser = null

    static putCurUser (window) {
        if (window.androidObject && window.androidObject.getCurUser) {
            // Comm 
            // Bus.curUser=User.achievementId
            // cc.log("Bus.curUser getCurUser have ")
            // // 直接拿来字符串可以赋值吗? 就是赋值了一个字符串是吧。。
            // Bus.curUser=  window.androidObject.getCurUser()
            // cc.log("Bus.curUser ",Bus.curUser)
            // cocos 弹窗

            // Comm 
            // Bus.curUser=User.achievementId
            // 可以
            // 游戏界面就没有 Bus 了 因为没有import 呀
            cc.log("Bus.curUser getCurUser have ")
            // 直接传递一个java对象应该是不行的,传递json字符串吧
            var userStr = window.androidObject.getCurUser()
            Bus.curUser = JSON.parse(userStr)
            //   Bus
            // Bus
            // Bus.curUser=  window.androidObject.getCurUser()
            cc.log("Bus.curUser ", Bus.curUser)
            // cocos 弹窗
            // this.createAlert(1,1,JSON.stringify(Bus.curUser))
        }


    }
}

安卓

package com.example.whatrubbish.fragment;

import android.annotation.SuppressLint;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.webkit.JavascriptInterface;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.TextView;

import androidx.annotation.NonNull;
import androidx.fragment.app.Fragment;
import androidx.lifecycle.ViewModelProvider;

import com.example.whatrubbish.Bus;
import com.example.whatrubbish.databinding.FragmentWebBinding;
import com.example.whatrubbish.entity.User;
import com.example.whatrubbish.ui.notifications.NotificationsViewModel;

/**
 * 天上掉下垃圾的游戏
 */
public class SplitDropRubFragment extends Fragment {

    private NotificationsViewModel notificationsViewModel;
    private FragmentWebBinding binding;

    public SplitDropRubFragment(String url) {
        this.url = url;
    }

    String url;
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater,
                             ViewGroup container, Bundle savedInstanceState) {
        notificationsViewModel =
                new ViewModelProvider(this).get(NotificationsViewModel.class);

        binding = FragmentWebBinding.inflate(inflater, container, false);
        View root = binding.getRoot();

        final TextView textView = binding.textNotifications;
        notificationsViewModel.getText().observe(getViewLifecycleOwner(), textView::setText);

        initWeb();

        return root;
    }

    //@SuppressLint("JavascriptInterface")
    void initWeb() {
        WebView webview=   binding.Toweb;

        webview.loadUrl(url);
        //1,js调用安卓
        webview.getSettings().setJavaScriptEnabled(true);//这里必须开启
        //把当前JavaH5Activity对象作为androidObject别名传递给js
        //js通过window.androidObject.androidMethod()就可以直接调用安卓的androidMethod方法
        webview.addJavascriptInterface(this, "androidObject");

    }

    //应该不能直接传递一个 java的类吧
    //js调用安卓,必须加@JavascriptInterface注释的方法才可以被js调用
    @JavascriptInterface
    public String  getCurUser() {
        Log.i("qcl0228", "js调用了安卓的方法");
        String json = Bus.gson.toJson(Bus.curUser);
        //return Bus.curUser;
        Log.i("json", "getCurUser: "+json);
        return json;
    }

    @Override
    public void onDestroyView() {
        super.onDestroyView();
        binding = null;
    }
}

一开始还在想,打包成html他是放在canvas里面,我数据是传到windows里面的,怎么给他传到canvas里面去呢,还以为没有可行性。后来想通了,我是在cocos的代码里直接调用windows这个对象,在那个代码里,这个对象我是拿得到的,拿到了就都可以用了

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值