找回密码
 立即注册
查看: 276|回复: 0

Unity 如何实现WebView 界面点击回调游戏内接口 ?

[复制链接]
发表于 2023-2-9 14:37 | 显示全部楼层 |阅读模式
在游戏开发中我们肯定会遇到和H5界面交互的情况,那这种情况是怎么实现的呢?

答案就是通过URL scheme技术。

一、什么是Scheme?


scheme是一种页面内跳转协议,是一种非常好的实现机制,通过定义自己的scheme协议,可以非常方便跳转app中的各个页面;通过scheme协议,服务器可以定制化告诉App跳转那个页面,可以通过通知栏消息定制化跳转页面,可以通过H5页面跳转页面等。

二、怎么实现?


让我们看看在安卓和IOS系统中的实现方式

1、安卓系统

(1)、在Mainefest配置文件中配置需要用scheme协议跳转的Activity
   <!-- scheme协议 -->
   <activity
        android:name=".SchemeActivity"
        android:label="@string/app_name">

        <!-- 要想在别的App上能成功调起App,必须添加intent过滤器 -->

            <!-- 协议部分,随便设置 -->
            <intent-filter>
                <!--协议部分,随便设置-->
                <data android:scheme="scheme" android:host="mtime" android:path="/goodsDetail" />
                <!--下面这几行也必须得设置-->
                <category android:name="android.intent.category.DEFAULT"/>
                <action android:name="android.intent.action.VIEW"/>
                <category android:name="android.intent.category.BROWSABLE"/>
            </intent-filter>
    </activity>

(2)、模拟从网络中获取scheme协议的url
public class MainActivity extends AppCompatActivity {

    private TextView btnSchemeTv;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        btnSchemeTv = (TextView) findViewById(R.id.btn_scheme_tv);
        btnSchemeTv.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                String url = "scheme://mtime/goodsDetail?goodsId=10011002";

                Intent intent = new Intent(Intent.ACTION_VIEW,
                        Uri.parse(url));
                startActivity(intent);
            }
        });
    }
}

(3)、获取scheme协议参数
public class SchemeActivity extends Activity {
    private static final String TAG = "SchemeActivity";
    private TextView schemeTv;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_scheme);
        schemeTv = (TextView) findViewById(R.id.scheme_tv);
        Uri data = getIntent().getData();
        Log.i(TAG, "host = " + data.getHost() + " path = " + data.getPath() + " query = " + data.getQuery());
        String param = data.getQueryParameter("goodsId");
        schemeTv.setText("获取的参数为:" + param);
    }
}

在这里 Android也提供了另外一个类 WebViewClient 来帮助我们处理回调的接口,这样就不用在onCreate 中 处理了。大家可以了解下。

2、IOS系统


(1)配置URL Scheme
打开工程,点击项目名称,找到info条目,在info条目下,找到URL Types

(2)验证App的调起
使用上述所说的schemeUseApp://在浏览器中进行测试。在浏览器中输入schemeUseApp://,点击搜索。

(3)不同应用之间,带参数的跳转。
在跳转的 URL scheme中可以添加参数,比如:shemeUseApp://ipOrYuming:8080/path?param1=xxx&param2=yyy。
在工程的AppDelegate.m文件中,重写方法- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options,并在方法中进行URL的分析拆解,就可以得到相关的参数。

参考链接:
iOS中使用Scheme实现不同App之间的跳转
Android scheme解析
iOS实现在webview页面内点击链接,跳转指定App - 那一抹风情 - 博客园
WebView-WebViewClient详解_牛八少爷的博客-CSDN博客_webviewclient
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )

GMT+8, 2024-11-16 08:25 , Processed in 0.122302 second(s), 25 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表