卡片调用客户端方法

本文介绍了在蚂蚁动态卡片中调用 iOS 客户端方法的实现路径。

操作步骤

  1. 在工程中新建 NSObject 对象并引入协议 <CubeModuleProtocol>

    #import <Foundation/Foundation.h>
    #import <CubeCrystal/CubeModuleProtocol.h>
    
    NS_ASSUME_NONNULL_BEGIN
    
    @interface MPCubeModule : NSObject <CubeModuleProtocol>
    
    @end
    
    NS_ASSUME_NONNULL_END
  2. 实现与模板约定的方法。

    与模板约定的方法名为 push,效果是单击卡片时调用 Native 实现 Push Viewcontroller 操作。

    #import "MPCubeModule.h"
    #import <CubeBridge/CKJSDefine.h>
    
    @implementation MPCubeModule
    
    //cardUid 是 module 的属性,在调用 module api 时可以通过 cardUid 判断是哪个卡片产生的调用,cardUid 即 CubeCard 中的 cardUid。
    @synthesize cardUid;
    
    //配置约定的方法
    CK_EXPORT_METHOD(@selector(push:))
    
    - (void)push:(CubeModuleMethodCallback)callback {
        if (callback) {
                    //此处执行Push ViewController操作
            
            //回调给模板的参数
            callback(@"Push Page");
        }
    }
    
    @end
  3. 注册自定义 Module。

    - (void)registerModules {
        [MPCubeManager shareManager];
        
        //注册自定义Module,key为module名称(与服务端约定),value为客户端类名
        NSDictionary *dic = @{@"crystalnavigator": @"MPCubeModule"};
        [[[CubeService sharedInstance] getEngine] registerModules:dic];
    }
  4. 卡片侧调用。

    <script>
                    //约定的自定义Module标识
        const navigator = requireModule("crystalnavigator");
        export default {
            methods: {
                onClick() {
                    navigator.push(event => {console.info(event);});
                    console.info('invoke on-click event');
                }
            }
        }
    </script>
  5. 将卡片打包发布到后台,即可调用客户端方法。