FinClip为企业提供小程序生态圈技术产品,开发者可在FinClip小程序开发帮助中心找到相关FinClip小程序指引

# 代理方法

小程序的部分功能,需要原生端去实现才能调用,比如转发和获取主体App的用户信息等。

另外,也有一些功能可以开放给App开发者自定义,比如自定义更多面板、自定义菜单项等。

# 1.设置代理方法实现类

首先,创建一个继承自AppletHandler的实现类。

class MyAppletHandler extends AppletHandler {
  
  Future<void> appletDidOpen(String appId) async {
    print("appletDidOpen appId:$appId");
  }

  
  void forwardApplet(Map<String, dynamic> appletInfo) {
    print("forwardApplet ---");
  }
  
   
  bool customCapsuleMoreButtonClick(String appId) {
    // 返回true,代表要自定义更多视图;返回false,代表使用默认的更多视图
    // 注意该代理方法仅针对iOS端生效,安卓端见常见问题列表。
    return true;
  }

  
  Future<List<CustomMenu>> getCustomMenus(String appId) {
    List<CustomMenu> customMenus = [];
    return Future.value(customMenus);
  }

  
  Future<void> getMobileNumber(Function(dynamic params) param0) {
    // TODO: implement getMobileNumber
    throw UnimplementedError();
  }

  
  Future<Map<String, dynamic>> getUserInfo() {
    // TODO: implement getUserInfo
    throw UnimplementedError();
  }

  
  Future<void> onCustomMenuClick(String appId, String path, String menuId, String appInfo) {
    // TODO: implement onCustomMenuClick
    throw UnimplementedError();
  }

}

然后,设置代理方法的实现对象:

Mop.instance.registerAppletHandler(MyAppletHandler());

# 2.代理方法

# 2.1 转发

更多菜单里的转发按钮的行为,需要由app来实现,否则点击了也无响应。 实现转发功能,实现如下代理方法即可

void forwardApplet(Map<String, dynamic> appletInfo)

appletInfo中包含小程序信息(小程序id、小程序名称、logo等)、转发的页面信息(页面路径、页面参数)。

使用示例:

  
  Future<void> forwardApplet(Map<String, dynamic> map) async {
    globalMap = map;
    Map<String, dynamic> appletInfo =
        Map<String, dynamic>.from(map["appletInfo"]);
    print("forwardApplet:$appletInfo");
    String appId = appletInfo["appId"];
    // 取出appletInfo里的其他参数执行分享逻辑。
    
  }

# 2.2 用户信息

调用获取用户信息API(getUserInfo) 或者 点击open-type属性为getUserInfo的Button时触发该代理事件

/**
返回值可参考如下格式:
 {
    nickName = "昵称"
    avatarUrl = “头像地址”
    gender = "性别"
    province = "省份"
    city = "城市"
    country = "国家"
 }
*/
Future<Map<String, dynamic>> getUserInfo()

实现的示例:

    
  Future<Map<String, dynamic>> getUserInfo() async {
    return {
        "nickName": "昵称",
        "avatarUrl": "头像",
        "gender": "性别",
        "province": "省份",
        "city": "城市",
        "country": "国家",
      };
  }

# 2.3 获取手机号

当小程序里使用open-type为getPhoneNumber的button控件,点击这个button时,会触发该代理事件。

Future<void> getMobileNumber(Function(dynamic params) param0)

实现示例:

  
  Future<void> getMobileNumber(
    Function(dynamic params) getMobileNumberCallback,
  ) async {
    getMobileNumberCallback.call({"phone": "12345678901"});
    return Future.value(null);
  }

# 2.4 胶囊...点击事件

可在该事件中弹出自己设计的更多视图。 返回true,代表您要自己自定义更多面板视图,您可以在改放中展示自行设计的更多面板视图 返回false,代表使用SDK默认的更多面板视图。

bool customCapsuleMoreButtonClick(String appId);

示例代码

  
  bool customCapsuleMoreButtonClick(String appId) {
    // 首先展示自定义的更多视图
  
    // 然后,返回true
    return true;
  }

# 2.5 自定义菜单项

如果,您只是想在更多面板里添加一些自定义的菜单项,并且使用默认的更多视图。 那么,可以实现下面这个代理方法。

/// 获取自定义菜单
Future<List<CustomMenu>> getCustomMenus(String appId);

实现示例:

  @override
  Future<List<CustomMenu>> getCustomMenus(String appId) {
    List<CustomMenu> customMenus = [
        CustomMenu('ShareSinaWeibo', 'weibo_icon', '新浪微博', 'onMiniProgram'),
        CustomMenu('ShareQQFirends', 'qq_icon', 'QQ', 'common'),
    ];
    return Future.value(customMenus);
  }

# 2.6 实现自定义菜单项点击事件

注入的自定义菜单项,那么菜单项的点击事件在以下代理方法中实现即可

///自定义菜单点击处理
Future<void> onCustomMenuClick(
      String appId, String path, String menuId, String appInfo);

实现示例:

  
  Future<void> onCustomMenuClick(
      String appId, String path, String menuId, String appInfo) async {
    Applet.instance.onCustomMenuClick(
      appId,
      path,
      menuId,
      appInfo,
    );
    return Future.value(null);
  }

# 2.7 小程序打开的代理事件

当小程序打开后,会触发以下代理事件。可以在该事件里做一些记录之类的事情。

///打开小程序
Future<void> appletDidOpen(String appId);

实现示例:

  
  Future<void> appletDidOpen(String appId) async {
    print("appletDidOpen appId:$appId");
    //记录打开过的小程序id
  }
© FinClip with ❤ , Since 2017