电容器插件不会将参数传递给java

Posted

技术标签:

【中文标题】电容器插件不会将参数传递给java【英文标题】:Capacitor plugin doesn't pass arguments to java 【发布时间】:2021-07-30 23:41:18 【问题描述】:

我正在使用 this plugin 在 Ionic React/Capacitor 项目中实现 Google Play 游戏服务。

但是,当我调用GameServices.showLeaderboard("abcdefghijklmnopqr"); 时,logcat 会显示以下内容:

05-09 07:44:51.544 15437 15524 V Capacitor/Plugin: To native (Capacitor plugin): callbackId: 129018517, pluginId: GameServices, methodName: showLeaderboard
05-09 07:44:51.544 15437 15524 V Capacitor: callback: 129018517, pluginId: GameServices, methodName: showLeaderboard, methodData: 
05-09 07:44:51.545 15437 15502 W GameServices: showLeaderboard called without providing leaderboardId

如您所见,methodData 是空的。

我完全不知道 java(这就是我使用 Capacitor 的原因),但这是我能在链接的 GitHub 中的android\src\main\java\GameServices.java 中找到的唯一一段看起来远程相关的代码。

@PluginMethod()
    public void showLeaderboard(final PluginCall call) 
        final String leaderboardId = call.getString("leaderboardId");
        if (leaderboardId == null) 
            Log.w(TAG, "showLeaderboard called without providing leaderboardId");
            return;
        
        Log.d(TAG, "showLeaderboard called with id: " + leaderboardId);

        final GoogleSignInAccount lastSignedInAccount = GoogleSignIn.getLastSignedInAccount(getContext());
        if (null == lastSignedInAccount) 
            Log.w(TAG,
                    "cannot find last signed in account, either services are disabled or fingerprint doesn't match services account");
            call.resolve();
            return;
        

        Games.getLeaderboardsClient(getContext(), lastSignedInAccount).getLeaderboardIntent(leaderboardId)
                .addOnCompleteListener(task -> 
                    if (task.isSuccessful()) 
                        Log.d(TAG, "showLeaderboard:getIntent:success");
                        saveCall(call);
                        startActivityForResult(call, task.getResult(), RC_LEADERBOARD_UI);
                     else 
                        Log.e(TAG, "showLeaderboard:getIntent:error");
                        call.reject("showLeaderboard:getIntent:error");
                    
                );
    

您能帮我解决这个问题吗?它似乎是唯一可以远程工作的 Google Play Games Capacitor 插件......

编辑 1: 我应该注意,GameServices.signIn(); 方法工作得很好。

编辑2: 尝试调用GameServices.unlockAchievement("abcdef"); 也不起作用,记录Achievement ID must not be null or empty。显然,没有任何需要参数的方法有效。

【问题讨论】:

【参考方案1】:

在浏览了所有插件代码后,我意识到这些方法需要对象作为参数。

这行得通:

GameServices.showLeaderboard(leaderboardId: "abcdefghijklmnopqr");

【讨论】:

以上是关于电容器插件不会将参数传递给java的主要内容,如果未能解决你的问题,请参考以下文章

将命令行参数传递给 AWS Fargate 容器

java中,如何用POST方法将参数传递给第三方网站

将主要参数传递给方法[关闭]

将参数传递给 Docker 容器中的 Python argparse

Java:将具有不同类型的参数传递给函数

将参数传递给 Bamboo 中的构建