ios与andriod中webview网页js用户登录状态同步方案
在app开发过程中,我们会将一些活动营销页面使用h5来制作,然后采用ios与andriod的app中的webview中进行加载,但是现在有个问题,h5页面中如何读取用户的登录状态
有几种方案可以解决
一、js调用原生接口
这种方式很简单,原生app本身有一套机制存储用户的登录状态信息,只要通过webview开放一个接口给h5页面进行js调用即可假设这个js方法叫getuseinfo
那么我们先看看ios怎么设置这个接口,在iOS 7之后,apple添加了一个新的库JavaScriptCore,用来做JS交互,因此JS与原生OC交互也变得简单了许多。
JSContext *context = [self.webView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"]; //再然后定义好JS需要调用的方法,例如JS要调用getuserinfo方法: //则可以在UIWebView加载url完成后,在其代理方法中添加要调用的getuserinfo方法: - (void)webViewDidFinishLoad:(UIWebView *)webView { JSContext *context = [self.webView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"]; //定义好JS要调用的方法, getuserinfo就是调用的getuseinfo方法名 context[@"getuserinfo"] = ^() { NSLog(@"+++++++Begin Log+++++++"); NSArray *args = [JSContext currentArguments]; for (JSValue *jsVal in args) { NSLog(@"%@", jsVal.toString);//打印js传的参数 } JSValue *this=[JSContect currentThis] NSLog(@"-------End Log-------"); return @"123";//返回用户id给js }; }再看看andriod如何设置这个接口
protected void onCteate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); WebView webview; webview= (WebView)findViewById(R.id.webView); webview.getSettings().setJavaScriptEnabled(true); webview.loadUrl("http://www.bfw.wiki/index.html"); webview.addJavascriptInterface(new WebAppInterface(this), "Bfw"); } public class WebAppInterface { Context mContext; WebAppInterface(Context c) { mContext = c; } //定义js要访问的函数 @JavascriptInterface public String getuserinfo() { return "123";//返回用户的信息 } }好了,最后一步,在html中直接调用app的接口,这里要区分一下ios与Android
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>BFW NE...
点击查看剩余70%
网友评论0