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

Page tree

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

Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 9 Next »

数据分析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