ios与andriod中webview网页js用户登录状态同步方案

ios与andriod中webview网页js用户登录状态同步方案

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%

{{collectdata}}

网友评论0