Buildfire - 是不是可以从管理控制面板导航到插件

Posted

技术标签:

【中文标题】Buildfire - 是不是可以从管理控制面板导航到插件【英文标题】:Buildfire - Is it possible to navigate to a plugin from the admin control panelBuildfire - 是否可以从管理控制面板导航到插件 【发布时间】:2017-12-12 16:01:20 【问题描述】:

我有两个需要相互通信的插件。其中一个插件允许用户创建锻炼。另一个插件需要能够允许用户将锻炼插件链接到特定的锻炼。

为此,最好能够进入消费插件,单击“链接锻炼”之类的内容,然后通过 buildfire.navigation.navigateTo 将我带到锻炼插件,我可以在其中选择一个锻炼(因为锻炼数据只能访问此插件)。从那里,一旦做出选择,它会将我导航回另一个插件,其中包含我链接的锻炼记录的 ID。这样,我可以保存锻炼的 ID,并且每当有人想从小部件中查看锻炼时,它就能够将他们导航到锻炼插件并加载正确的 ID。

当我尝试在控制面板中实现此功能时,navigation.navigateTo 会出错并显示以下消息:

postMessageHandler error: TypeError: Cannot read property 'source' of undefined
at Object.navigateTo (pluginAPI.js:265)
at PluginAPI.postMessageHandler (pluginAPI.js:221)
at tryPMH (postMaster.js:44)
at Object._acceptRequest (postMaster.js:62)
at postMessageHandler (postMaster.js:29)

navigation.navigateTo 只能在小部件端使用吗?这是我的导航对象供参考:

        pluginId: '6d9d8456-d2c9-4ddb-80b8-**********',
        instanceId: '6drt3456-d2c9-4ddb-80b8-fdbbff854r1b-*********',
        folderName: 'theplugin',
        title: '',
        queryString: '?id=abc123def456'

另外,我不确定文件夹名称应该是什么。 SDK源代码似乎需要它,但我不知道应该放什么。我放了一些我认为可能有用的东西,但这可能是为什么这不起作用的罪魁祸首。正在寻找对此的确认。

尽管如此,即使我使用小部件的导航,当它加载新插件时,新加载插件的管理面板显示“404 未找到”而不是加载管理面板。对此也有什么想法吗?

【问题讨论】:

我能帮助您解决您的问题吗? @attila226 是的,这很有帮助。谢谢。是否有办法在 BuildFire 系统中的两个插件之间建立共享数据库。必须让插件以这种方式进行通信有点乏味和混乱。如果有某种方法可以将插件链接在一起,那么它可以提供更强大的产品,例如允许插件作为一个集合使用,或者单独使用。 数据存储旨在用于单个插件实例中,而不是跨插件实例。 buildfire.localStorage 确实充当了跨应用程序共享数据的一种机制,尽管它不像数据存储那样功能丰富。另一种选择是使用第三方服务,例如 Firebase,它具有数据库即服务功能,可以轻松集成到您的解决方案中。 【参考方案1】:

如果您希望控件触发小部件上的导航,则需要使用messaging。请参阅下面的示例。

在控件上:

buildfire.messaging.sendMessageToWidget(
                    name: 'OPEN_PLUGIN',
                    message: 
                        data: pluginData
                    
                );

在小部件上:

    buildfire.messaging.onReceivedMessage = function(message)
       var plugin = event.message.data;
       switch (message.section)
        case 'OPEN_PLUGIN':
            if (plugin && plugin.pluginType && plugin.pluginType.folderName)
                    fName = plugin.pluginType.folderName;
                else if (plugin && plugin.folderName)
                    fName = plugin.folderName;

                buildfire.navigation.navigateTo(
                    pluginId: plugin.pluginId,
                    instanceId: plugin.instanceId,
                    title: plugin.title,
                    folderName: fName
                );
        break;
    

就文件夹名称而言,有多种获取方式。一种简单的方法是在控制面板中编辑插件实例。 URL 如下所示:

/pluginControl/ba4139dd-09c6-4121-aa4a-c72570af07fc/ba4139dd-09c6-4121-aa4a-c72570af07fc-************/Home/52/

翻译成以下格式:

/pluginControl/pluginId/pluginInstanceId/title/folderName

所以在本例中,文件夹名称为 52。

【讨论】:

以上是关于Buildfire - 是不是可以从管理控制面板导航到插件的主要内容,如果未能解决你的问题,请参考以下文章

BuildFire - 如何使用 SDK 从管理面板触发推送通知?

Buildfire:确认控制面板和设备中的通知行为不同(并且失败)但在本地主机中有效

Buildfire 本地小部件失败

为啥我安装软件老是要管理员权限进行安装

从 Widget 端获取 BuildFire 插件用户列表

Buildfire - 有没有办法将人们引导到管理仪表板中的另一个选项卡?