【仅供内部供应商使用,不提供对外解答和培训】

Page tree

【仅供内部供应商使用,不提供对外解答和培训】

Skip to end of metadata
Go to start of metadata

数据分析V10目前已定义的参数

登录前传递的参数

这些参数是数据分析V10进行登录时需要拿到的

username:登录使用的用户名

password:登录使用的密码

serverName:服务器的名称

serverUrl:服务器的URL地址

keepDemo:是否显示demo服务器,设置keepDemo=true即为显示,设置keepDemo=false即为不显示

登录后传递的参数

这些参数会在登录后传递给数据分析V10

reportUrl:模版文件的路径。这个路径是在决策系统-目录管理中,将模板文件添加进目录时的路径。也是模板文件相对于webroot/WEB-INF/reportlets 的路径。如下图所示

reportName:打开模板后期望显示的导航栏标题。这个标题的设置没有限制,按照自己的需求设置即可。

其他参数

其他参数是用户自定义的参数,同样以key=value的健值对的形式传给APP。APP会在登录时带上这些参数。

启动逻辑

·数据分析V10被scheme唤起后,如果当前服务器列表中存在与schemeURL中的服务器名(severURL)和服务器地址(serverUrl)相同的服务器,则将此服务器作为选中服务器。如果没有,则尝试添加服务器,并将添加的服务器作为选中服务器。

·登录一个服务器时,数据分析V10会根据传递的username和password参数自动登录服务器。若没有设置这两个参数,且之前该服务器勾选了自动登录,数据分析V10则会自动登录服务器,并打开URL制定的模板。

·登录服务器时,若没有设置username和password参数,登录成功后数据分析V10仍然可以识别其他参数,直接打开参数中指定的模板文件。

·传递参数时,必要的参数有serverName,serverUrl,reportUrl。

·若不传递keepDemo,则默认不显示demo服务器。若不传递reportName,则页面标题为模板名称。

·设置了username和password参数时,传递给数据分析V10的这两个参数会强制覆盖用户名和密码的输入框里的内容。这意味着当使用了这两个参数时,登录app后注销登录,再通过输入框登录其他账号时,登录的仍然是scheme传递过来的账号。

scheme启动的具体实现

实现下面的方法,在需要启动数据分析V10的地方通过[self openScheme];调用此方法即可。也可以根据自己的需要对这个方法做更多的封装。

openScheme方法

 

- (void)openScheme {
    //scheme启动FineReactApp
    NSString *schemeUrl = @"com.fr.finereport://?serverName=servername&serverUrl=http://192.168.50.43:8075/webroot/decision&keepDemo=true&reportUrl=超级链接/S订单.cpt&reportName=S订单&username=1&password=1";;
    //NSString *schemeUrl = @"com.fr.finereport://?serverName=servername&serverUrl=http://192.168.50.43:8075/webroot/decision&keepDemo=true&reportUrl=超级链接/S订单.cpt&reportName=S订单&username=1&password=1";;
    if (@available(iOS 10, *)) {
        NSDictionary *dic = @{};
        [[UIApplication sharedApplication] openURL:[NSURL URLWithString:[schemeUrl stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]]] options:dic completionHandler:nil];
    else {
        [[UIApplication sharedApplication] openURL:[NSURL URLWithString:[schemeUrl stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]]];
    }

 

实现时需要注意的地方:

·使用finereport://和com.fr.finereport://都可以正常启动FineReactApp。

·传递参数时"?"开头,每个参数之间以"&"分隔。

·在iOS10以后,调用scheme的方法[UIApplication openURL]被[UIApplication openURL: option: completionHandler:]代替,所以需要进行系统版本判断if(@available(iOS 10,*)) {}

·使用带有中文字符的字符串作为URL时,务必使用 [NSString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding] 或是 [NSString stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]]    进行编码,否则会启动失败。其中 [NSString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding] 在iOS9以后被弃用,且可能造成将特殊符号也进行编码的问题,建议在iOS9及更新的系统中使用第二种方法 [NSString stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]] 进行编码。

 

关于scheme唤醒“数据分析”并实现单点登录的参数传递方式的说明

因为存在其他app通过“finereport://”或者“com.fr.finereport://”唤醒“数据分析”,而唤醒url里登录参数的格式可能很多,比如会进行多次加密,或者对参数格式也有特殊要求。

移动端在登录请求增加了一个参数用来传递app唤醒时所用的原始url

appLaunchUrl: app唤醒所需要的url,比如 com.fr.finereport://?{"loginToken":"xxxxxxxxxxxx","subToken":"xxxxxxxxxxx"}

第三方开发者为移动端开发后台的单点登录逻辑的时候,可以从login请求中,获取appLaunchUrl,拿到登录所需要的参数

  • No labels