Defina o applet mais menu
1. Efeito mostra
Clique no "..." Na primeira rapsule, isso traz à tona a página de menu mais a seguir

2. Bloqueie o "Forward" Botão no menu mais
2.1 Cobertura
Essa configuração é implementada pelo aplicativo, um conjunto, todos os applets no aplicativo serão implementados de acordo com esse efeito
2.2 Método de configuração do iOS
Ao inicializar o SDK, a configuração é feita através dos itens de configuração da interface do usuário da seguinte forma:
FATUIConfig *uiConfig = [[FATUIConfig alloc] init];
//Block the "Forward" button in the More menu
uiConfig.hideForwardMenu = YES;3. Bloqueie o "Settings" Botão no menu mais
3.1 Cobertura
Essa configuração é implementada pelo aplicativo, um conjunto, todos os applets no aplicativo serão implementados de acordo com esse efeito
3.2 Método de configuração do iOS
Ao inicializar o SDK, a configuração é feita através da configuração da interface do usuário ITMS da seguinte maneira.
FATUIConfig *uiConfig = [[FATUIConfig alloc] init];
//Block the "Forward" button in the More menu
uiConfig.hideSettingMenu = YES;3.3 Método de configuração do Android
Ao inicializar o SDK, a configuração é feita através dos itens de configuração da interface do usuário da seguinte forma:
// UI Configuration
FinAppConfig.UIConfig uiConfig = new FinAppConfig.UIConfig();
// Whether to hide the "Settings" button in the "More" menu
uiConfig.setHideSettingMenu(true);4. Bloqueie o "Back to Home" Botão no menu mais
4.1 Cobertura
Essa configuração é implementada pelo aplicativo, um conjunto, todos os applets no aplicativo serão implementados de acordo com esse efeito
4.2 Método de configuração do iOS
Ao inicializar o SDK, a configuração é feita através da configuração da interface do usuário ITMS da seguinte maneira.
FATUIConfig *uiConfig = [[FATUIConfig alloc] init];
//Block the "Back to Home" button in the More menu
uiConfig.hideBackToHome = YES;4.3 Método de configuração do Android
Ao inicializar o SDK, a configuração é feita através dos itens de configuração da interface do usuário da seguinte forma:
FinAppConfig.UIConfig uiConfig = new FinAppConfig.UIConfig();
// Whether to hide the "Back to Home" menu entry in the "More" menu
uiConfig.setHideBackHome(true);Notas: " O "Back to Home" O botão no menu mais foi depreciado desde a versão 2.36.1, e essa configuração ITM mudou para controlar o "Back to Home" Botão na barra de navegação.
5. Bloqueie o "Feedback & Complaints" Botão no menu mais
5.1 Cobertura
Essa configuração é implementada pelo aplicativo, um conjunto, todos os applets no aplicativo serão implementados de acordo com esse efeito
5.2 Método de configuração do iOS
Ao inicializar o SDK, a configuração é feita através dos itens de configuração da interface do usuário da seguinte forma:
FATUIConfig *uiConfig = [[FATUIConfig alloc] init];
//Block the "Feedback & Complaints" button in the More menu
uiConfig.hideFeedbackMenu = YES;5.3 Método de configuração do Android
Ao inicializar o SDK, a configuração é feita através dos itens de configuração da interface do usuário da seguinte forma:
FinAppConfig.UIConfig uiConfig = new FinAppConfig.UIConfig();
// Whether to hide "Feedback & Complaints" in the More menu
uiConfig.setHideFeedbackAndComplaints(true);6. Bloco o "Re-enter" Botão no menu mais
6.1 Cobertura
Essa configuração é implementada pelo aplicativo, um conjunto, todos os applets no aplicativo serão implementados de acordo com esse efeito
6.2 Método de configuração do iOS
Ao inicializar o SDK, a configuração é feita através dos itens de configuração da interface do usuário da seguinte forma:
FATUIConfig *uiConfig = [[FATUIConfig alloc] init];
//Block the "Re-enter" button in the More menu
uiConfig.hideRefreshMenu = YES;6.3 Método de configuração do Android
Ao inicializar o SDK, a configuração é feita através dos itens de configuração da interface do usuário da seguinte forma:
FinAppConfig.UIConfig uiConfig = new FinAppConfig.UIConfig();
// Whether to hide "Feedback & Complaints" in the More menu
uiConfig.setHideRefreshMenu(true);7. Implemente mais painéis por conta própria
Se você não usar para usar mais painéis fornecidos pelo SDK e deseja custar a imagem, você pode fazê -lo da seguinte maneira.
7.1 Cobertura
Essa configuração é implementada pelo aplicativo, que pode alcançar diferentes efeitos de painel para diferentes IDs de applet. Quanto mais painel é projetado pelo aplicativo, e o estilo de exibição e os itens de menu podem ser controlados pelo aplicativo.
7.2 Método de configuração do iOS
Apenas implemente appletInfo:didClickMoreBtnAtPath: em FATAppletDelegate Então então
Primeiro, personalize um FATClientHelper classe que imagina o FATAppletDelegate Protocolo.
#import <Foundation/Foundation.h>
#import <FinApplet/FinApplet.h>
@interface FATClientHelper : NSObject<FATAppletDelegate>
+ (instancetype)shareInstance;
@endEntão, após a inicialização bem -sucedida do SDK, o proxy do SDK para o FATClientHelper Objeto.
Sample Code
[[FATClient sharedClient] initWithConfig:config error:nil];
[FATClient sharedClient].delegate = [FATClientHelper shareInstance];- (BOOL)appletInfo:(FATAppletInfo *)appletInfo didClickMoreBtnAtPath:(NSString *)path
{
// If you need to customize more panels, write the logic to show more panels here and return YES.
// If you don't need to customize more panels, you can leave the method out or return NO.
return NO;
}7.3 Método de configuração do Android
Mais painel personalizado é realizado por IAppletProcessHandler ,, IAppletProcessHandler Vai ligar para o onNavigationBarMoreButtonClicked que desencadeia o applet "..." Clique em Evento de onNavigationBarMoreButtonClicked Retorno de chamada para o host, pelo host para obter o efeito de mais painéis.
/**
* Applet abstract business callback interface, the SDK will be these abstract business through the form of interface exposed to the external, by the external concrete implementation
* (applet process)
*/
interface IAppletProcessHandler {
/**
* The "More" button in the applet navigation bar is clicked
*
* @param appId Applet ID
* @return Returning true means that the button click event is handled by itself and no default action (popup menu) needs to be performed. Returning false means that the default action needs to be performed
*/
fun onNavigationBarMoreButtonClicked(context: Context, appId: String): Boolean
}The onNavigationBarMoreButtonClicked Exemplo de implementação do método é o seguinte:
public class AppletProcessHandler implements IAppletProcessHandler {
@NonNull
private Context mContext;
private AppletProcessHandler() {
}
public AppletProcessHandler(@NonNull Context context) {
this.mContext = context;
}
@Nullable
@Override
fun onNavigationBarMoreButtonClicked(context: Context, appId: String): Boolean {
// If you need to customize more panels, write the logic to show more panels here and return true.
// If you do not need to customize more panels, you can return false.
return false
}
}8. Self-Injetando itens de menu no painel mais
O atual SDK SPPOPOPORTS Adicionando MENU ITMS PERDIDADO A mais painéis, e os itens de menu são classificados por tipo como Tipos de Commit e OnMiniprom.
- Comum: Este tipo não relata o processamento pelo applet
- ONMINIPROGRAM: Este tipo obtém dados do applet Wheret quando o menu é clivado para fornecer processamento de negócios ao aplicativo.
Nota
- Os itens de menu personalizados podem ser configurados pelo administrador para serem exibidos ou não, e o menu Idfigurado pelo Admin de volta corresponde ao ID do menu personalizado. Se T. O fundo do administrador não estiver configurado, ele não atribuirá o menu injeto no Lado do aplicativo. 2.
- Menu do tipo OnMiniprogram, se você deseja exibi -lo, você deve implementar em {menuId} ButtonHandler (ID é capitalização inicial) na página atual, para exame, se o ID do menu estiver compartilhado, o nome do método para imaginar é oSharcingingButtonHandler. 3 3 ..
- O menu ITMS exibido no painel final mais é retirado da Internet dos itens de menu retornados pelo backen do administrador, o menu ITMS injetado pelo aplicativo, e os itens de menu implementados na página atual do applet.
Como uma emempla: Se o conjunto de eventos de item de menu fotografado na página atual do applet for um;
Uma coleção de menu ITMS injetar por aplicativo como B, contendo a coleção B1 para menus do tipo Common e Collection B2 para menus do tipo OnMiniprogram;
A coleção de menus configurada pela administração de volta é c;
A resposta final da coleção de menus personalizada exibida, em dois casos:
Se c estiver vazio (nulo para Android, nulo para iOS), então
A e B2 se interessam por obter d;
D e B1 são combinados para objetar e;
The final result is E.Se C não for nulo (não é nulo para Android, não nulo para iOS), então:
A e B2 se interessam por obter d;
D e B1 são combinados para objetar e;
E e C fazem o cruzamento para obter f;
The final result is F.
Nota
- Se c é [], significa que todos os menus personalizados não são exibidos.
- Para que o trabalho seja feito no tamanho do applet, consulte applet-API-custom menu
- Por que se interessar? Como o comportamento do menu personalizado precisa ser implementado por, se ele é configurado apenas pelo backndd, isso resultará em um bitu ateion, onde o menu é exibido e o clique não é responsivo.
8.1 Cobertura
Essa configuração é implementada pelo aplicativo e pode ser usada para injetar o DIFLESOMUTS no mais pank para diferentes IDs.
8.2 Método de configuração do iOS
Apenas implemente customMenusInApplet:atPath: e customMenu:inApplet:didClickAtPath: em FATAppletDelegate Então então
Primeiro, personalize um FATClientHelper classe que imagina o FATAppletDelegate Protocolo.
#import <Foundation/Foundation.h>
#import <FinApplet/FinApplet.h>
@interface FATClientHelper : NSObject<FATAppletDelegate>
+ (instancetype)shareInstance;
@endEntão, após a inicialização bem -sucedida do SDK, o proxy do SDK para o FATClientHelper Objeto.
Sample Code
[[FATClient sharedClient] initWithConfig:config error:nil];
[FATClient sharedClient].delegate = [FATClientHelper shareInstance];Então, para implementar o modelo de menu personalizado, você precisa implementar o FATAppletMenuProtocol Protocolo.
@interface FATCustomMenuModel : NSObject<FATAppletMenuProtocol>
@end
// Returns the menu object to be injected, the menu object must implement the FATAppletMenuProtocol protocol
// Menu objects are of two types (Common by default):
// 1.Common type: Configuration then display
// 2.OnMiniProgram type: need background configuration + applet configuration, take the same menuId collection display
// PS: Here is compatible with the old version, if the backend is not upgraded version, or the backend is not configured after upgrading the version, you only need to adapt the menuId of the menu object to NSString type
- (NSArray<id<FATAppletMenuProtocol>> *)customMenusInApplet:(FATAppletInfo *)appletInfo atPath:(NSString *)path
{
FATCustomMenuModel *favModel1 = [[FATCustomMenuModel alloc] init];
favModel1.menuId = @ "WXShareAPPFriends" ;
favModel1.menuTitle = @ "Phiz Friends" ;
favModel1.menuIconImage = [UIImage imageNamed:@ "mini_menu_chat" ];
favModel1.menuType = FATAppletMenuStyleOnMiniProgram;//For menu types that need to interact with the applet, such as the share applet button, when you click the button to share the applet, you may need to get some data of the applet
// Default is normal menu type, no need to have interaction with the applet
FATCustomMenuModel *favModel2 = [[FATCustomMenuModel alloc] init];
favModel2.menuId = @ "1002" ;
favModel2.menuTitle = @ "Phiz Friend Circle" ;
favModel2.menuIconImage = [UIImage imageNamed:@ "mini_menu_timeline" ];
return @[favModel1, favModel2];
}
// Event when custom menu is clicked (old version, used when backend is not upgraded or menu is not configured after upgrade)
- (void)customMenu:(id<FATAppletMenuProtocol>)customMenu inApplet:(FATAppletInfo *)appletInfo didClickAtPath:(NSString *)path
{
NSLog(@ "Clicked%@" ,customMenu.menuTitle);
NSLog(@ "path = %@" ,path);
}
// Events when clicking on custom menus (new version, used when backend is configured with applets)
- (void)clickCustomItemMenuWithInfo:(NSDictionary *)contentInfo completion:(void (^)(FATExtensionCode, NSDictionary *))completion
{
/**
contentInfo contains
{
@ "title" : @ "title" ,
@ "description" : @ "description" ,
@ "imageUrl" : @ "image path" ,
@ "path" : @ "Path to applet page when clicked" ",
@ "menuId" : @ "Clicked menu button identifier" ,
@ "params" : self.params // raw parameter data, provided by the applet
}
*/
// Applet callback call to notify applet click event processing
completion(FATExtensionCodeSuccess, contentInfo);
}8.3 Método de configuração do Android
O injeção do menu Itms no "More" O menu é implementado por IAppletHandler , Que chamará de volta o método da interface getRegisteredMoreMenuItems Para obter os itens de menu injetados e o método da interface onRegisteredMoreMenuItemClicked para o aplicativo host, que imaginará a lógica de negócios de especificação.
getRegisteredMoreMenuItems e onRegisteredMoreMenuItemClicked do seguinte modo.
/**
* Get the registered "More" menu item
*
* @param appId applet ID
* @return Register for the "More" menu item
*/
fun getRegisteredMoreMenuItems(appId: String): List<MoreMenuItem>?
/**
* The "More" menu item of the registration is clicked
*
* @param appId Applet ID
* @param path Applet page path
* @param menuItemId ID of the clicked menu item
* @param appInfo Applet information, a string of json, contains information such as applet id, applet name, applet icon, user id, forwarded data content, etc.
* The content of [appInfo] has the following format:
* {
* "appTitle" : " PhizClip Applet" ,
* "appAvatar" : "https:\/\/www.finogeeks.club\/statics\/images\/swan_mini\/swan_logo.png" ,
* "appId" : "5df36b3f687c5c00013e9fd1" ,
* "appType" : "trial" ,
* "userId" : "finogeeks" ,
* "cryptInfo" : "SFODj9IW1ENO8OA0El8P79aMuxB1DJvfKenZd7hrnemVCNcJ+Uj9PzkRkf/Pu5nMz0cGjj0Ne4fcchBRCmJO+As0XFqMrOclsqrXaogsaUPq2jJKCCao03vI8rkHilrWxSDdzopz1ifJCgFC9d6v29m9jU29wTxlHsQUtKsk/wz0BROa+aDGWh0rKvUEPgo8mB+40/zZFNsRZ0PjsQsi7GdLg8p4igKyRYtRgOxUq37wgDU4Ymn/yeXvOv7KrzUT" ,
* "params" : {
* "title" : "apt-test-tweet-The dynamics of interface test releases!@#¥%……&*(" ,
* "desc" : "Service experts by your side" ,
* "imageUrl" : "finfile:\/\/tmp_fc15edd8-2ff6-4c54-9ee9-fe5ee034033d1576550313667.png" ,
* "path" : "pages\/tweet\/tweet-detail.html?fcid=%40staff_staff1%3A000000.finogeeks.com&timelineId=db0c2098-031e-41c4-b9c6-87a5bbcf681d&shareId=3dfa2f78-19fc-42fc-b3a9-4779a6dac654" ,
* "appInfo" : {
* "weixin" : {
* "path" : "\/studio\/pages\/tweet\/tweet-detail" ,
* "query" : {
* "fcid" : "@staff_staff1:000000.finogeeks.com" ,
* "timelineId" : "db0c2098-031e-41c4-b9c6-87a5bbcf681d"
* }
* }
* }
* }
* }
* Description of the fields in [appInfo]:
* appId applet ID
* appTitle applet name
* appAvatar applet avatar
* appType applet type, where trial means experience version, temporary means temporary version, review means review version, release means online version, development means development version
* userId User ID
* cryptInfo Applet encryption information
* params Other parameters attached, passed by the applet itself
*
* @param bitmap The cover image of the applet. If the [appInfo].params.imageUrl field is a link address of http, https, then the applet cover image
* Otherwise, the cover image of the applet is taken as [bitmap].
* @param callback result callback.
*/
fun onRegisteredMoreMenuItemClicked(appId: String, path: String, menuItemId: String, appInfo: String?, bitmap: Bitmap?, callback: IAppletCallback)O IAppletHandler A instância precisa ser passada chamando o setAppletHandler(appletHandler: IAppletHandler) Método do IAppletApiManager Então então
O getRegisteredMoreMenuItems Método e o onRegisteredMoreMenuItemClicked O método é implementado da seguinte maneira.
/**
* {@link IAppletHandler} implementation class, used to implement some business scenarios, such as registering "more" menu items, forwarding applets, etc.
*/
public class AppletHandler implements IAppletHandler {
@NonNull
private Context mContext;
private AppletHandler() {
}
public AppletHandler(@NonNull Context context) {
this.mContext = context;
}
@Nullable
@Override
public List<MoreMenuItem> getRegisteredMoreMenuItems(@NotNull String appId) {
List<MoreMenuItem> items = new ArrayList<>();
MoreMenuItem item0 = new MoreMenuItem( "WXShareAPPFriends" , "Phiz Good Friends" , MoreMenuType.ON_MINI_PROGRAM);
items.add(item0);
MoreMenuItem item1 = new MoreMenuItem( "WXShareAPPMoments" , "Phiz Friend Circle" , MoreMenuType.ON_MINI_PROGRAM, true);
items.add(item1);
MoreMenuItem item2 = new MoreMenuItem( "ShareSinaWeibo" , "Sina Weibo" , MoreMenuType.ON_MINI_PROGRAM);
items.add(item2);
MoreMenuItem item3 = new MoreMenuItem( "ShareQQFirends" , "QQ" , MoreMenuType.ON_MINI_PROGRAM);
items.add(item3);
MoreMenuItem item4 = new MoreMenuItem( "ShareDingDing" , "Dingding" , MoreMenuType.ON_MINI_PROGRAM);
items.add(item4);
MoreMenuItem item5 = new MoreMenuItem( "ShareLinks" , "The title is based on the back-end configuration" , MoreMenuType.ON_MINI_PROGRAM);
items.add(item5);
MoreMenuItem item6 = new MoreMenuItem( "SharePicture" , "SharePicture" , MoreMenuType.ON_MINI_PROGRAM);
items.add(item6);
MoreMenuItem item7 = new MoreMenuItem( "Restart" , "Restart" , MoreMenuType.COMMON);
items.add(item7);
MoreMenuItem item8 = new MoreMenuItem( "Desktop" , "Desktop" , MoreMenuType.COMMON);
items.add(item8);
return items;
}
@Override
public void onRegisteredMoreMenuItemClicked(@NotNull String appId, @NotNull String path, @NotNull String menuItemId, @Nullable String appInfo, @Nullable Bitmap bitmap, @NotNull IAppletCallback callback) {
Toast.makeText(mContext, "Applet" + appId + "'s" + path + "Menu of the page" + menuItemId + "was clicked, appInfo : " + appInfo + " bitmap : " + bitmap, Toast.LENGTH_SHORT).show();
callback.onSuccess(null);
}
}MoreMenuItem é a classe de dados de entrada do menu, como segue:
/**
* More menu entries
*
* @param id Menu entry ID
* @param title Menu menu entry title
* @param image Menu entry icon address
* @param icon The resource ID corresponding to the menu entry icon
* @param type Menu entry type
* @param isEnable Availability of menu entries
*/
data class MoreMenuItem(val id: String,
val title: String,
val image: String,
@DrawableRes val icon: Int,
val type: MoreMenuType = MoreMenuType.COMMON,
val isEnable: Boolean = true) {
/**
* Construction method
* @param id Menu entry ID
* @param title Menu menu entry title
* @param type Menu entry type [MoreMenuType.COMMON] or [MoreMenuType.ON_MINI_PROGRAM]
*/
constructor(id: String, title: String, type: MoreMenuType) : this(id, title, "" , -1, type, true)
}MoreMenuType é uma classe de enumeração, como segue.
/**
* More menu types
* [COMMON] is a normal menu type, no interaction with the applet is required
* [ON_MINI_PROGRAM] is the type of menu that needs to interact with the applet, such as the share applet button, when you click the button to share the applet, you may need to get some data about the applet10
*/
enum class MoreMenuType {
COMMON, ON_MINI_PROGRAM
}