Arliang
Arliang
  • 发布:2017-10-11 11:57
  • 更新:2018-03-30 17:27
  • 阅读:1814

ios App Resume的时候plus.runtime.arguments没变化

分类:5+ SDK

http://ask.dcloud.net.cn/article/64
我按照上面的设置了打开的url,比如 test://aaa,可以通过URL打开app了,但如果App已经启动了,再通过别的URL(比如test://bbb)返回APP,在iOS下plus.runtime.arguments没有变化,这个问题怎么解决,要怎么获取新的URL
我在原生代码里面看到url已经在下面的这个参数里面了,但不知道如何传给webview

// open url  
func application(_ application: UIApplication, handleOpen url: URL) -> Bool {  
    PDRCore.instance().handle(PDRCoreSysEvent.openURL, with: url);  
    return true;  
}

我用了个比较挫的方法解决了这个问题,就是在AppDelegate.swift添加一个全局变量globalLaunchUrl

var globalLaunchUrl = ""  

// ...  

// open url  
func application(_ application: UIApplication, handleOpen url: URL) -> Bool {  
  PDRCore.instance().handle(PDRCoreSysEvent.openURL, with: url);  
  globalLaunchUrl = url.absoluteString;  
  return true;  
}

然后添加一个插件方法

具体怎么制作插件查看这里:http://ask.dcloud.net.cn/article/67

// CM.swift  
import Foundation  
import AVFoundation  

@objc(CM)  

class CM:PGPlugin  
{  

//... 具体怎么写查看这里 http://ask.dcloud.net.cn/article/67  

func getLaunchUrl(_ commands:PGMethod ?) -> Data{  

  // CallBackid 异步方法的回调id,H5+ 会根据回调ID通知JS层运行结果成功或者失败  
  // let cbid : String = (commands?.arguments?[0])! as! String;  

  // 运行Native代码结果和预期相同,调用回调通知JS层运行成功并返回结果  
  // PDRCommandStatusOK 表示触发JS层成功回调方法  
  // PDRCommandStatusError 表示触发JS层错误回调方法  
  let nsstring = "'\(globalLaunchUrl)'" as NSString  

  return nsstring.data(using: String.Encoding.utf8.rawValue)!  
}  
func clearLaunchUrl(){  
  globalLaunchUrl = ""  
}

接着在启动页添加resume事件,为了省事,这里就不写插件的JS文件了,直接调用bridge.execSync

document.addEventListener("resume", resumeCheckUrl, false);  

function resumeCheckUrl() {  
  if (mui.os.ios) {  
    var launchUrl = window.plus.bridge.execSync('CM', "getLaunchUrl")  
    checkArguments(launchUrl)  
    window.plus.bridge.execSync('CM', "clearLaunchUrl")  
  }  
}  

function checkArguments(url) {  
  alert(url)  
}  

// ...  

}

这个markdown编辑器不行啊,代码块里面的下划线和反斜杠还要转义

呃,预览跟发布后不一样,预览的不对,需要转义

2017-10-11 11:57 负责人:无 分享
已邀请:
猫猫猫猫

猫猫猫猫 - 用户已离线

  • Arliang (作者)

    这是iOS,没有触发

    2017-10-12 22:28

  • 猫猫猫猫

    我一直用的旧版本的5+SDK离线打包,使用没问题。新版本没测试,可能有bug

    2017-10-12 22:38

g***@163.com

g***@163.com

使用完之后清除原值即可
if (plus.runtime.arguments) {
plus.runtime.arguments = '';
}

  • g***@163.com

    我写过这个代码,但是清不掉是怎么回事。再次打开还能打印出plus.runtime.arguments的值!

    2019-02-20 15:31

  • g***@163.com

    回复 g***@163.com:这个没有遇到过了,或者可以在清除前后打印日志看看

    2019-02-27 10:59

  • g***@163.com

    回复 g***@163.com: 能看下你代码吗?整个这一块的代码。

    2019-07-10 10:16

该问题目前已经被锁定, 无法添加新回复