测试
diff --git a/platforms/android/android.json b/platforms/android/android.json
index 8d319b4..105b5f2 100644
--- a/platforms/android/android.json
+++ b/platforms/android/android.json
@@ -67,6 +67,46 @@
             {
               "xml": "<feature name=\"screenshotName\"><param name=\"android-package\" value=\"com.coffice.ScreenshotBlocker\" /><param name=\"onload\" value=\"true\" /></feature>",
               "count": 1
+            },
+            {
+              "xml": "<feature name=\"QQSDK\"><param name=\"android-package\" value=\"me.vanpan.qqsdk.QQSDKPlugin\" /></feature>",
+              "count": 1
+            },
+            {
+              "xml": "<access origin=\"https://openmobile.qq.com/*\" />",
+              "count": 1
+            },
+            {
+              "xml": "<access origin=\"http://qzonestyle.gtimg.cn/*\" />",
+              "count": 1
+            },
+            {
+              "xml": "<access origin=\"http://pub.idqqimg.com/*\" />",
+              "count": 1
+            },
+            {
+              "xml": "<access origin=\"http://qzs.qq.com/*\" />",
+              "count": 1
+            },
+            {
+              "xml": "<access origin=\"http://m.qzone.com/*\" />",
+              "count": 1
+            },
+            {
+              "xml": "<access origin=\"http://*.ptlogin2.qq.com/*\" />",
+              "count": 1
+            },
+            {
+              "xml": "<access origin=\"http://*.qq.com/*\" />",
+              "count": 1
+            },
+            {
+              "xml": "<access origin=\"http://q2.qlogo.cn/*\" />",
+              "count": 1
+            },
+            {
+              "xml": "<preference name=\"QQ_APP_ID\" value=\"101885581\" />",
+              "count": 1
             }
           ]
         }
@@ -266,6 +306,34 @@
             }
           ]
         }
+      },
+      "app/src/main/AndroidManifest.xml": {
+        "parents": {
+          "/manifest": [
+            {
+              "xml": "<uses-permission android:name=\"android.permission.INTERNET\" />",
+              "count": 1
+            },
+            {
+              "xml": "<uses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\" />",
+              "count": 1
+            },
+            {
+              "xml": "<uses-permission android:name=\"android.permission.WRITE_EXTERNAL_STORAGE\" />",
+              "count": 1
+            }
+          ],
+          "/manifest/application": [
+            {
+              "xml": "<activity android:launchMode=\"singleTask\" android:name=\"com.tencent.tauth.AuthActivity\" android:noHistory=\"true\"><intent-filter><action android:name=\"android.intent.action.VIEW\" /><category android:name=\"android.intent.category.DEFAULT\" /><category android:name=\"android.intent.category.BROWSABLE\" /><data android:scheme=\"tencent101885581\" /></intent-filter></activity>",
+              "count": 1
+            },
+            {
+              "xml": "<activity android:configChanges=\"orientation|keyboardHidden\" android:name=\"com.tencent.connect.common.AssistActivity\" android:screenOrientation=\"portrait\" android:theme=\"@android:style/Theme.Translucent.NoTitleBar\"></activity>",
+              "count": 1
+            }
+          ]
+        }
       }
     }
   },
@@ -329,6 +397,10 @@
     },
     "cordova-plugin-prevent-screenshot-coffice": {
       "PACKAGE_NAME": "com.dalipolice.app"
+    },
+    "cordova-plugin-qqsdk": {
+      "QQ_APP_ID": "101885581",
+      "PACKAGE_NAME": "com.dalipolice.app"
     }
   },
   "dependent_plugins": {},
@@ -684,6 +756,14 @@
       "clobbers": [
         "window.plugins.preventscreenshot"
       ]
+    },
+    {
+      "id": "cordova-plugin-qqsdk.QQSDK",
+      "file": "plugins/cordova-plugin-qqsdk/www/qq.js",
+      "pluginId": "cordova-plugin-qqsdk",
+      "clobbers": [
+        "QQSDK"
+      ]
     }
   ],
   "plugin_metadata": {
@@ -705,6 +785,7 @@
     "cordova-plugin-wkwebview-engine": "1.2.1",
     "cordova-plugin-brightness": "0.1.5",
     "cordova-plugin-fingerprint-aio": "3.0.1",
-    "cordova-plugin-prevent-screenshot-coffice": "1.0.1"
+    "cordova-plugin-prevent-screenshot-coffice": "1.0.1",
+    "cordova-plugin-qqsdk": "0.9.7"
   }
 }
diff --git a/platforms/android/app/libs/mta-sdk-1.6.2.jar b/platforms/android/app/libs/mta-sdk-1.6.2.jar
new file mode 100644
index 0000000..49b7787
--- /dev/null
+++ b/platforms/android/app/libs/mta-sdk-1.6.2.jar
Binary files differ
diff --git a/platforms/android/app/libs/open_sdk_r5793.jar b/platforms/android/app/libs/open_sdk_r5793.jar
new file mode 100644
index 0000000..eae0e84
--- /dev/null
+++ b/platforms/android/app/libs/open_sdk_r5793.jar
Binary files differ
diff --git a/platforms/android/app/src/main/AndroidManifest.xml b/platforms/android/app/src/main/AndroidManifest.xml
index b7ece77..4b6fab6 100644
--- a/platforms/android/app/src/main/AndroidManifest.xml
+++ b/platforms/android/app/src/main/AndroidManifest.xml
@@ -81,6 +81,15 @@
         <meta-data android:name="JPUSH_CHANNEL" android:value="developer-default" />
         <meta-data android:name="JPUSH_APPKEY" android:value="1fc62c8c6204ec4b0ae65ee2" />
         <activity android:exported="true" android:name="de.niklasmerz.cordova.biometric.BiometricActivity" android:theme="@style/TransparentTheme" />
+        <activity android:launchMode="singleTask" android:name="com.tencent.tauth.AuthActivity" android:noHistory="true">
+            <intent-filter>
+                <action android:name="android.intent.action.VIEW" />
+                <category android:name="android.intent.category.DEFAULT" />
+                <category android:name="android.intent.category.BROWSABLE" />
+                <data android:scheme="tencent101885581" />
+            </intent-filter>
+        </activity>
+        <activity android:configChanges="orientation|keyboardHidden" android:name="com.tencent.connect.common.AssistActivity" android:screenOrientation="portrait" android:theme="@android:style/Theme.Translucent.NoTitleBar" />
     </application>
     <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
     <uses-permission android:name="android.permission.CAMERA" android:required="false" />
diff --git a/platforms/android/app/src/main/assets/www/cordova_plugins.js b/platforms/android/app/src/main/assets/www/cordova_plugins.js
index a989701..08297e5 100644
--- a/platforms/android/app/src/main/assets/www/cordova_plugins.js
+++ b/platforms/android/app/src/main/assets/www/cordova_plugins.js
@@ -351,6 +351,14 @@
       "clobbers": [
         "window.plugins.preventscreenshot"
       ]
+    },
+    {
+      "id": "cordova-plugin-qqsdk.QQSDK",
+      "file": "plugins/cordova-plugin-qqsdk/www/qq.js",
+      "pluginId": "cordova-plugin-qqsdk",
+      "clobbers": [
+        "QQSDK"
+      ]
     }
   ];
   module.exports.metadata = {
@@ -372,6 +380,7 @@
     "cordova-plugin-wkwebview-engine": "1.2.1",
     "cordova-plugin-brightness": "0.1.5",
     "cordova-plugin-fingerprint-aio": "3.0.1",
-    "cordova-plugin-prevent-screenshot-coffice": "1.0.1"
+    "cordova-plugin-prevent-screenshot-coffice": "1.0.1",
+    "cordova-plugin-qqsdk": "0.9.7"
   };
 });
\ No newline at end of file
diff --git a/platforms/android/app/src/main/java/me/vanpan/qqsdk/QQSDKPlugin.java b/platforms/android/app/src/main/java/me/vanpan/qqsdk/QQSDKPlugin.java
new file mode 100644
index 0000000..0d8f2bc
--- /dev/null
+++ b/platforms/android/app/src/main/java/me/vanpan/qqsdk/QQSDKPlugin.java
@@ -0,0 +1,687 @@
+package me.vanpan.qqsdk;
+
+import android.content.Intent;
+import android.content.pm.ApplicationInfo;
+import android.content.pm.PackageManager;
+import android.graphics.Bitmap;
+import android.graphics.BitmapFactory;
+import android.os.Bundle;
+import android.text.TextUtils;
+import android.util.Base64;
+import android.util.Log;
+import android.webkit.URLUtil;
+import com.tencent.connect.common.Constants;
+import com.tencent.connect.share.QQShare;
+import com.tencent.connect.share.QzonePublish;
+import com.tencent.connect.share.QzoneShare;
+import com.tencent.open.GameAppOperation;
+import com.tencent.tauth.IUiListener;
+import com.tencent.tauth.Tencent;
+import com.tencent.tauth.UiError;
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.HttpURLConnection;
+import java.net.URL;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Date;
+import org.apache.cordova.CallbackContext;
+import org.apache.cordova.CordovaArgs;
+import org.apache.cordova.CordovaPlugin;
+import org.apache.cordova.PluginResult;
+import org.json.JSONException;
+import org.json.JSONObject;
+
+import static org.apache.cordova.CordovaActivity.TAG;
+
+/**
+ * Project: QQSDKPlugin
+ * Created by Van on 2016/12/16.
+ */
+
+class ShareScene {
+  public static final int QQ = 0;
+  public static final int QQZone = 1;
+  public static final int Favorite = 2;
+}
+
+public class QQSDKPlugin extends CordovaPlugin {
+  private static Tencent mTencent;
+  private CallbackContext currentCallbackContext;
+  private String APP_ID;
+  private static final String QQ_APP_ID = "qq_app_id";
+  private static final String QQ_CANCEL_BY_USER = "cancelled by user";
+  private static final String QQ_RESPONSE_ERROR = "QQ response is error";
+  private static final String QZONE_SHARE_CANCEL = "QZone share is cancelled";
+  private static final String QQFAVORITES_CANCEL = "QQ Favorites is cancelled";
+  private static final String QQ_Client_NOT_INSYALLED_ERROR = "QQ client is not installed";
+  private static final String QQ_PARAM_ERROR = "param incorrect";
+
+  @Override protected void pluginInitialize() {
+    super.pluginInitialize();
+    APP_ID = webView.getPreferences().getString(QQ_APP_ID, "");
+    mTencent = Tencent.createInstance(APP_ID, this.cordova.getActivity().getApplicationContext());
+  }
+
+  @Override
+  public boolean execute(String action, final CordovaArgs args, final CallbackContext callbackContext)
+      throws JSONException {
+    if (action.equalsIgnoreCase("checkClientInstalled")) {
+      return checkClientInstalled(callbackContext);
+    }
+    if (action.equals("ssoLogin")) {
+      return ssoLogin(callbackContext);
+    }
+    if (action.equals("logout")) {
+      return logout(callbackContext);
+    }
+    if (action.equals("shareText")) {
+      return shareText(args,callbackContext);
+    }
+    if (action.equals("shareImage")) {
+      return shareImage(args,callbackContext);
+    }
+    if (action.equals("shareNews")) {
+      return shareNews(args,callbackContext);
+    }
+    if (action.equals("shareAudio")) {
+      return shareAudio(args,callbackContext);
+    }
+    return super.execute(action, args, callbackContext);
+  }
+
+  /**
+   * 检查手机QQ客户端是否安装
+   */
+  private boolean checkClientInstalled(CallbackContext callbackContext) {
+    Boolean installed = mTencent.isSupportSSOLogin(QQSDKPlugin.this.cordova.getActivity());
+    if (installed) {
+      callbackContext.success();
+    } else {
+      callbackContext.error(QQ_Client_NOT_INSYALLED_ERROR);
+    }
+    return true;
+  }
+
+  /**
+   * QQ 单点登录
+   */
+  private boolean ssoLogin(CallbackContext callbackContext) {
+    currentCallbackContext = callbackContext;
+      Runnable runnable = new Runnable() {
+        @Override public void run() {
+          mTencent.login(QQSDKPlugin.this.cordova.getActivity(), "all", loginListener);
+        }
+      };
+      this.cordova.getActivity().runOnUiThread(runnable);
+      this.cordova.setActivityResultCallback(this);
+      return true;
+  }
+
+  /**
+   * QQ 登出
+   */
+  private boolean logout(CallbackContext callbackContext) {
+    mTencent.logout(this.cordova.getActivity());
+    callbackContext.success();
+    return true;
+  }
+
+  public boolean shareText(CordovaArgs args, CallbackContext callbackContext) {
+    final Bundle params = new Bundle();
+    currentCallbackContext = callbackContext;
+    final JSONObject data;
+    try {
+      data = args.getJSONObject(0);
+      String text = data.has("text")?  data.getString("text"): "";
+      int shareScene = data.has("scene")? data.getInt("scene"): 0;
+      switch (shareScene) {
+        case ShareScene.QQ:
+          callbackContext.error("Android 不支持分享文字到 QQ");
+          break;
+        case ShareScene.Favorite:
+          params.putInt(GameAppOperation.QQFAV_DATALINE_REQTYPE,
+              GameAppOperation.QQFAV_DATALINE_TYPE_TEXT);
+          params.putString(GameAppOperation.QQFAV_DATALINE_TITLE, getAppName());
+          params.putString(GameAppOperation.QQFAV_DATALINE_DESCRIPTION, text);
+          params.putString(GameAppOperation.QQFAV_DATALINE_APPNAME, getAppName());
+          Runnable favoritesRunnable = new Runnable() {
+            @Override public void run() {
+              mTencent.addToQQFavorites(QQSDKPlugin.this.cordova.getActivity(), params,
+                  addToQQFavoritesListener);
+            }
+          };
+          this.cordova.getActivity().runOnUiThread(favoritesRunnable);
+          this.cordova.setActivityResultCallback(this);
+          break;
+        case ShareScene.QQZone:
+          params.putInt(QzoneShare.SHARE_TO_QZONE_KEY_TYPE,
+              QzonePublish.PUBLISH_TO_QZONE_TYPE_PUBLISHMOOD);
+          params.putString(QzoneShare.SHARE_TO_QQ_TITLE, text);
+          Runnable zoneRunnable = new Runnable() {
+
+            @Override public void run() {
+              mTencent.publishToQzone(QQSDKPlugin.this.cordova.getActivity(), params,
+                  qZoneShareListener);
+            }
+          };
+          this.cordova.getActivity().runOnUiThread(zoneRunnable);
+          this.cordova.setActivityResultCallback(this);
+          break;
+        default:
+          break;
+      }
+    } catch (JSONException e) {
+      callbackContext.error(QQ_PARAM_ERROR);
+      return true;
+    }
+    return true;
+  }
+
+  public boolean shareImage(CordovaArgs args, CallbackContext callbackContext) {
+    currentCallbackContext = callbackContext;
+    final JSONObject data;
+    try {
+      data = args.getJSONObject(0);
+      String title = data.has("title")?  data.getString("title"): "";
+      String description = data.has("description")?  data.getString("description"): "";
+      String image = data.has("image")?  data.getString("image"): "";
+      int shareScene = data.has("scene")? data.getInt("scene"): 0;
+      image = processImage(image);
+      final Bundle params = new Bundle();
+      switch (shareScene) {
+        case ShareScene.QQ:
+          params.putInt(QQShare.SHARE_TO_QQ_KEY_TYPE, QQShare.SHARE_TO_QQ_TYPE_IMAGE);
+          params.putString(QQShare.SHARE_TO_QQ_IMAGE_LOCAL_URL, image);
+          params.putString(QQShare.SHARE_TO_QQ_TITLE, title);
+          params.putString(QQShare.SHARE_TO_QQ_SUMMARY, description);
+          Runnable qqRunnable = new Runnable() {
+
+            @Override public void run() {
+              mTencent.shareToQQ(QQSDKPlugin.this.cordova.getActivity(), params, qqShareListener);
+            }
+          };
+          this.cordova.getActivity().runOnUiThread(qqRunnable);
+          this.cordova.setActivityResultCallback(this);
+          break;
+        case ShareScene.Favorite:
+          ArrayList<String> imageUrls = new ArrayList<String>();
+          imageUrls.add(image);
+          params.putInt(GameAppOperation.QQFAV_DATALINE_REQTYPE,
+              GameAppOperation.QQFAV_DATALINE_TYPE_IMAGE_TEXT);
+          params.putString(GameAppOperation.QQFAV_DATALINE_TITLE, title);
+          params.putString(GameAppOperation.QQFAV_DATALINE_DESCRIPTION, description);
+          params.putString(GameAppOperation.QQFAV_DATALINE_IMAGEURL, image);
+          params.putString(GameAppOperation.QQFAV_DATALINE_APPNAME, getAppName());
+          params.putStringArrayList(GameAppOperation.QQFAV_DATALINE_FILEDATA, imageUrls);
+          Runnable favoritesRunnable = new Runnable() {
+            @Override public void run() {
+              mTencent.addToQQFavorites(QQSDKPlugin.this.cordova.getActivity(), params,
+                  addToQQFavoritesListener);
+            }
+          };
+          this.cordova.getActivity().runOnUiThread(favoritesRunnable);
+          this.cordova.setActivityResultCallback(this);
+          break;
+        case ShareScene.QQZone:
+          params.putInt(QQShare.SHARE_TO_QQ_KEY_TYPE, QQShare.SHARE_TO_QQ_TYPE_IMAGE);
+          params.putString(QQShare.SHARE_TO_QQ_IMAGE_LOCAL_URL, image);
+          params.putString(QQShare.SHARE_TO_QQ_TITLE, title);
+          params.putString(QQShare.SHARE_TO_QQ_SUMMARY, description);
+          params.putInt(QQShare.SHARE_TO_QQ_EXT_INT, QQShare.SHARE_TO_QQ_FLAG_QZONE_AUTO_OPEN);
+          Runnable zoneRunnable = new Runnable() {
+
+            @Override public void run() {
+              mTencent.shareToQQ(QQSDKPlugin.this.cordova.getActivity(), params, qqShareListener);
+            }
+          };
+          this.cordova.getActivity().runOnUiThread(zoneRunnable);
+          this.cordova.setActivityResultCallback(this);
+          break;
+        default:
+          break;
+      }
+    } catch (JSONException e) {
+      callbackContext.error(QQ_PARAM_ERROR);
+      return true;
+    }
+    return true;
+  }
+
+  public boolean shareNews(CordovaArgs args, CallbackContext callbackContext) {
+    currentCallbackContext = callbackContext;
+    final JSONObject data;
+    try {
+      data = args.getJSONObject(0);
+      String title = data.has("title")?  data.getString("title"): "";
+      String description = data.has("description")?  data.getString("description"): "";
+      String image = data.has("image")?  data.getString("image"): "";
+      String url = data.has("url")?  data.getString("url"): "";
+      int shareScene = data.has("scene")? data.getInt("scene"): 0;
+      final Bundle params = new Bundle();
+      switch (shareScene) {
+        case ShareScene.QQ:
+          params.putInt(QQShare.SHARE_TO_QQ_KEY_TYPE, QQShare.SHARE_TO_QQ_TYPE_DEFAULT);
+          if(URLUtil.isHttpUrl(image) || URLUtil.isHttpsUrl(image)) {
+            params.putString(QQShare.SHARE_TO_QQ_IMAGE_URL,image);
+          } else {
+            params.putString(QQShare.SHARE_TO_QQ_IMAGE_LOCAL_URL,processImage(image));
+          }
+          params.putString(QQShare.SHARE_TO_QQ_TITLE, title);
+          params.putString(QQShare.SHARE_TO_QQ_TARGET_URL, url);
+          params.putString(QQShare.SHARE_TO_QQ_SUMMARY, description);
+          Runnable qqRunnable = new Runnable() {
+
+            @Override public void run() {
+              mTencent.shareToQQ(QQSDKPlugin.this.cordova.getActivity(), params, qqShareListener);
+            }
+          };
+          this.cordova.getActivity().runOnUiThread(qqRunnable);
+          this.cordova.setActivityResultCallback(this);
+          break;
+        case ShareScene.Favorite:
+          image = processImage(image);
+          params.putInt(GameAppOperation.QQFAV_DATALINE_REQTYPE,
+              GameAppOperation.QQFAV_DATALINE_TYPE_DEFAULT);
+          params.putString(GameAppOperation.QQFAV_DATALINE_TITLE, title);
+          params.putString(GameAppOperation.QQFAV_DATALINE_DESCRIPTION, description);
+          params.putString(GameAppOperation.QQFAV_DATALINE_IMAGEURL, image);
+          params.putString(GameAppOperation.QQFAV_DATALINE_URL, url);
+          params.putString(GameAppOperation.QQFAV_DATALINE_APPNAME, getAppName());
+          Runnable favoritesRunnable = new Runnable() {
+            @Override public void run() {
+              mTencent.addToQQFavorites(QQSDKPlugin.this.cordova.getActivity(), params,
+                  addToQQFavoritesListener);
+            }
+          };
+          this.cordova.getActivity().runOnUiThread(favoritesRunnable);
+          this.cordova.setActivityResultCallback(this);
+          break;
+        case ShareScene.QQZone:
+          image = processImage(image);
+          ArrayList<String> imageUrls = new ArrayList<String>();
+          imageUrls.add(image);
+          params.putInt(QzoneShare.SHARE_TO_QZONE_KEY_TYPE,
+              QzoneShare.SHARE_TO_QZONE_TYPE_IMAGE_TEXT);
+          params.putString(QzoneShare.SHARE_TO_QQ_TITLE, title);
+          params.putString(QzoneShare.SHARE_TO_QQ_SUMMARY, description);
+          params.putString(QzoneShare.SHARE_TO_QQ_TARGET_URL, url);
+          params.putStringArrayList(QzoneShare.SHARE_TO_QQ_IMAGE_URL, imageUrls);
+          Runnable zoneRunnable = new Runnable() {
+
+            @Override public void run() {
+              mTencent.shareToQzone(QQSDKPlugin.this.cordova.getActivity(), params,
+                  qZoneShareListener);
+            }
+          };
+          this.cordova.getActivity().runOnUiThread(zoneRunnable);
+          this.cordova.setActivityResultCallback(this);
+          break;
+        default:
+          break;
+      }
+    } catch (JSONException e) {
+      callbackContext.error(QQ_PARAM_ERROR);
+      return true;
+    }
+    return true;
+  }
+
+  public boolean shareAudio(CordovaArgs args, CallbackContext callbackContext) {
+    currentCallbackContext = callbackContext;
+    final JSONObject data;
+    try {
+      data = args.getJSONObject(0);
+      String title = data.has("title")?  data.getString("title"): "";
+      String description = data.has("description")?  data.getString("description"): "";
+      String image = data.has("image")?  data.getString("image"): "";
+      String url = data.has("url")?  data.getString("url"): "";
+      String flashUrl = data.has("flashUrl")?  data.getString("flashUrl"): "";
+      int shareScene = data.has("scene")? data.getInt("scene"): 0;
+      final Bundle params = new Bundle();
+      switch (shareScene) {
+        case ShareScene.QQ:
+          params.putInt(QQShare.SHARE_TO_QQ_KEY_TYPE, QQShare.SHARE_TO_QQ_TYPE_DEFAULT);
+          if(URLUtil.isHttpUrl(image) || URLUtil.isHttpsUrl(image)) {
+            params.putString(QQShare.SHARE_TO_QQ_IMAGE_URL,image);
+          } else {
+            params.putString(QQShare.SHARE_TO_QQ_IMAGE_LOCAL_URL,processImage(image));
+          }
+          params.putString(QQShare.SHARE_TO_QQ_AUDIO_URL, flashUrl);
+          params.putString(QQShare.SHARE_TO_QQ_TITLE, title);
+          params.putString(QQShare.SHARE_TO_QQ_TARGET_URL, url);
+          params.putString(QQShare.SHARE_TO_QQ_SUMMARY, description);
+          Runnable qqRunnable = new Runnable() {
+
+            @Override public void run() {
+              mTencent.shareToQQ(QQSDKPlugin.this.cordova.getActivity(), params, qqShareListener);
+            }
+          };
+          this.cordova.getActivity().runOnUiThread(qqRunnable);
+          this.cordova.setActivityResultCallback(this);
+          break;
+        case ShareScene.Favorite:
+          image = processImage(image);
+          params.putInt(GameAppOperation.QQFAV_DATALINE_REQTYPE,
+              GameAppOperation.QQFAV_DATALINE_TYPE_DEFAULT);
+          params.putString(GameAppOperation.QQFAV_DATALINE_TITLE, title);
+          params.putString(GameAppOperation.QQFAV_DATALINE_DESCRIPTION, description);
+          params.putString(GameAppOperation.QQFAV_DATALINE_IMAGEURL, image);
+          params.putString(GameAppOperation.QQFAV_DATALINE_URL, url);
+          params.putString(GameAppOperation.QQFAV_DATALINE_APPNAME, getAppName());
+          params.putString(GameAppOperation.QQFAV_DATALINE_AUDIOURL, flashUrl);
+          Runnable favoritesRunnable = new Runnable() {
+            @Override public void run() {
+              mTencent.addToQQFavorites(QQSDKPlugin.this.cordova.getActivity(), params,
+                  addToQQFavoritesListener);
+            }
+          };
+          this.cordova.getActivity().runOnUiThread(favoritesRunnable);
+          this.cordova.setActivityResultCallback(this);
+          break;
+        case ShareScene.QQZone:
+          image = processImage(image);
+          ArrayList<String> imageUrls = new ArrayList<String>();
+          imageUrls.add(image);
+          params.putInt(QzoneShare.SHARE_TO_QZONE_KEY_TYPE,
+              QzoneShare.SHARE_TO_QZONE_TYPE_IMAGE_TEXT);
+          params.putString(QzoneShare.SHARE_TO_QQ_TITLE, title);
+          params.putString(QzoneShare.SHARE_TO_QQ_SUMMARY, description);
+          params.putString(QzoneShare.SHARE_TO_QQ_TARGET_URL, url);
+          params.putString(QzoneShare.SHARE_TO_QQ_AUDIO_URL, flashUrl);
+          params.putStringArrayList(QzoneShare.SHARE_TO_QQ_IMAGE_URL, imageUrls);
+          Runnable zoneRunnable = new Runnable() {
+
+            @Override public void run() {
+              mTencent.shareToQzone(QQSDKPlugin.this.cordova.getActivity(), params,
+                  qZoneShareListener);
+            }
+          };
+          this.cordova.getActivity().runOnUiThread(zoneRunnable);
+          this.cordova.setActivityResultCallback(this);
+          break;
+        default:
+          break;
+      }
+    } catch (JSONException e) {
+      callbackContext.error(QQ_PARAM_ERROR);
+      return true;
+    }
+    return true;
+  }
+
+  /**
+   * 保存token 和 openid
+   */
+  public static void initOpenidAndToken(JSONObject jsonObject) {
+    try {
+      String token = jsonObject.getString(Constants.PARAM_ACCESS_TOKEN);
+      String expires = jsonObject.getString(Constants.PARAM_EXPIRES_IN);
+      String openId = jsonObject.getString(Constants.PARAM_OPEN_ID);
+      if (!TextUtils.isEmpty(token) && !TextUtils.isEmpty(expires) && !TextUtils.isEmpty(openId)) {
+        mTencent.setAccessToken(token, expires);
+        mTencent.setOpenId(openId);
+      }
+    } catch (Exception e) {
+    }
+  }
+
+  /**
+   * 获取应用的名称
+   */
+  private String getAppName() {
+    PackageManager packageManager = this.cordova.getActivity().getPackageManager();
+    ApplicationInfo applicationInfo = null;
+    try {
+      applicationInfo =
+          packageManager.getApplicationInfo(this.cordova.getActivity().getPackageName(), 0);
+    } catch (final PackageManager.NameNotFoundException e) {
+    }
+    final String AppName =
+        (String) ((applicationInfo != null) ? packageManager.getApplicationLabel(applicationInfo)
+            : "AppName");
+    return AppName;
+  }
+
+  /**
+   * 处理图片
+   * @param image
+   * @return
+   */
+  private String processImage(String image) {
+    if(URLUtil.isHttpUrl(image) || URLUtil.isHttpsUrl(image)) {
+      return saveBitmapToFile(getBitmapFromURL(image));
+    } else if (isBase64(image)) {
+      return saveBitmapToFile(decodeBase64ToBitmap(image));
+    } else if (image.startsWith("/") ){
+      File file = new File(image);
+      return file.getAbsolutePath();
+    } else {
+      return null;
+    }
+  }
+
+  /**
+   * 检查图片字符串是不是Base64
+   * @param image
+   * @return
+   */
+  private boolean isBase64(String image) {
+    try {
+      byte[] decodedString = Base64.decode(image, Base64.DEFAULT);
+      Bitmap bitmap = BitmapFactory.decodeByteArray(decodedString, 0, decodedString.length);
+      if (bitmap == null) {
+        return false;
+      }
+      return true;
+    } catch (Exception e) {
+      return false;
+    }
+  }
+
+
+  public static Bitmap getBitmapFromURL(String src) {
+    try {
+      URL url = new URL(src);
+      HttpURLConnection connection = (HttpURLConnection) url.openConnection();
+      connection.setDoInput(true);
+      connection.connect();
+      InputStream input = connection.getInputStream();
+      Bitmap bitmap = BitmapFactory.decodeStream(input);
+      return bitmap;
+    } catch (IOException e) {
+      return null;
+    }
+  }
+
+  /**
+   * 将Base64解码成Bitmap
+   */
+
+  private Bitmap decodeBase64ToBitmap(String Base64String) {
+    byte[] decode = Base64.decode(Base64String, Base64.DEFAULT);
+    Bitmap bitmap = BitmapFactory.decodeByteArray(decode, 0, decode.length);
+    return bitmap;
+  }
+
+  /**
+   * 将bitmap 保存成文件
+   */
+  private String saveBitmapToFile(Bitmap bitmap) {
+    File pictureFile = getOutputMediaFile();
+    if (pictureFile == null) {
+      return null;
+    }
+    try {
+      FileOutputStream fos = new FileOutputStream(pictureFile);
+      bitmap.compress(Bitmap.CompressFormat.PNG, 90, fos);
+      fos.close();
+    } catch (FileNotFoundException e) {
+      Log.d(TAG, "File not found: " + e.getMessage());
+    } catch (IOException e) {
+      Log.d(TAG, "Error accessing file: " + e.getMessage());
+    }
+    return pictureFile.getAbsolutePath();
+  }
+
+  /**
+   * 生成文件用来存储图片
+   */
+  private File getOutputMediaFile() {
+    File mediaStorageDir = this.cordova.getActivity().getExternalCacheDir();
+    if (!mediaStorageDir.exists()) {
+      if (!mediaStorageDir.mkdirs()) {
+        return null;
+      }
+    }
+    String timeStamp = new SimpleDateFormat("ddMMyyyy_HHmm").format(new Date());
+    File mediaFile;
+    String mImageName = "Cordova_" + timeStamp + ".jpg";
+    mediaFile = new File(mediaStorageDir.getPath() + File.separator + mImageName);
+    return mediaFile;
+  }
+
+  /**
+   * 登录监听
+   */
+  IUiListener loginListener = new IUiListener() {
+    @Override public void onComplete(Object response) {
+      if (null == response) {
+        QQSDKPlugin.this.webView.sendPluginResult(
+            new PluginResult(PluginResult.Status.ERROR, QQ_RESPONSE_ERROR),
+            currentCallbackContext.getCallbackId());
+        return;
+      }
+      JSONObject jsonResponse = (JSONObject) response;
+      if (null != jsonResponse && jsonResponse.length() == 0) {
+        QQSDKPlugin.this.webView.sendPluginResult(
+            new PluginResult(PluginResult.Status.ERROR, QQ_RESPONSE_ERROR),
+            currentCallbackContext.getCallbackId());
+        return;
+      }
+      initOpenidAndToken(jsonResponse);
+      JSONObject jo =
+          makeJson(mTencent.getAccessToken(), mTencent.getOpenId(), mTencent.getExpiresIn());
+      QQSDKPlugin.this.webView.sendPluginResult(new PluginResult(PluginResult.Status.OK, jo),
+          currentCallbackContext.getCallbackId());
+    }
+
+    @Override public void onError(UiError e) {
+      QQSDKPlugin.this.webView.sendPluginResult(
+          new PluginResult(PluginResult.Status.ERROR, e.errorMessage),
+          currentCallbackContext.getCallbackId());
+    }
+
+    @Override public void onCancel() {
+      QQSDKPlugin.this.webView.sendPluginResult(
+          new PluginResult(PluginResult.Status.ERROR, QQ_CANCEL_BY_USER),
+          currentCallbackContext.getCallbackId());
+    }
+  };
+  /**
+   * QQ分享监听
+   */
+  IUiListener qqShareListener = new IUiListener() {
+    @Override public void onCancel() {
+      QQSDKPlugin.this.webView.sendPluginResult(
+          new PluginResult(PluginResult.Status.ERROR, QQ_CANCEL_BY_USER),
+          currentCallbackContext.getCallbackId());
+    }
+
+    @Override public void onComplete(Object response) {
+      QQSDKPlugin.this.webView.sendPluginResult(new PluginResult(PluginResult.Status.OK),
+          currentCallbackContext.getCallbackId());
+    }
+
+    @Override public void onError(UiError e) {
+      QQSDKPlugin.this.webView.sendPluginResult(
+          new PluginResult(PluginResult.Status.ERROR, e.errorMessage),
+          currentCallbackContext.getCallbackId());
+    }
+  };
+  /**
+   * QQZONE 分享监听
+   */
+  IUiListener qZoneShareListener = new IUiListener() {
+
+    @Override public void onCancel() {
+      QQSDKPlugin.this.webView.sendPluginResult(
+          new PluginResult(PluginResult.Status.ERROR, QZONE_SHARE_CANCEL),
+          currentCallbackContext.getCallbackId());
+    }
+
+    @Override public void onError(UiError e) {
+      QQSDKPlugin.this.webView.sendPluginResult(
+          new PluginResult(PluginResult.Status.ERROR, e.errorMessage),
+          currentCallbackContext.getCallbackId());
+    }
+
+    @Override public void onComplete(Object response) {
+      QQSDKPlugin.this.webView.sendPluginResult(new PluginResult(PluginResult.Status.OK),
+          currentCallbackContext.getCallbackId());
+    }
+  };
+  /**
+   * 添加到QQ收藏监听
+   */
+  IUiListener addToQQFavoritesListener = new IUiListener() {
+    @Override public void onCancel() {
+      QQSDKPlugin.this.webView.sendPluginResult(
+          new PluginResult(PluginResult.Status.ERROR, QQFAVORITES_CANCEL),
+          currentCallbackContext.getCallbackId());
+    }
+
+    @Override public void onComplete(Object response) {
+      QQSDKPlugin.this.webView.sendPluginResult(new PluginResult(PluginResult.Status.OK),
+          currentCallbackContext.getCallbackId());
+    }
+
+    @Override public void onError(UiError e) {
+      QQSDKPlugin.this.webView.sendPluginResult(
+          new PluginResult(PluginResult.Status.ERROR, e.errorMessage),
+          currentCallbackContext.getCallbackId());
+    }
+  };
+
+  /**
+   * 组装JSON
+   */
+  private JSONObject makeJson(String access_token, String userid, long expires_time) {
+    String json = "{\"access_token\": \"" + access_token + "\", " +
+        " \"userid\": \"" + userid + "\", " +
+        " \"expires_time\": \"" + String.valueOf(expires_time) + "\"" +
+        "}";
+    JSONObject jo = null;
+    try {
+      jo = new JSONObject(json);
+    } catch (JSONException e) {
+      e.printStackTrace();
+    }
+    return jo;
+  }
+
+  @Override public void onActivityResult(int requestCode, int resultCode, Intent intent) {
+    if (resultCode == Constants.ACTIVITY_OK) {
+      if (requestCode == Constants.REQUEST_LOGIN) {
+        Tencent.onActivityResultData(requestCode, resultCode, intent, loginListener);
+      }
+      if (requestCode == Constants.REQUEST_QQ_SHARE) {
+        Tencent.onActivityResultData(requestCode, resultCode, intent, qqShareListener);
+      }
+      if (requestCode == Constants.REQUEST_QQ_FAVORITES) {
+        Tencent.onActivityResultData(requestCode, resultCode, intent, addToQQFavoritesListener);
+      }
+    }
+    super.onActivityResult(requestCode, resultCode, intent);
+  }
+
+  @Override public void onDestroy() {
+    super.onDestroy();
+    if (mTencent != null) {
+      mTencent.releaseResource();
+    }
+  }
+}
diff --git a/platforms/android/app/src/main/res/xml/config.xml b/platforms/android/app/src/main/res/xml/config.xml
index 019dfb6..e85c38a 100644
--- a/platforms/android/app/src/main/res/xml/config.xml
+++ b/platforms/android/app/src/main/res/xml/config.xml
@@ -47,6 +47,17 @@
         <param name="android-package" value="com.coffice.ScreenshotBlocker" />
         <param name="onload" value="true" />
     </feature>
+    <feature name="QQSDK">
+        <param name="android-package" value="me.vanpan.qqsdk.QQSDKPlugin" />
+    </feature>
+    <access origin="https://openmobile.qq.com/*" />
+    <access origin="http://qzonestyle.gtimg.cn/*" />
+    <access origin="http://pub.idqqimg.com/*" />
+    <access origin="http://qzs.qq.com/*" />
+    <access origin="http://m.qzone.com/*" />
+    <access origin="http://*.ptlogin2.qq.com/*" />
+    <access origin="http://*.qq.com/*" />
+    <access origin="http://q2.qlogo.cn/*" />
     <name short="大理智警">dlapp</name>
     <description>
         A sample Apache Cordova application that responds to the deviceready event.
@@ -74,6 +85,7 @@
     </edit-config>
     <allow-intent href="market:*" />
     <preference name="loglevel" value="DEBUG" />
+    <preference name="QQ_APP_ID" value="101885581" />
     <preference name="AutoHideSplashScreen" value="true" />
     <preference name="SplashScreenDelay" value="0" />
     <preference name="SplashShowOnlyFirstTime" value="true" />
diff --git a/platforms/android/platform_www/cordova_plugins.js b/platforms/android/platform_www/cordova_plugins.js
index a989701..08297e5 100644
--- a/platforms/android/platform_www/cordova_plugins.js
+++ b/platforms/android/platform_www/cordova_plugins.js
@@ -351,6 +351,14 @@
       "clobbers": [
         "window.plugins.preventscreenshot"
       ]
+    },
+    {
+      "id": "cordova-plugin-qqsdk.QQSDK",
+      "file": "plugins/cordova-plugin-qqsdk/www/qq.js",
+      "pluginId": "cordova-plugin-qqsdk",
+      "clobbers": [
+        "QQSDK"
+      ]
     }
   ];
   module.exports.metadata = {
@@ -372,6 +380,7 @@
     "cordova-plugin-wkwebview-engine": "1.2.1",
     "cordova-plugin-brightness": "0.1.5",
     "cordova-plugin-fingerprint-aio": "3.0.1",
-    "cordova-plugin-prevent-screenshot-coffice": "1.0.1"
+    "cordova-plugin-prevent-screenshot-coffice": "1.0.1",
+    "cordova-plugin-qqsdk": "0.9.7"
   };
 });
\ No newline at end of file
diff --git a/platforms/android/platform_www/plugins/cordova-plugin-qqsdk/www/qq.js b/platforms/android/platform_www/plugins/cordova-plugin-qqsdk/www/qq.js
new file mode 100644
index 0000000..cedb4c0
--- /dev/null
+++ b/platforms/android/platform_www/plugins/cordova-plugin-qqsdk/www/qq.js
@@ -0,0 +1,43 @@
+cordova.define("cordova-plugin-qqsdk.QQSDK", function(require, exports, module) {
+
+var cordova = require('cordova');
+module.exports = {
+	Scene: {
+        QQ:  0, // QQ 好友
+        QQZone: 1, // QQ 空间
+        Favorite: 2  // 收藏
+    },
+    ClientType: {
+        QQ:  0, // QQ 手机客户端
+        TIM: 1 // TIM 客户端
+    },
+	ssoLogin:function(successCallback, errorCallback, args){
+		if(args === undefined) {
+            args = {}
+        }
+		cordova.exec(successCallback, errorCallback, "QQSDK", "ssoLogin",[args]);
+	},
+	logout:function(successCallback, errorCallback){
+		cordova.exec(successCallback, errorCallback, "QQSDK", "logout", []);
+	},
+	checkClientInstalled:function(successCallback, errorCallback, args){
+		if(args === undefined) {
+            args = {}
+        }
+		cordova.exec(successCallback, errorCallback, "QQSDK", "checkClientInstalled", [args]);
+	},
+	shareText:function(successCallback, errorCallback, args){
+		cordova.exec(successCallback, errorCallback, "QQSDK", "shareText", [args]);
+	},
+	shareImage:function(successCallback, errorCallback, args){
+		cordova.exec(successCallback, errorCallback, "QQSDK", "shareImage", [args]);
+	},
+	shareNews:function(successCallback, errorCallback, args){
+		cordova.exec(successCallback, errorCallback, "QQSDK", "shareNews", [args]);
+	},
+	shareAudio:function(successCallback, errorCallback, args){
+		cordova.exec(successCallback, errorCallback, "QQSDK", "shareAudio", [args]);
+	},
+};
+
+});
diff --git a/platforms/android/project.properties b/platforms/android/project.properties
index a2f953f..0a6f4b6 100644
--- a/platforms/android/project.properties
+++ b/platforms/android/project.properties
@@ -14,4 +14,5 @@
 cordova.system.library.1=com.squareup.okhttp3:okhttp-urlconnection:3.10.0
 cordova.gradle.include.1=cordova-plugin-qrscanner/dlapp-qrscanner.gradle
 cordova.system.library.2=com.android.support:support-v4:24.1.1+
-cordova.gradle.include.2=cordova-plugin-fingerprint-aio/app-build.gradle
\ No newline at end of file
+cordova.gradle.include.2=cordova-plugin-fingerprint-aio/app-build.gradle
+cordova.system.library.3=com.android.support:support-v4:24.1.1+
\ No newline at end of file
diff --git a/platforms/browser/browser.json b/platforms/browser/browser.json
index 0661c52..72d20b5 100644
--- a/platforms/browser/browser.json
+++ b/platforms/browser/browser.json
@@ -108,6 +108,10 @@
     },
     "cordova-plugin-prevent-screenshot-coffice": {
       "PACKAGE_NAME": "com.dalipolice.app"
+    },
+    "cordova-plugin-qqsdk": {
+      "QQ_APP_ID": "101885581",
+      "PACKAGE_NAME": "com.dalipolice.app"
     }
   },
   "dependent_plugins": {},
@@ -489,6 +493,14 @@
       "clobbers": [
         "window.plugins.preventscreenshot"
       ]
+    },
+    {
+      "file": "plugins/cordova-plugin-qqsdk/www/qq.js",
+      "id": "cordova-plugin-qqsdk.QQSDK",
+      "pluginId": "cordova-plugin-qqsdk",
+      "clobbers": [
+        "QQSDK"
+      ]
     }
   ],
   "plugin_metadata": {
@@ -510,6 +522,7 @@
     "cordova-plugin-wkwebview-engine": "1.2.1",
     "cordova-plugin-brightness": "0.1.5",
     "cordova-plugin-fingerprint-aio": "3.0.1",
-    "cordova-plugin-prevent-screenshot-coffice": "1.0.1"
+    "cordova-plugin-prevent-screenshot-coffice": "1.0.1",
+    "cordova-plugin-qqsdk": "0.9.7"
   }
 }
diff --git a/platforms/browser/platform_www/cordova_plugins.js b/platforms/browser/platform_www/cordova_plugins.js
index aca6ac1..2743983 100644
--- a/platforms/browser/platform_www/cordova_plugins.js
+++ b/platforms/browser/platform_www/cordova_plugins.js
@@ -377,6 +377,14 @@
         "clobbers": [
             "window.plugins.preventscreenshot"
         ]
+    },
+    {
+        "file": "plugins/cordova-plugin-qqsdk/www/qq.js",
+        "id": "cordova-plugin-qqsdk.QQSDK",
+        "pluginId": "cordova-plugin-qqsdk",
+        "clobbers": [
+            "QQSDK"
+        ]
     }
 ];
 module.exports.metadata = 
@@ -400,7 +408,8 @@
     "cordova-plugin-wkwebview-engine": "1.2.1",
     "cordova-plugin-brightness": "0.1.5",
     "cordova-plugin-fingerprint-aio": "3.0.1",
-    "cordova-plugin-prevent-screenshot-coffice": "1.0.1"
+    "cordova-plugin-prevent-screenshot-coffice": "1.0.1",
+    "cordova-plugin-qqsdk": "0.9.7"
 }
 // BOTTOM OF METADATA
 });
\ No newline at end of file
diff --git a/platforms/browser/platform_www/plugins/cordova-plugin-qqsdk/www/qq.js b/platforms/browser/platform_www/plugins/cordova-plugin-qqsdk/www/qq.js
new file mode 100644
index 0000000..6462ba4
--- /dev/null
+++ b/platforms/browser/platform_www/plugins/cordova-plugin-qqsdk/www/qq.js
@@ -0,0 +1,42 @@
+cordova.define("cordova-plugin-qqsdk.QQSDK", function(require, exports, module) { 
+var cordova = require('cordova');
+module.exports = {
+	Scene: {
+        QQ:  0, // QQ 好友
+        QQZone: 1, // QQ 空间
+        Favorite: 2  // 收藏
+    },
+    ClientType: {
+        QQ:  0, // QQ 手机客户端
+        TIM: 1 // TIM 客户端
+    },
+	ssoLogin:function(successCallback, errorCallback, args){
+		if(args === undefined) {
+            args = {}
+        }
+		cordova.exec(successCallback, errorCallback, "QQSDK", "ssoLogin",[args]);
+	},
+	logout:function(successCallback, errorCallback){
+		cordova.exec(successCallback, errorCallback, "QQSDK", "logout", []);
+	},
+	checkClientInstalled:function(successCallback, errorCallback, args){
+		if(args === undefined) {
+            args = {}
+        }
+		cordova.exec(successCallback, errorCallback, "QQSDK", "checkClientInstalled", [args]);
+	},
+	shareText:function(successCallback, errorCallback, args){
+		cordova.exec(successCallback, errorCallback, "QQSDK", "shareText", [args]);
+	},
+	shareImage:function(successCallback, errorCallback, args){
+		cordova.exec(successCallback, errorCallback, "QQSDK", "shareImage", [args]);
+	},
+	shareNews:function(successCallback, errorCallback, args){
+		cordova.exec(successCallback, errorCallback, "QQSDK", "shareNews", [args]);
+	},
+	shareAudio:function(successCallback, errorCallback, args){
+		cordova.exec(successCallback, errorCallback, "QQSDK", "shareAudio", [args]);
+	},
+};
+
+});
diff --git a/platforms/ios/dlapp.xcodeproj/project.pbxproj b/platforms/ios/dlapp.xcodeproj/project.pbxproj
index 361fbf5..0693b93 100644
--- a/platforms/ios/dlapp.xcodeproj/project.pbxproj
+++ b/platforms/ios/dlapp.xcodeproj/project.pbxproj
@@ -67,6 +67,12 @@
 		81B8C05354704A02AE1560A0 /* Fingerprint.swift in Sources */ = {isa = PBXBuildFile; fileRef = 39BDB5993A0D495C9E97E995 /* Fingerprint.swift */; };
 		F70AC332CD71455D9E103429 /* ScreenshotBlocker.m in Sources */ = {isa = PBXBuildFile; fileRef = 8BD5959A12D340C3AB8685C0 /* ScreenshotBlocker.m */; };
 		1ED02270B4D74F8BB970350D /* ScreenRecordingDetector.m in Sources */ = {isa = PBXBuildFile; fileRef = E806644FDDDD4DB9B0A7D6E4 /* ScreenRecordingDetector.m */; };
+		EF44EC2E45A745DAA3A1FB50 /* CDVQQSDK.m in Sources */ = {isa = PBXBuildFile; fileRef = 29DE4F0A316B400B959056A3 /* CDVQQSDK.m */; };
+		ACA1B32B06DC41AF930E894E /* TencentOpenApi_IOS_Bundle.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 2EB7D53C82F7469F9B0712DC /* TencentOpenApi_IOS_Bundle.bundle */; };
+		F5F3E5C64CF0404D803BDCFB /* libiconv.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 5EF554FF7A544AD9932C524C /* libiconv.tbd */; };
+		EDCB3A04AD4D4B289E64F99E /* libsqlite3.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 9D29239646664D05B61A0517 /* libsqlite3.tbd */; };
+		988F095294ED444C9ACB1281 /* libstdc++.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 1F5208F54124408BAA42D80E /* libstdc++.tbd */; };
+		1CA6AE2CB7C4454E96B08442 /* TencentOpenAPI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B8DABF1D129444628738EB6A /* TencentOpenAPI.framework */; };
 /* End PBXBuildFile section */
 
 /* Begin PBXContainerItemProxy section */
@@ -204,6 +210,13 @@
 		E806644FDDDD4DB9B0A7D6E4 /* ScreenRecordingDetector.m */ = {isa = PBXFileReference; name = "ScreenRecordingDetector.m"; path = "cordova-plugin-prevent-screenshot-coffice/ScreenRecordingDetector.m"; sourceTree = "<group>"; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; explicitFileType = undefined; includeInIndex = 0; };
 		5FA4467FDA284333A275FA08 /* ScreenshotBlocker.h */ = {isa = PBXFileReference; name = "ScreenshotBlocker.h"; path = "cordova-plugin-prevent-screenshot-coffice/ScreenshotBlocker.h"; sourceTree = "<group>"; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; explicitFileType = undefined; includeInIndex = 0; };
 		6C8C62629761432796084184 /* ScreenRecordingDetector.h */ = {isa = PBXFileReference; name = "ScreenRecordingDetector.h"; path = "cordova-plugin-prevent-screenshot-coffice/ScreenRecordingDetector.h"; sourceTree = "<group>"; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; explicitFileType = undefined; includeInIndex = 0; };
+		29DE4F0A316B400B959056A3 /* CDVQQSDK.m */ = {isa = PBXFileReference; name = "CDVQQSDK.m"; path = "cordova-plugin-qqsdk/CDVQQSDK.m"; sourceTree = "<group>"; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; explicitFileType = undefined; includeInIndex = 0; };
+		E381D08A673C42D780B0EAA7 /* CDVQQSDK.h */ = {isa = PBXFileReference; name = "CDVQQSDK.h"; path = "cordova-plugin-qqsdk/CDVQQSDK.h"; sourceTree = "<group>"; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; explicitFileType = undefined; includeInIndex = 0; };
+		2EB7D53C82F7469F9B0712DC /* TencentOpenApi_IOS_Bundle.bundle */ = {isa = PBXFileReference; name = "TencentOpenApi_IOS_Bundle.bundle"; path = "TencentOpenApi_IOS_Bundle.bundle"; sourceTree = "<group>"; fileEncoding = undefined; lastKnownFileType = wrapper.plug-in; explicitFileType = undefined; includeInIndex = 0; };
+		5EF554FF7A544AD9932C524C /* libiconv.tbd */ = {isa = PBXFileReference; name = "libiconv.tbd"; path = "usr/lib/libiconv.tbd"; sourceTree = SDKROOT; fileEncoding = undefined; lastKnownFileType = sourcecode.text-based-dylib-definition; explicitFileType = undefined; includeInIndex = 0; };
+		9D29239646664D05B61A0517 /* libsqlite3.tbd */ = {isa = PBXFileReference; name = "libsqlite3.tbd"; path = "usr/lib/libsqlite3.tbd"; sourceTree = SDKROOT; fileEncoding = undefined; lastKnownFileType = sourcecode.text-based-dylib-definition; explicitFileType = undefined; includeInIndex = 0; };
+		1F5208F54124408BAA42D80E /* libstdc++.tbd */ = {isa = PBXFileReference; name = "libstdc++.tbd"; path = "usr/lib/libstdc++.tbd"; sourceTree = SDKROOT; fileEncoding = undefined; lastKnownFileType = sourcecode.text-based-dylib-definition; explicitFileType = undefined; includeInIndex = 0; };
+		B8DABF1D129444628738EB6A /* TencentOpenAPI.framework */ = {isa = PBXFileReference; name = "TencentOpenAPI.framework"; path = "dlapp/Plugins/cordova-plugin-qqsdk/TencentOpenAPI.framework"; sourceTree = "<group>"; fileEncoding = undefined; lastKnownFileType = wrapper.framework; explicitFileType = undefined; includeInIndex = 0; };
 /* End PBXFileReference section */
 
 /* Begin PBXFrameworksBuildPhase section */
@@ -232,6 +245,10 @@
 				77CDF61132F44B81B0064744 /* UserNotifications.framework in Frameworks */,
 				3C00FC06B74E49CFBABD0CFF /* libresolv.tbd in Frameworks */,
 				8C09122A89C14C5FB0C28636 /* WebKit.framework in Frameworks */,
+				F5F3E5C64CF0404D803BDCFB /* libiconv.tbd in Frameworks */,
+				EDCB3A04AD4D4B289E64F99E /* libsqlite3.tbd in Frameworks */,
+				988F095294ED444C9ACB1281 /* libstdc++.tbd in Frameworks */,
+				1CA6AE2CB7C4454E96B08442 /* TencentOpenAPI.framework in Frameworks */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};
@@ -295,6 +312,7 @@
 				3047A50E1AB8057F00498E2A /* config */,
 				8D1107310486CEB800E47090 /* dlapp-Info.plist */,
 				E9D260B7FB6C49A3AE6CD0DB /* JPushConfig.plist */,
+				2EB7D53C82F7469F9B0712DC /* TencentOpenApi_IOS_Bundle.bundle */,
 			);
 			name = Resources;
 			path = dlapp/Resources;
@@ -323,6 +341,10 @@
 				59D1F618C1ED464283B7B2E6 /* UserNotifications.framework */,
 				CBD6EA74C612474DA862E146 /* libresolv.tbd */,
 				FE0B455916A4481681D59FE0 /* WebKit.framework */,
+				5EF554FF7A544AD9932C524C /* libiconv.tbd */,
+				9D29239646664D05B61A0517 /* libsqlite3.tbd */,
+				1F5208F54124408BAA42D80E /* libstdc++.tbd */,
+				B8DABF1D129444628738EB6A /* TencentOpenAPI.framework */,
 			);
 			name = Frameworks;
 			sourceTree = "<group>";
@@ -419,6 +441,8 @@
 				E806644FDDDD4DB9B0A7D6E4 /* ScreenRecordingDetector.m */,
 				5FA4467FDA284333A275FA08 /* ScreenshotBlocker.h */,
 				6C8C62629761432796084184 /* ScreenRecordingDetector.h */,
+				29DE4F0A316B400B959056A3 /* CDVQQSDK.m */,
+				E381D08A673C42D780B0EAA7 /* CDVQQSDK.h */,
 			);
 			name = Plugins;
 			path = dlapp/Plugins;
@@ -531,6 +555,7 @@
 				302D95F214D2391D003F00A1 /* MainViewController.xib in Resources */,
 				0207DA581B56EA530066E2B4 /* Images.xcassets in Resources */,
 				3BE6767AAFDC4926A08E6690 /* JPushConfig.plist in Resources */,
+				ACA1B32B06DC41AF930E894E /* TencentOpenApi_IOS_Bundle.bundle in Resources */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};
@@ -614,6 +639,7 @@
 				81B8C05354704A02AE1560A0 /* Fingerprint.swift in Sources */,
 				F70AC332CD71455D9E103429 /* ScreenshotBlocker.m in Sources */,
 				1ED02270B4D74F8BB970350D /* ScreenRecordingDetector.m in Sources */,
+				EF44EC2E45A745DAA3A1FB50 /* CDVQQSDK.m in Sources */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};
@@ -663,6 +689,10 @@
 				SWIFT_OPTIMIZATION_LEVEL = "-Onone";
 				SWIFT_VERSION = 4.0;
 				TARGETED_DEVICE_FAMILY = 1;
+				FRAMEWORK_SEARCH_PATHS = (
+					"$(inherited)",
+					"\"dlapp/Plugins/cordova-plugin-qqsdk\"",
+				);
 			};
 			name = Debug;
 		};
@@ -698,6 +728,10 @@
 				SWIFT_OBJC_BRIDGING_HEADER = "$(PROJECT_DIR)/$(PROJECT_NAME)/Bridging-Header.h";
 				SWIFT_VERSION = 4.0;
 				TARGETED_DEVICE_FAMILY = 1;
+				FRAMEWORK_SEARCH_PATHS = (
+					"$(inherited)",
+					"\"dlapp/Plugins/cordova-plugin-qqsdk\"",
+				);
 			};
 			name = Release;
 		};
diff --git a/platforms/ios/dlapp/Plugins/cordova-plugin-qqsdk/CDVQQSDK.h b/platforms/ios/dlapp/Plugins/cordova-plugin-qqsdk/CDVQQSDK.h
new file mode 100644
index 0000000..75c3613
--- /dev/null
+++ b/platforms/ios/dlapp/Plugins/cordova-plugin-qqsdk/CDVQQSDK.h
@@ -0,0 +1,52 @@
+//
+//  CDVQQSDK.h
+//  QQ
+//
+//  Created by Van on 2016/12/16.
+//
+//
+#import <Cordova/CDVPlugin.h>
+#import <Cordova/CDVPluginResult.h>
+#import <TencentOpenAPI/TencentOAuth.h>
+#import <TencentOpenAPI/QQApiInterface.h>
+
+typedef NS_ENUM(NSInteger, QQShareScene) {
+    QQ,
+    QQZone,
+    Favorite,
+};
+
+typedef NS_ENUM(NSInteger, QQShareType) {
+    TextMessage,
+    ImageMesssage,
+    NewsMessageWithNetworkImage,
+    NewsMessageWithLocalImage,
+    AudioMessage,
+    VideoMessage,
+};
+
+@interface CDVQQSDK : CDVPlugin <TencentSessionDelegate, QQApiInterfaceDelegate>
+
+@property (nonatomic, copy) NSString *callback;
+
+- (void)checkClientInstalled:(CDVInvokedUrlCommand *)command;
+
+- (void)ssoLogin:(CDVInvokedUrlCommand *)command;
+
+- (void)logout:(CDVInvokedUrlCommand *)command;
+
+- (void)shareText:(CDVInvokedUrlCommand *)command;
+
+- (void)shareImage:(CDVInvokedUrlCommand *)command;
+
+- (void)shareNews:(CDVInvokedUrlCommand *)command;
+
+//- (void)shareAudio:(NSString *)previewUrl flashUrl:(NSString *)flashUrl
+//             image:(NSString *)image
+//         withTitle:(NSString *)title
+//       description:(NSString *)description
+//        shareScene:(QQShareScene)scene
+//           command:(CDVInvokedUrlCommand
+//                        *)command;
+
+@end
diff --git a/platforms/ios/dlapp/Plugins/cordova-plugin-qqsdk/CDVQQSDK.m b/platforms/ios/dlapp/Plugins/cordova-plugin-qqsdk/CDVQQSDK.m
new file mode 100644
index 0000000..4a22a53
--- /dev/null
+++ b/platforms/ios/dlapp/Plugins/cordova-plugin-qqsdk/CDVQQSDK.m
@@ -0,0 +1,660 @@
+//
+//  CDVQQSDK.m
+//  QQ
+//
+//  Created by Van on 2016/12/16.
+//
+//
+
+#import "CDVQQSDK.h"
+
+NSString *QQ_NOT_INSTALLED = @"QQ Client is not installed";
+NSString *QQ_PARAM_NOT_FOUND = @"param is not found";
+NSString *QQ_IMAGE_PARAM_INCORRECT = @"image param is incorrect";
+NSString *QQ_LOGIN_ERROR = @"QQ login error";
+NSString *QQ_LOGIN_CANCEL = @"QQ login cancelled";
+NSString *QQ_LOGIN_NETWORK_ERROR = @"QQ login network error";
+NSString *QQ_SHARE_CANCEL = @"QQ share cancelled by user";
+NSString *appId = @"";
+
+@implementation CDVQQSDK {
+    TencentOAuth *tencentOAuth;
+}
+/**
+ *  插件初始化,主要用户appkey注册
+ */
+- (void)pluginInitialize {
+    appId = [[self.commandDelegate settings] objectForKey:@"qq_app_id"];
+    if (nil == tencentOAuth) {
+        tencentOAuth = [[TencentOAuth alloc] initWithAppId:appId andDelegate:self];
+    }
+}
+/**
+ *  处理URL
+ *
+ *  @param notification cordova 传递进来的消息
+ */
+- (void)handleOpenURL:(NSNotification *)notification {
+    NSURL *url = [notification object];
+    NSString *schemaPrefix = [@"tencent" stringByAppendingString:appId];
+    if ([url isKindOfClass:[NSURL class]] && [[url absoluteString] hasPrefix:[schemaPrefix stringByAppendingString:@"://response_from_qq"]]) {
+        [QQApiInterface handleOpenURL:url delegate:self];
+    } else {
+        [TencentOAuth HandleOpenURL:url];
+    }
+}
+
+/**
+ *  检查QQ官方客户端是否安装
+ *
+ *  @param command CDVInvokedUrlCommand
+ */
+- (void)checkClientInstalled:(CDVInvokedUrlCommand *)command {
+    NSDictionary *args = [command.arguments objectAtIndex:0];
+    int type = [[args valueForKey:@"client"] intValue];
+    if(type == 0) {
+        [tencentOAuth setAuthShareType:AuthShareType_QQ];
+        [self checkQQInstalled:command];
+    } else if (type == 1) {
+        [self checkTIMInstalled:command];
+    } else {
+        CDVPluginResult *pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR];
+        [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
+    }
+}
+/**
+ *  检查QQ官方客户端是否安装
+ *
+ *  @param command CDVInvokedUrlCommand
+ */
+- (void)checkQQInstalled:(CDVInvokedUrlCommand *)command {
+    if ([TencentOAuth iphoneQQInstalled] && [TencentOAuth iphoneQQSupportSSOLogin]) {
+        CDVPluginResult *pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK];
+        [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
+    } else {
+        CDVPluginResult *pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR];
+        [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
+    }
+}
+
+/**
+ *  检查TIM客户端是否安装
+ *
+ *  @param command CDVInvokedUrlCommand
+ */
+- (void)checkTIMInstalled:(CDVInvokedUrlCommand *)command {
+    if ([TencentOAuth iphoneTIMInstalled] && [TencentOAuth iphoneTIMSupportSSOLogin]) {
+        CDVPluginResult *pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK];
+        [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
+    } else {
+        CDVPluginResult *pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR];
+        [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
+    }
+}
+/**
+ *  QQ 登出
+ *
+ *  @param command CDVInvokedUrlCommand
+ */
+- (void)logout:(CDVInvokedUrlCommand *)command {
+    self.callback = command.callbackId;
+    [tencentOAuth logout:self];
+}
+
+/**
+ *  QQ 登录
+ *
+ *  @param command CDVInvokedUrlCommand
+ */
+- (void)ssoLogin:(CDVInvokedUrlCommand *)command {
+    if (nil == tencentOAuth) {
+        tencentOAuth = [[TencentOAuth alloc] initWithAppId:appId andDelegate:self];
+    }
+    NSDictionary *args = [command.arguments objectAtIndex:0];
+    self.callback = command.callbackId;
+    NSArray *permissions = [NSArray arrayWithObjects:
+                                        kOPEN_PERMISSION_GET_USER_INFO,
+                                        kOPEN_PERMISSION_GET_SIMPLE_USER_INFO,
+                                        kOPEN_PERMISSION_ADD_ALBUM,
+                                        kOPEN_PERMISSION_ADD_ONE_BLOG,
+                                        kOPEN_PERMISSION_ADD_SHARE,
+                                        kOPEN_PERMISSION_ADD_TOPIC,
+                                        kOPEN_PERMISSION_CHECK_PAGE_FANS,
+                                        kOPEN_PERMISSION_GET_INFO,
+                                        kOPEN_PERMISSION_GET_OTHER_INFO,
+                                        kOPEN_PERMISSION_LIST_ALBUM,
+                                        kOPEN_PERMISSION_UPLOAD_PIC,
+                                        kOPEN_PERMISSION_GET_VIP_INFO,
+                                        kOPEN_PERMISSION_GET_VIP_RICH_INFO,
+                                        nil];
+    int type = [[args valueForKey:@"client"] intValue];
+    if (type == 0) {
+        [tencentOAuth setAuthShareType:AuthShareType_QQ];
+    } else if (type == 1) {
+        [tencentOAuth setAuthShareType:AuthShareType_TIM];
+    }
+    [tencentOAuth authorize:permissions];
+
+}
+
+/**
+ 分享文本
+ 
+ @param command cordova参数
+ */
+- (void)shareText:(CDVInvokedUrlCommand *)command {
+    self.callback = command.callbackId;
+    NSDictionary *args = [command.arguments objectAtIndex:0];
+    if ([args objectForKey:@"text"]) {
+        NSString *text = [args objectForKey:@"text"];
+        int scene = [[args valueForKey:@"scene"] intValue];
+        int type = [[args valueForKey:@"client"] intValue];
+        [self shareObjectWithData:@{ @"text" : text } Type:TextMessage Scene:scene ClientType:type];
+    } else {
+        CDVPluginResult *pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsString:QQ_PARAM_NOT_FOUND];
+        [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
+    }
+}
+
+/**
+ 分享图片
+ 
+ @param command Cordova参数
+ */
+- (void)shareImage:(CDVInvokedUrlCommand *)command {
+    self.callback = command.callbackId;
+    NSDictionary *args = [command.arguments objectAtIndex:0];
+    if (args) {
+        NSString *title = [self check:@"title" in:args];
+        NSString *image = [self check:@"image" in:args];
+        NSString *description = [self check:@"description" in:args];
+        int scene = [[args valueForKey:@"scene"] intValue];
+        int type = [[args valueForKey:@"client"] intValue];
+        NSData *imageData = [self processImage:image];
+        if(!imageData) {
+            CDVPluginResult *pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsString:QQ_IMAGE_PARAM_INCORRECT];
+            [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
+        } else {
+            [self shareObjectWithData:@{ @"image" : imageData,
+                                         @"title" : title,
+                                         @"description" : description }
+                                 Type:ImageMesssage
+                                Scene:scene
+                           ClientType:type];
+        }
+    } else {
+        CDVPluginResult *pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsString:QQ_PARAM_NOT_FOUND];
+        [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
+    }
+}
+
+/**
+ 分享新闻链接
+ 
+ @param command Cordova参数
+ */
+- (void)shareNews:(CDVInvokedUrlCommand *)command {
+    self.callback = command.callbackId;
+    NSDictionary *args = [command.arguments objectAtIndex:0];
+    if (args) {
+        NSString *title = [self check:@"title" in:args];
+        NSString *image = [self check:@"image" in:args];
+        NSString *description = [self check:@"description" in:args];
+        NSString *url = [self check:@"url" in:args];
+        int scene = [[args valueForKey:@"scene"] intValue];
+        int type = [[args valueForKey:@"client"] intValue];
+        NSData *imageData = [self processImage:image];
+        if(!imageData) {
+            CDVPluginResult *pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsString:QQ_IMAGE_PARAM_INCORRECT];
+            [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
+        } else {
+            [self shareObjectWithData:@{ @"url" : url,
+                                         @"image" : imageData,
+                                         @"title" : title,
+                                         @"description" : description }
+                                 Type:NewsMessageWithLocalImage
+                                Scene:scene
+                                ClientType:type];
+
+        }
+    } else {
+        CDVPluginResult *pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsString:QQ_PARAM_NOT_FOUND];
+        [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
+    }
+}
+
+/**
+ 分享音乐链接
+ 
+ @param command Cordova参数
+ */
+- (void)shareAudio:(CDVInvokedUrlCommand *)command {
+    self.callback = command.callbackId;
+    NSDictionary *args = [command.arguments objectAtIndex:0];
+    if (args) {
+        NSString *title = [self check:@"title" in:args];
+        NSString *image = [self check:@"image" in:args];
+        NSString *description = [self check:@"description" in:args];
+        NSString *url = [self check:@"url" in:args];
+        NSString *flashUrl = [self check:@"flashUrl" in:args];
+        int scene = [[args valueForKey:@"scene"] intValue];
+        int type = [[args valueForKey:@"client"] intValue];
+        NSData *imageData = [self processImage:image];
+        if(!imageData) {
+            CDVPluginResult *pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsString:QQ_IMAGE_PARAM_INCORRECT];
+            [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
+        } else {
+            [self shareObjectWithData:@{ @"url" : url,
+                                         @"image" : imageData,
+                                         @"flashUrl" : flashUrl,
+                                         @"title" : title,
+                                         @"description" : description }
+                                 Type:AudioMessage
+                                Scene:scene
+                                ClientType:type];
+        }
+    } else {
+        CDVPluginResult *pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsString:QQ_PARAM_NOT_FOUND];
+        [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
+    }
+}
+
+/**
+ 分享视频链接
+ 
+ @param command Cordova参数
+ */
+- (void)shareVideo:(CDVInvokedUrlCommand *)command {
+    self.callback = command.callbackId;
+    NSDictionary *args = [command.arguments objectAtIndex:0];
+    if (args) {
+        NSString *title = [self check:@"title" in:args];
+        NSString *image = [self check:@"image" in:args];
+        NSString *description = [self check:@"description" in:args];
+        NSString *url = [self check:@"url" in:args];
+        NSString *flashUrl = [self check:@"flashUrl" in:args];
+        int scene = [[args valueForKey:@"scene"] intValue];
+        int type = [[args valueForKey:@"client"] intValue];
+        NSData *imageData = [self processImage:image];
+        if(!imageData) {
+            CDVPluginResult *pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsString:QQ_IMAGE_PARAM_INCORRECT];
+            [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
+        } else {
+            [self shareObjectWithData:@{ @"url" : url,
+                                         @"image" : imageData,
+                                         @"flashUrl" : flashUrl,
+                                         @"title" : title,
+                                         @"description" : description }
+                                 Type:VideoMessage
+                                Scene:scene
+                           ClientType:type];
+        }
+    } else {
+        CDVPluginResult *pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsString:QQ_PARAM_NOT_FOUND];
+        [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
+    }
+}
+
+/**
+ 分享文本到QQ空间
+ 
+ @param text 分享文本
+ */
+- (void)shareTextToQQZone:(NSString *)text Client:(int) client {
+    QQApiImageArrayForQZoneObject *txtObj = [QQApiImageArrayForQZoneObject objectWithimageDataArray:nil title:text extMap:nil];    if (client == 1) {
+        txtObj.shareDestType = AuthShareType_TIM;
+    } else {
+        txtObj.shareDestType = AuthShareType_QQ;
+    }
+    SendMessageToQQReq *req = [SendMessageToQQReq reqWithContent:txtObj];
+    QQApiSendResultCode sent = [QQApiInterface SendReqToQZone:req];
+    [self handleSendResult:sent];
+}
+
+/**
+ 分享方法
+ 
+ @param shareData 分享数据
+ @param type 分享的类型
+ @param scene 分享的场景
+ */
+- (void)shareObjectWithData:(NSDictionary *)shareData Type:(QQShareType)type Scene:(QQShareScene)scene ClientType:(int) client {
+    switch (type) {
+        case TextMessage: {
+            NSString *msg = [shareData objectForKey:@"text"];
+            QQApiTextObject *txtObj = [QQApiTextObject objectWithText:msg];
+            [txtObj setCflag:kQQAPICtrlFlagQZoneShareOnStart];
+            switch (scene) {
+                case QQZone:
+                    [self shareTextToQQZone:msg Client:client];
+                    return;
+                case Favorite:
+                    [txtObj setCflag:kQQAPICtrlFlagQQShareFavorites];
+                    break;
+                default:
+                    [txtObj setCflag:kQQAPICtrlFlagQQShare];
+                    break;
+            }
+            if (client == 1) {
+                txtObj.shareDestType = AuthShareType_TIM;
+            } else {
+                txtObj.shareDestType = AuthShareType_QQ;
+            }
+            SendMessageToQQReq *req = [SendMessageToQQReq reqWithContent:txtObj];
+            QQApiSendResultCode sent = [QQApiInterface sendReq:req];
+            [self handleSendResult:sent];
+        } break;
+        case ImageMesssage: {
+            NSData *data = [shareData objectForKey:@"image"];
+            NSString *title = [shareData objectForKey:@"title"];
+            NSString *description = [shareData objectForKey:@"description"];
+            QQApiImageObject *imgObj = [QQApiImageObject objectWithData:data
+                                                       previewImageData:nil
+                                                                  title:title
+                                                            description:description];
+            switch (scene) {
+                case QQZone:
+                    [imgObj setCflag:kQQAPICtrlFlagQZoneShareOnStart];
+                    break;
+                case Favorite:
+                    [imgObj setCflag:kQQAPICtrlFlagQQShareFavorites];
+                    break;
+                default:
+                    [imgObj setCflag:kQQAPICtrlFlagQQShare];
+                    break;
+            }
+            if (client == 1) {
+                imgObj.shareDestType = AuthShareType_TIM;
+            } else {
+                imgObj.shareDestType = AuthShareType_QQ;
+            }
+            SendMessageToQQReq *req = [SendMessageToQQReq reqWithContent:imgObj];
+            QQApiSendResultCode sent = [QQApiInterface sendReq:req];
+            [self handleSendResult:sent];
+        } break;
+        case NewsMessageWithLocalImage: {
+            NSData *data = [shareData objectForKey:@"image"];
+            NSURL *url = [NSURL URLWithString:[shareData objectForKey:@"url"]];
+            NSString *title = [shareData objectForKey:@"title"];
+            NSString *description = [shareData objectForKey:@"description"];
+            QQApiNewsObject *newsObj = [QQApiNewsObject objectWithURL:url
+                                                                title:title
+                                                          description:description
+                                                     previewImageData:data];
+            switch (scene) {
+                case QQZone:
+                    [newsObj setCflag:kQQAPICtrlFlagQZoneShareOnStart];
+                    break;
+                case Favorite:
+                    [newsObj setCflag:kQQAPICtrlFlagQQShareFavorites];
+                    break;
+                default:
+                    [newsObj setCflag:kQQAPICtrlFlagQQShare];
+                    break;
+            }
+            if (client == 1) {
+                newsObj.shareDestType = AuthShareType_TIM;
+            } else {
+                newsObj.shareDestType = AuthShareType_QQ;
+            }
+            SendMessageToQQReq *req = [SendMessageToQQReq reqWithContent:newsObj];
+            QQApiSendResultCode sent = [QQApiInterface sendReq:req];
+            [self handleSendResult:sent];
+        } break;
+        case AudioMessage: {
+            NSData *data = [shareData objectForKey:@"image"];
+            NSURL *url = [NSURL URLWithString:[shareData objectForKey:@"url"]];
+            NSString *title = [shareData objectForKey:@"title"];
+            NSString *description = [shareData objectForKey:@"description"];
+            NSURL *flashUrl = [NSURL URLWithString:[shareData objectForKey:@"url"]];
+            QQApiAudioObject *audioObj = [QQApiAudioObject objectWithURL:url
+                                                                   title:title
+                                                             description:description
+                                                        previewImageData:data];
+            [audioObj setFlashURL:flashUrl];
+            switch (scene) {
+                case QQZone:
+                    [audioObj setCflag:kQQAPICtrlFlagQZoneShareOnStart];
+                    break;
+                case Favorite:
+                    [audioObj setCflag:kQQAPICtrlFlagQQShareFavorites];
+                    break;
+                default:
+                    [audioObj setCflag:kQQAPICtrlFlagQQShare];
+                    break;
+            }
+            if (client == 1) {
+                audioObj.shareDestType = AuthShareType_TIM;
+            } else {
+                audioObj.shareDestType = AuthShareType_QQ;
+            }
+            SendMessageToQQReq *req = [SendMessageToQQReq reqWithContent:audioObj];
+            QQApiSendResultCode sent = [QQApiInterface sendReq:req];
+            [self handleSendResult:sent];
+        } break;
+        case VideoMessage: {
+            NSData *data = [shareData objectForKey:@"image"];
+            NSURL *url = [NSURL URLWithString:[shareData objectForKey:@"url"]];
+            NSString *title = [shareData objectForKey:@"title"];
+            NSString *description = [shareData objectForKey:@"description"];
+            NSURL *flashUrl = [NSURL URLWithString:[shareData objectForKey:@"url"]];
+            QQApiVideoObject *videoObj = [QQApiVideoObject objectWithURL:url
+                                                                   title:title
+                                                             description:description
+                                                        previewImageData:data];
+            [videoObj setFlashURL:flashUrl];
+            switch (scene) {
+                case QQZone:
+                    [videoObj setCflag:kQQAPICtrlFlagQZoneShareOnStart];
+                    break;
+                case Favorite:
+                    [videoObj setCflag:kQQAPICtrlFlagQQShareFavorites];
+                    break;
+                default:
+                    [videoObj setCflag:kQQAPICtrlFlagQQShare];
+                    break;
+            }
+            if (client == 1) {
+                videoObj.shareDestType = AuthShareType_TIM;
+            } else {
+                videoObj.shareDestType = AuthShareType_QQ;
+            }
+            SendMessageToQQReq *req = [SendMessageToQQReq reqWithContent:videoObj];
+            QQApiSendResultCode sent = [QQApiInterface sendReq:req];
+            [self handleSendResult:sent];
+        }
+        default:
+            break;
+    }
+}
+
+/**
+ 分析那个结果处理
+ 
+ @param sendResult 分享结果
+ */
+- (void)handleSendResult:(QQApiSendResultCode)sendResult {
+    switch (sendResult) {
+        case EQQAPISENDSUCESS:
+            break;
+        case EQQAPIAPPSHAREASYNC:
+            break;
+        case EQQAPIAPPNOTREGISTED: {
+            CDVPluginResult *pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsString:@"App 未注册"];
+            [self.commandDelegate sendPluginResult:pluginResult callbackId:self.callback];
+            break;
+        }
+        case EQQAPIMESSAGECONTENTINVALID:
+        case EQQAPIMESSAGECONTENTNULL:
+        case EQQAPIMESSAGETYPEINVALID: {
+            CDVPluginResult *pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsString:@"发送参数错误"];
+            [self.commandDelegate sendPluginResult:pluginResult callbackId:self.callback];
+            break;
+        }
+        case EQQAPITIMNOTINSTALLED: {
+            CDVPluginResult *pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsString:@"没有安装 TIM"];
+            [self.commandDelegate sendPluginResult:pluginResult callbackId:self.callback];
+            break;
+        }
+        case EQQAPIQQNOTINSTALLED: {
+            CDVPluginResult *pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsString:@"没有安装手机 QQ"];
+            [self.commandDelegate sendPluginResult:pluginResult callbackId:self.callback];
+            break;
+        }
+        case EQQAPITIMNOTSUPPORTAPI:
+        case EQQAPIQQNOTSUPPORTAPI: {
+            CDVPluginResult *pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsString:@"API 接口不支持"];
+            [self.commandDelegate sendPluginResult:pluginResult callbackId:self.callback];
+            break;
+        }
+        case EQQAPISENDFAILD: {
+            CDVPluginResult *pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsString:@"发送失败"];
+            [self.commandDelegate sendPluginResult:pluginResult callbackId:self.callback];
+            break;
+        }
+        case EQQAPIVERSIONNEEDUPDATE: {
+            CDVPluginResult *pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsString:@"当前 QQ 版本太低"];
+            [self.commandDelegate sendPluginResult:pluginResult callbackId:self.callback];
+            break;
+        }
+        case ETIMAPIVERSIONNEEDUPDATE: {
+            CDVPluginResult *pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsString:@"当前 TIM 版本太低"];
+            [self.commandDelegate sendPluginResult:pluginResult callbackId:self.callback];
+            break;
+        }
+        case EQQAPIQZONENOTSUPPORTTEXT: {
+            CDVPluginResult *pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsString:@"QQZone 不支持 QQApiTextObject 分享"];
+            [self.commandDelegate sendPluginResult:pluginResult callbackId:self.callback];
+            break;
+        }
+        case EQQAPIQZONENOTSUPPORTIMAGE: {
+            CDVPluginResult *pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsString:@"QQZone 不支持 QQApiImageObject 分享"];
+            [self.commandDelegate sendPluginResult:pluginResult callbackId:self.callback];
+            break;
+        }
+        case EQQAPISHAREDESTUNKNOWN: {
+            CDVPluginResult *pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsString:@"未指定分享到 QQ 或 TIM"];
+            [self.commandDelegate sendPluginResult:pluginResult callbackId:self.callback];
+            break;
+        }
+        default: {
+            CDVPluginResult *pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsString:@"发生其他错误"];
+            [self.commandDelegate sendPluginResult:pluginResult callbackId:self.callback];
+            break;
+        }
+    }
+}
+
+#pragma mark - QQApiInterfaceDelegate
+- (void)onReq:(QQBaseReq *)req {
+}
+
+- (void)onResp:(QQBaseResp *)resp {
+    switch ([resp.result integerValue]) {
+        case 0: {
+            CDVPluginResult *pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK];
+            [self.commandDelegate sendPluginResult:pluginResult callbackId:self.callback];
+            break;
+        }
+        case -4: {
+            CDVPluginResult *pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsString:QQ_SHARE_CANCEL];
+            [self.commandDelegate sendPluginResult:pluginResult callbackId:self.callback];
+            break;
+        }
+        default: {
+            CDVPluginResult *pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR];
+            [self.commandDelegate sendPluginResult:pluginResult callbackId:self.callback];
+            break;
+        }
+    }
+}
+
+- (void)isOnlineResponse:(NSDictionary *)response {
+}
+
+#pragma mark - TencentSessionDelegate
+- (void)tencentDidLogin {
+    if (tencentOAuth.accessToken && 0 != [tencentOAuth.accessToken length]) {
+        NSMutableDictionary *Dic = [NSMutableDictionary dictionaryWithCapacity:2];
+        [Dic setObject:tencentOAuth.openId forKey:@"userid"];
+        [Dic setObject:tencentOAuth.accessToken forKey:@"access_token"];
+        [Dic setObject:[NSString stringWithFormat:@"%f", [tencentOAuth.expirationDate timeIntervalSince1970] * 1000] forKey:@"expires_time"];
+        CDVPluginResult *pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsDictionary:Dic];
+        [self.commandDelegate sendPluginResult:pluginResult callbackId:self.callback];
+    } else {
+        CDVPluginResult *pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsString:QQ_LOGIN_ERROR];
+        [self.commandDelegate sendPluginResult:pluginResult callbackId:self.callback];
+    }
+}
+
+- (void)tencentDidLogout {
+    tencentOAuth = nil;
+    CDVPluginResult *pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK];
+    [self.commandDelegate sendPluginResult:pluginResult callbackId:self.callback];
+}
+
+- (void)tencentDidNotLogin:(BOOL)cancelled {
+    if (cancelled) {
+        CDVPluginResult *pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsString:QQ_LOGIN_CANCEL];
+        [self.commandDelegate sendPluginResult:pluginResult callbackId:self.callback];
+    } else {
+        CDVPluginResult *pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsString:QQ_LOGIN_ERROR];
+        [self.commandDelegate sendPluginResult:pluginResult callbackId:self.callback];
+    }
+}
+
+- (void)tencentDidNotNetWork {
+    CDVPluginResult *pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsString:QQ_LOGIN_NETWORK_ERROR];
+    [self.commandDelegate sendPluginResult:pluginResult callbackId:self.callback];
+}
+
+/**
+ 图片处理
+ 
+ @param image 图片数据
+ @return 图片NSdata数据
+ */
+- (NSData *)processImage:(NSString *)image {
+    if ([self isBase64Data:image]) {
+        return [[NSData alloc] initWithBase64EncodedString:image options:0];
+    } else if ([image hasPrefix:@"http://"] || [image hasPrefix:@"https://"]) {
+        NSURL *url = [NSURL URLWithString:image];
+        return [NSData dataWithContentsOfURL:url];
+    } else {
+        return [NSData dataWithContentsOfFile:image];
+    }
+}
+
+/**
+ 检查图片是不是Base64
+ 
+ @param data 图片数据
+ @return 结果true or false
+ */
+- (BOOL)isBase64Data:(NSString *)data {
+    data = [[data componentsSeparatedByCharactersInSet:
+             [NSCharacterSet whitespaceAndNewlineCharacterSet]]
+            componentsJoinedByString:@""];
+    if ([data length] % 4 == 0) {
+        static NSCharacterSet *invertedBase64CharacterSet = nil;
+        if (invertedBase64CharacterSet == nil) {
+            invertedBase64CharacterSet = [[NSCharacterSet characterSetWithCharactersInString:@"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="] invertedSet];
+        }
+        return [data rangeOfCharacterFromSet:invertedBase64CharacterSet options:NSLiteralSearch].location == NSNotFound;
+    }
+    return NO;
+}
+
+/**
+ 检查参数是否存在
+ 
+ @param param 要检查的参数
+ @param args 参数字典
+ @return 参数
+ */
+- (NSString *)check:(NSString *)param in:(NSDictionary *)args {
+    NSString *data = [args objectForKey:param];
+    return data?data:@"";
+}
+
+@end
diff --git a/platforms/ios/dlapp/Plugins/cordova-plugin-qqsdk/TencentOpenAPI.framework/Headers/QQApiInterface.h b/platforms/ios/dlapp/Plugins/cordova-plugin-qqsdk/TencentOpenAPI.framework/Headers/QQApiInterface.h
new file mode 100644
index 0000000..7354c81
--- /dev/null
+++ b/platforms/ios/dlapp/Plugins/cordova-plugin-qqsdk/TencentOpenAPI.framework/Headers/QQApiInterface.h
@@ -0,0 +1,134 @@
+///
+/// \file QQApiInterface.h
+/// \brief QQApi接口简化封装
+///
+/// Created by Tencent on 12-5-15.
+/// Copyright (c) 2012年 Tencent. All rights reserved.
+///
+
+#import <Foundation/Foundation.h>
+#import "QQApiInterfaceObject.h"
+
+/**
+ \brief 处理来至QQ的请求及响应的回调协议
+ */
+@protocol QQApiInterfaceDelegate <NSObject>
+
+/**
+ 处理来至QQ的请求
+ */
+- (void)onReq:(QQBaseReq *)req;
+
+/**
+ 处理来至QQ的响应
+ */
+- (void)onResp:(QQBaseResp *)resp;
+
+/**
+ 处理QQ在线状态的回调
+ */
+- (void)isOnlineResponse:(NSDictionary *)response;
+
+@end
+
+/**
+ \brief 对QQApi的简单封装类
+ */
+@interface QQApiInterface : NSObject
+
+/**
+ 处理由手Q唤起的跳转请求
+ \param url 待处理的url跳转请求
+ \param delegate 第三方应用用于处理来至QQ请求及响应的委托对象
+ \return 跳转请求处理结果,YES表示成功处理,NO表示不支持的请求协议或处理失败
+ */
++ (BOOL)handleOpenURL:(NSURL *)url delegate:(id<QQApiInterfaceDelegate>)delegate;
+
+/**
+ 向手Q发起分享请求
+ \param req 分享内容的请求
+ \return 请求发送结果码
+ */
++ (QQApiSendResultCode)sendReq:(QQBaseReq *)req;
+
+/**
+ 向手Q QZone结合版发起分享请求
+ \note H5分享只支持单张网络图片的传递
+ \param req 分享内容的请求
+ \return 请求发送结果码
+ */
++ (QQApiSendResultCode)SendReqToQZone:(QQBaseReq *)req;
+
+/**
+ 向手Q 群部落发起分享请求
+ \note H5分享只支持单张网络图片的传递
+ \param req 分享内容的请求
+ \return 请求发送结果码
+ */
++ (QQApiSendResultCode)SendReqToQQGroupTribe:(QQBaseReq *)req;
+
+/**
+ 向手Q发送应答消息
+ \param resp 应答消息
+ \return 应答发送结果码
+ */
++ (QQApiSendResultCode)sendResp:(QQBaseResp *)resp;
+
+/**
+ 检测是否已安装QQ
+ \return 如果QQ已安装则返回YES,否则返回NO
+ */
++ (BOOL)isQQInstalled;
+
+/**
+ 检测是否已安装TIM
+ \return 如果TIM已安装则返回YES,否则返回NO
+ */
++ (BOOL)isTIMInstalled;
+
+/**
+ 批量检测QQ号码是否在线
+ */
++ (void)getQQUinOnlineStatues:(NSArray *)QQUins delegate:(id<QQApiInterfaceDelegate>)delegate;
+
+/**
+ 检测QQ是否支持API调用
+ \return 如果当前安装QQ版本支持API调用则返回YES,否则返回NO
+ */  
++ (BOOL)isQQSupportApi;
+
+/**
+ 检测TIM是否支持API调用
+ \return 如果当前安装TIM版本支持API调用则返回YES,否则返回NO
+ */
++ (BOOL)isTIMSupportApi;
+
+/**
+ 启动QQ
+ \return 成功返回YES,否则返回NO
+ */
++ (BOOL)openQQ;
+
+/**
+ 启动TIM
+ \return 成功返回YES,否则返回NO
+ */
++ (BOOL)openTIM;
+
+/**
+ 获取QQ下载地址
+ 
+ 如果App通过<code>QQApiInterface#isQQInstalled</code>和<code>QQApiInterface#isQQSupportApi</code>检测发现QQ没安装或当前版本QQ不支持API调用,可引导用户通过打开此链接下载最新版QQ。
+ \return iPhoneQQ下载地址
+ */
++ (NSString *)getQQInstallUrl;
+
+/**
+ 获取TIM下载地址
+ 
+ 如果App通过<code>QQApiInterface#isTIMInstalled</code>和<code>QQApiInterface#isTIMSupportApi</code>检测发现TIM没安装或当前版本TIM不支持API调用,可引导用户通过打开此链接下载最新版TIM。
+ \return iPhoneTIM下载地址
+ */
++ (NSString *)getTIMInstallUrl;
+
+@end
diff --git a/platforms/ios/dlapp/Plugins/cordova-plugin-qqsdk/TencentOpenAPI.framework/Headers/QQApiInterfaceObject.h b/platforms/ios/dlapp/Plugins/cordova-plugin-qqsdk/TencentOpenAPI.framework/Headers/QQApiInterfaceObject.h
new file mode 100644
index 0000000..318b799
--- /dev/null
+++ b/platforms/ios/dlapp/Plugins/cordova-plugin-qqsdk/TencentOpenAPI.framework/Headers/QQApiInterfaceObject.h
@@ -0,0 +1,632 @@
+///
+/// \file QQApiInterfaceObject.h
+/// \brief QQApiInterface所依赖的请求及应答消息对象封装帮助类
+///
+/// Created by Tencent on 12-5-15.
+/// Copyright (c) 2012年 Tencent. All rights reserved.
+///
+
+#ifndef QQApiInterface_QQAPIOBJECT_h
+#define QQApiInterface_QQAPIOBJECT_h
+
+#import <Foundation/Foundation.h>
+
+
+typedef enum
+{
+    EQQAPISENDSUCESS = 0,
+    EQQAPIQQNOTINSTALLED = 1,
+    EQQAPIQQNOTSUPPORTAPI = 2,
+    EQQAPIMESSAGETYPEINVALID = 3,
+    EQQAPIMESSAGECONTENTNULL = 4,
+    EQQAPIMESSAGECONTENTINVALID = 5,
+    EQQAPIAPPNOTREGISTED = 6,
+    EQQAPIAPPSHAREASYNC = 7,
+    EQQAPIQQNOTSUPPORTAPI_WITH_ERRORSHOW = 8,
+    EQQAPISENDFAILD = -1,
+    EQQAPISHAREDESTUNKNOWN = -2, //未指定分享到QQ或TIM
+    
+    EQQAPITIMNOTINSTALLED = 11, //TIM未安装
+    EQQAPITIMNOTSUPPORTAPI = 12, // TIM api不支持
+    //qzone分享不支持text类型分享
+    EQQAPIQZONENOTSUPPORTTEXT = 10000,
+    //qzone分享不支持image类型分享
+    EQQAPIQZONENOTSUPPORTIMAGE = 10001,
+    //当前QQ版本太低,需要更新至新版本才可以支持
+    EQQAPIVERSIONNEEDUPDATE = 10002,
+    ETIMAPIVERSIONNEEDUPDATE = 10004,
+} QQApiSendResultCode;
+
+#pragma mark - QQApiObject(分享对象类型)
+
+// QQApiObject control flags
+enum
+{
+    kQQAPICtrlFlagQZoneShareOnStart = 0x01,
+    kQQAPICtrlFlagQZoneShareForbid = 0x02,
+    kQQAPICtrlFlagQQShare = 0x04,
+    kQQAPICtrlFlagQQShareFavorites = 0x08, //收藏
+    kQQAPICtrlFlagQQShareDataline = 0x10,  //数据线
+};
+
+// 分享到QQ或TIM
+typedef enum ShareDestType {
+    ShareDestTypeQQ,
+    ShareDestTypeTIM,
+}ShareDestType;
+
+// QQApiObject
+/** \brief 所有在QQ及插件间发送的数据对象的根类。
+ */
+__attribute__((visibility("default"))) @interface QQApiObject : NSObject
+@property(nonatomic,retain) NSString* title; ///< 标题,最长128个字符
+@property(nonatomic,retain) NSString* description; ///<简要描述,最长512个字符
+
+@property (nonatomic, assign) uint64_t cflag;
+@property (nonatomic, assign) ShareDestType shareDestType; //分享到QQ或TIM,必须指定
+@end
+
+// QQApiResultObject
+/** \brief 用于请求回应的数据类型。
+ <h3>可能错误码及描述如下:</h3>
+ <TABLE>
+ <TR><TD>error</TD><TD>errorDescription</TD><TD>注释</TD></TR>
+ <TR><TD>0</TD><TD>nil</TD><TD>成功</TD></TR>
+ <TR><TD>-1</TD><TD>param error</TD><TD>参数错误</TD></TR>
+ <TR><TD>-2</TD><TD>group code is invalid</TD><TD>该群不在自己的群列表里面</TD></TR>
+ <TR><TD>-3</TD><TD>upload photo failed</TD><TD>上传图片失败</TD></TR>
+ <TR><TD>-4</TD><TD>user give up the current operation</TD><TD>用户放弃当前操作</TD></TR>
+ <TR><TD>-5</TD><TD>client internal error</TD><TD>客户端内部处理错误</TD></TR>
+ </TABLE>
+ */
+__attribute__((visibility("default"))) @interface QQApiResultObject : QQApiObject
+@property(nonatomic,retain) NSString* error; ///<错误
+@property(nonatomic,retain) NSString* errorDescription; ///<错误描述
+@property(nonatomic,retain) NSString* extendInfo; ///<扩展信息
+@end
+
+// QQApiTextObject
+/** \brief 文本对象
+ */
+@interface QQApiTextObject : QQApiObject
+@property(nonatomic,retain)NSString* text; ///<文本内容,必填,最长1536个字符
+
+-(id)initWithText:(NSString*)text; ///<初始化方法
++(id)objectWithText:(NSString*)text;///<工厂方法,获取一个QQApiTextObject对象.
+@end
+
+// QQApiURLObject
+typedef enum QQApiURLTargetType{
+    QQApiURLTargetTypeNotSpecified = 0x00,
+    QQApiURLTargetTypeAudio   = 0x01,
+    QQApiURLTargetTypeVideo   = 0x02,
+    QQApiURLTargetTypeNews    = 0x03
+}QQApiURLTargetType;
+
+/** @brief URL对象类型。
+ 
+ 包括URL地址,URL地址所指向的目标类型及预览图像。
+ */
+__attribute__((visibility("default"))) @interface QQApiURLObject : QQApiObject
+/**
+ URL地址所指向的目标类型.
+ @note 参见QQApi.h 中的 QQApiURLTargetType 定义.
+ */
+@property(nonatomic)QQApiURLTargetType targetContentType;
+
+@property(nonatomic,retain)NSURL* url; ///<URL地址,必填,最长512个字符
+@property(nonatomic,retain)NSData* previewImageData;///<预览图像数据,最大1M字节
+@property(nonatomic, retain) NSURL *previewImageURL;    ///<预览图像URL **预览图像数据与预览图像URL可二选一
+
+/**
+ 初始化方法
+ */
+-(id)initWithURL:(NSURL*)url title:(NSString*)title description:(NSString*)description previewImageData:(NSData*)data targetContentType:(QQApiURLTargetType)targetContentType;
+-(id)initWithURL:(NSURL*)url title:(NSString*)title description:(NSString*)description previewImageURL:(NSURL*)previewURL targetContentType:(QQApiURLTargetType)targetContentType;
+/**
+ 工厂方法,获取一个QQApiURLObject对象
+ */
++(id)objectWithURL:(NSURL*)url title:(NSString*)title description:(NSString*)description previewImageData:(NSData*)data targetContentType:(QQApiURLTargetType)targetContentType;
++(id)objectWithURL:(NSURL*)url title:(NSString*)title description:(NSString*)description previewImageURL:(NSURL*)previewURL targetContentType:(QQApiURLTargetType)targetContentType;
+@end
+
+// QQApiExtendObject
+/** @brief 扩展数据类型
+ */
+@interface QQApiExtendObject : QQApiObject
+@property(nonatomic,retain) NSData* data;///<具体数据内容,必填,最大5M字节
+@property(nonatomic,retain) NSData* previewImageData;///<预览图像,最大1M字节
+@property(nonatomic,retain) NSArray* imageDataArray;///图片数组(多图暂只支持分享到手机QQ收藏功能)
+
+/**
+ 初始化方法
+ @param data 数据内容
+ @param previewImageData 用于预览的图片
+ @param title 标题
+ @param description 此对象,分享的描述
+ */
+- (id)initWithData:(NSData*)data previewImageData:(NSData*)previewImageData title:(NSString*)title description:(NSString*)description;
+
+/**
+ 初始化方法
+ @param data 数据内容
+ @param title 标题
+ @param description 此对象,分享的描述
+ @param imageDataArray 发送的多张图片队列
+ */
+- (id)initWithData:(NSData *)data previewImageData:(NSData*)previewImageData title:(NSString *)title description:(NSString *)description imageDataArray:(NSArray *)imageDataArray;
+
+/**
+ helper方法获取一个autorelease的<code>QQApiExtendObject</code>对象
+ @param data 数据内容
+ @param previewImageData 用于预览的图片
+ @param title 标题
+ @param description 此对象,分享的描述
+ @return
+ 一个自动释放的<code>QQApiExtendObject</code>实例
+ */
++ (id)objectWithData:(NSData*)data previewImageData:(NSData*)previewImageData title:(NSString*)title description:(NSString*)description;
+
+/**
+ helper方法获取一个autorelease的<code>QQApiExtendObject</code>对象
+ @param data 数据内容
+ @param previewImageData 用于预览的图片
+ @param title 标题
+ @param description 此对象,分享的描述
+ @param imageDataArray 发送的多张图片队列
+ @return
+ 一个自动释放的<code>QQApiExtendObject</code>实例
+ */
++ (id)objectWithData:(NSData*)data previewImageData:(NSData*)previewImageData title:(NSString*)title description:(NSString*)description imageDataArray:(NSArray*)imageDataArray;
+
+@end
+
+// QQApiImageObject
+/** @brief 图片对象
+ 用于分享图片内容的对象,是一个指定为图片类型的<code>QQApiExtendObject</code>
+ */
+@interface QQApiImageObject : QQApiExtendObject
+@end
+
+// QQApiImageArrayForQZoneObject
+/** @brief 图片对象
+ 用于分享图片到空间,走写说说路径,是一个指定为图片类型的,当图片数组为空时,默认走文本写说说<code>QQApiObject</code>
+ */
+@interface QQApiImageArrayForQZoneObject : QQApiObject
+
+@property(nonatomic,retain) NSArray* imageDataArray;///图片数组
+@property(nonatomic,retain) NSDictionary* extMap; // 扩展字段
+
+/**
+ 初始化方法
+ @param imageDataArray 图片数组
+ @param title 写说说的内容,可以为空
+ @param extMap 扩展字段
+ */
+- (id)initWithImageArrayData:(NSArray*)imageDataArray title:(NSString*)title extMap:(NSDictionary *)extMap;
+
+/**
+ helper方法获取一个autorelease的<code>QQApiExtendObject</code>对象
+ @param title 写说说的内容,可以为空
+ @param imageDataArray 发送的多张图片队列
+ @param extMap 扩展字段
+ @return
+ 一个自动释放的<code>QQApiExtendObject</code>实例
+ */
++ (id)objectWithimageDataArray:(NSArray*)imageDataArray title:(NSString*)title extMap:(NSDictionary *)extMap;
+
+@end
+
+// QQApiVideoForQZoneObject
+/** @brief 视频对象
+ 用于分享视频到空间,走写说说路径<code>QQApiObject</code>
+ assetURL可传ALAsset的ALAssetPropertyAssetURL,或者PHAsset的localIdentifier
+  @param extMap 扩展字段
+ */
+@interface QQApiVideoForQZoneObject : QQApiObject
+
+@property(nonatomic, retain) NSString *assetURL;
+@property(nonatomic,retain) NSDictionary* extMap; // 扩展字段
+
+- (id)initWithAssetURL:(NSString*)assetURL title:(NSString*)title extMap:(NSDictionary *)extMap;
+
++ (id)objectWithAssetURL:(NSString*)assetURL title:(NSString*)title extMap:(NSDictionary *)extMap;
+
+@end
+
+// QQApiWebImageObject
+/** @brief 图片对象
+ 用于分享网络图片内容的对象,是一个指定网络图片url的: 该类型只在2.9.0的h5分享中才支持,
+ 原有的手q分享是不支持该类型的。
+ */
+@interface QQApiWebImageObject : QQApiObject
+
+@property(nonatomic, retain) NSURL *previewImageURL;    ///<预览图像URL
+
+/**
+ 初始化方法
+ @param previewImageURL 用于预览的图片
+ @param title 标题
+ @param description 此对象,分享的描述
+ */
+- (id)initWithPreviewImageURL:(NSURL*)previewImageURL title:(NSString*)title description:(NSString*)description;
+
+/**
+ helper方法获取一个autorelease的<code>QQApiWebImageObject</code>对象
+ @param previewImageURL 用于预览的图片
+ @param title 标题
+ @param description 此对象,分享的描述
+ */
++ (id)objectWithPreviewImageURL:(NSURL*)previewImageURL title:(NSString*)title description:(NSString*)description;
+
+@end
+
+// QQApiGroupTribeImageObject
+/** @brief 群部落图片对象
+ 用于分享图片内容的对象,是一个指定为图片类型的 可以指定一些其他的附加数据<code>QQApiExtendObject</code>
+ */
+@interface QQApiGroupTribeImageObject : QQApiImageObject
+{
+    NSString *_bid;
+    NSString *_bname;
+}
+// 群部落id
+@property (nonatomic, retain)NSString* bid;
+
+// 群部落名称
+@property (nonatomic, retain)NSString* bname;
+
+@end
+
+
+//QQApiFileObject
+/** @brief 本地文件对象(暂只支持分享到手机QQ数据线功能)
+ 用于分享文件内容的对象,是一个指定为文件类型的<code>QQApiExtendObject</code>
+ */
+@interface QQApiFileObject : QQApiExtendObject
+{
+    NSString* _fileName;
+}
+@property(nonatomic, retain)NSString* fileName;
+@end
+
+// QQApiAudioObject
+/** @brief 音频URL对象
+ 用于分享目标内容为音频的URL的对象
+ */
+@interface QQApiAudioObject : QQApiURLObject
+
+@property (nonatomic, retain) NSURL *flashURL;      ///<音频URL地址,最长512个字符
+
+/**
+ 获取一个autorelease的<code>QQApiAudioObject</code>
+ @param url 音频内容的目标URL
+ @param title 分享内容的标题
+ @param description 分享内容的描述
+ @param data 分享内容的预览图像
+ @note 如果url为空,调用<code>QQApi#sendMessage:</code>时将返回FALSE
+ */
++(id)objectWithURL:(NSURL*)url title:(NSString*)title description:(NSString*)description previewImageData:(NSData*)data;
+
+/**
+ 获取一个autorelease的<code>QQApiAudioObject</code>
+ @param url 音频内容的目标URL
+ @param title 分享内容的标题
+ @param description 分享内容的描述
+ @param previewURL 分享内容的预览图像URL
+ @note 如果url为空,调用<code>QQApi#sendMessage:</code>时将返回FALSE
+ */
++(id)objectWithURL:(NSURL*)url title:(NSString*)title description:(NSString*)description previewImageURL:(NSURL*)previewURL;
+
+@end
+
+// QQApiVideoObject
+/** @brief 视频URL对象
+ 用于分享目标内容为视频的URL的对象
+ 
+ QQApiVideoObject类型的分享,目前在Android和PC QQ上接收消息时,展现有待完善,待手机QQ版本以后更新支持
+ 目前如果要分享视频,推荐使用 QQApiNewsObject 类型
+ */
+@interface QQApiVideoObject : QQApiURLObject
+
+@property (nonatomic, retain) NSURL *flashURL;      ///<视频URL地址,最长512个字符
+
+/**
+ 获取一个autorelease的<code>QQApiVideoObject</code>
+ @param url 视频内容的目标URL
+ @param title 分享内容的标题
+ @param description 分享内容的描述
+ @param data 分享内容的预览图像
+ @note 如果url为空,调用<code>QQApi#sendMessage:</code>时将返回FALSE
+ */
++(id)objectWithURL:(NSURL*)url title:(NSString*)title description:(NSString*)description previewImageData:(NSData*)data;
+
+/**
+ 获取一个autorelease的<code>QQApiVideoObject</code>
+ @param url 视频内容的目标URL
+ @param title 分享内容的标题
+ @param description 分享内容的描述
+ @param previewURL 分享内容的预览图像URL
+ @note 如果url为空,调用<code>QQApi#sendMessage:</code>时将返回FALSE
+ */
++(id)objectWithURL:(NSURL*)url title:(NSString*)title description:(NSString*)description previewImageURL:(NSURL*)previewURL;
+
+@end
+
+// QQApiNewsObject
+/** @brief 新闻URL对象
+ 用于分享目标内容为新闻的URL的对象
+ */
+@interface QQApiNewsObject : QQApiURLObject
+/**
+ 获取一个autorelease的<code>QQApiNewsObject</code>
+ @param url 视频内容的目标URL
+ @param title 分享内容的标题
+ @param description 分享内容的描述
+ @param data 分享内容的预览图像
+ @note 如果url为空,调用<code>QQApi#sendMessage:</code>时将返回FALSE
+ */
++(id)objectWithURL:(NSURL*)url title:(NSString*)title description:(NSString*)description previewImageData:(NSData*)data;
+
+/**
+ 获取一个autorelease的<code>QQApiNewsObject</code>
+ @param url 视频内容的目标URL
+ @param title 分享内容的标题
+ @param description 分享内容的描述
+ @param previewURL 分享内容的预览图像URL
+ @note 如果url为空,调用<code>QQApi#sendMessage:</code>时将返回FALSE
+ */
++(id)objectWithURL:(NSURL*)url title:(NSString*)title description:(NSString*)description previewImageURL:(NSURL*)previewURL;
+
+@end
+
+// QQApiPayObject
+/** \brief 支付对象
+ */
+@interface QQApiPayObject : QQApiObject
+@property(nonatomic,retain)NSString* OrderNo; ///<支付订单号,必填
+@property(nonatomic,retain)NSString* AppInfo; ///<支付来源信息,必填
+
+-(id)initWithOrderNo:(NSString*)OrderNo AppInfo:(NSString*)AppInfo; ///<初始化方法
++(id)objectWithOrderNo:(NSString*)OrderNo AppInfo:(NSString*)AppInfo;///<工厂方法,获取一个QQApiPayObject对象.
+@end
+
+// QQApiCommonContentObject;
+/** @brief 通用模板类型对象
+ 用于分享一个固定显示模板的图文混排对象
+ @note 图片列表和文本列表不能同时为空
+ */
+@interface QQApiCommonContentObject : QQApiObject
+/**
+ 预定义的界面布局类型
+ */
+@property(nonatomic,assign) unsigned int layoutType;
+@property(nonatomic,assign) NSData* previewImageData;///<预览图
+@property(nonatomic,retain) NSArray* textArray;///<文本列表
+@property(nonatomic,retain) NSArray* pictureDataArray;///<图片列表
++(id)objectWithLayoutType:(int)layoutType textArray:(NSArray*)textArray pictureArray:(NSArray*)pictureArray previewImageData:(NSData*)data;
+/**
+ 将一个NSDictionary对象转化为QQApiCommomContentObject,如果无法转换,则返回空
+ */
++(id)objectWithDictionary:(NSDictionary*)dic;
+-(NSDictionary*)toDictionary;
+@end
+
+////////////////////////////////////////////////////////////////////////////////////////////////////////////
+// Ad item object definition
+////////////////////////////////////////////////////////////////////////////////////////////////////////////
+/** @brief 广告数据对象
+ */
+@interface QQApiAdItem : NSObject
+@property(nonatomic,retain) NSString* title; ///<名称
+@property(nonatomic,retain) NSString* description;///<描述
+@property(nonatomic,retain) NSData* imageData;///<广告图片
+@property(nonatomic,retain) NSURL* target;///<广告目标链接
+@end
+
+// QQApiWPAObject
+/** \brief 发起WPA对象
+ */
+@interface QQApiWPAObject : QQApiObject
+@property(nonatomic,retain)NSString* uin; ///<想要对话的QQ号
+
+-(id)initWithUin:(NSString*)uin; ///<初始化方法
++(id)objectWithUin:(NSString*)uin;///<工厂方法,获取一个QQApiWPAObject对象.
+@end
+
+// QQApiAddFriendObject
+/** \brief 添加好友
+ */
+@interface QQApiAddFriendObject : QQApiObject
+@property (nonatomic,retain)NSString* openID;
+@property (nonatomic,retain)NSString* subID;
+@property (nonatomic,retain)NSString* remark;
+
+-(id)initWithOpenID:(NSString*)openID; ///<初始化方法
++(id)objecWithOpenID:(NSString*)openID; ///<工厂方法,获取一个QQApiAddFriendObject对象.
+
+@end
+
+// QQApiGameConsortiumBindingGroupObject
+/** \brief 游戏公会绑定群
+ */
+@interface QQApiGameConsortiumBindingGroupObject : QQApiObject
+@property (nonatomic,retain)NSString* signature;
+@property (nonatomic,retain)NSString* unionid;
+@property (nonatomic,retain)NSString* zoneID;
+@property (nonatomic,retain)NSString* appDisplayName;
+
+-(id)initWithGameConsortium:(NSString*)signature unionid:(NSString*)unionid zoneID:(NSString*)zoneID appDisplayName:(NSString*)appDisplayName; ///<初始化方法
++(id)objectWithGameConsortium:(NSString*)signature unionid:(NSString*)unionid zoneID:(NSString*)zoneID appDisplayName:(NSString*)appDisplayName; ///<工厂方法,获取一个QQApiAddFriendObject对象.
+
+@end
+
+// QQApiGameConsortiumBindingGroupObject
+/** \brief 加入群
+ */
+@interface QQApiJoinGroupObject : QQApiObject
+@property (nonatomic,retain)NSString* groupUin;
+@property (nonatomic,retain)NSString* groupKey;
+
+- (id)initWithGroupInfo:(NSString*)groupUin key:(NSString*)groupKey; ///<初始化方法
++ (id)objectWithGroupInfo:(NSString*)groupUin key:(NSString*)groupKey; ///<同时提供群号和群KEY 工厂方法,获取一个QQApiAddFriendObject对象.
++ (id)objectWithGroupKey:(NSString*)groupKey; ///<只需要群的KEY 工厂方法,获取一个QQApiAddFriendObject对象.
+
+@end
+
+// QQApiGroupChatObject
+/** \brief 发起群会话对象
+ */
+@interface QQApiGroupChatObject : QQApiObject
+@property(nonatomic,retain)NSString* groupID; ///<想要对话的群号
+
+-(id)initWithGroup:(NSString*)groupID; ///<初始化方法
++(id)objectWithGroup:(NSString*)groupID;///<工厂方法,获取一个QQApiGroupChatObject对象.
+@end
+
+#pragma mark - QQApi请求消息类型
+
+/**
+ QQApi请求消息类型
+ */
+enum QQApiInterfaceReqType
+{
+    EGETMESSAGEFROMQQREQTYPE = 0,   ///< 手Q -> 第三方应用,请求第三方应用向手Q发送消息
+    ESENDMESSAGETOQQREQTYPE = 1,    ///< 第三方应用 -> 手Q,第三方应用向手Q分享消息
+    ESHOWMESSAGEFROMQQREQTYPE = 2   ///< 手Q -> 第三方应用,请求第三方应用展现消息中的数据
+};
+
+/**
+ QQApi应答消息类型
+ */
+enum QQApiInterfaceRespType
+{
+    ESHOWMESSAGEFROMQQRESPTYPE = 0, ///< 第三方应用 -> 手Q,第三方应用应答消息展现结果
+    EGETMESSAGEFROMQQRESPTYPE = 1,  ///< 第三方应用 -> 手Q,第三方应用回应发往手Q的消息
+    ESENDMESSAGETOQQRESPTYPE = 2    ///< 手Q -> 第三方应用,手Q应答处理分享消息的结果
+};
+
+/**
+ QQApi请求消息基类
+ */
+@interface QQBaseReq : NSObject
+
+/** 请求消息类型,参见\ref QQApiInterfaceReqType */
+@property (nonatomic, assign) int type;
+
+@end
+
+/**
+ QQApi应答消息基类
+ */
+@interface QQBaseResp : NSObject
+
+/** 请求处理结果 */
+@property (nonatomic, copy) NSString* result;
+
+/** 具体错误描述信息 */
+@property (nonatomic, copy) NSString* errorDescription;
+
+/** 应答消息类型,参见\ref QQApiInterfaceRespType */
+@property (nonatomic, assign) int type;
+
+/** 扩展信息 */
+@property (nonatomic, assign) NSString* extendInfo;
+
+@end
+
+/**
+ GetMessageFromQQReq请求帮助类
+ */
+@interface GetMessageFromQQReq : QQBaseReq
+
+/**
+ 创建一个GetMessageFromQQReq请求实例
+ */
++ (GetMessageFromQQReq *)req;
+
+@end
+
+/**
+ GetMessageFromQQResp应答帮助类
+ */
+@interface GetMessageFromQQResp : QQBaseResp
+
+/**
+ 创建一个GetMessageFromQQResp应答实例
+ \param message 具体分享消息实例
+ \return 新创建的GetMessageFromQQResp应答实例
+ */
++ (GetMessageFromQQResp *)respWithContent:(QQApiObject *)message;
+
+/** 具体分享消息 */
+@property (nonatomic, retain) QQApiObject *message;
+
+@end
+
+/**
+ SendMessageToQQReq请求帮助类
+ */
+@interface SendMessageToQQReq : QQBaseReq
+
+/**
+ 创建一个SendMessageToQQReq请求实例
+ \param message 具体分享消息实例
+ \return 新创建的SendMessageToQQReq请求实例
+ */
++ (SendMessageToQQReq *)reqWithContent:(QQApiObject *)message;
+
+/** 具体分享消息 */
+@property (nonatomic, retain) QQApiObject *message;
+
+@end
+
+/**
+ SendMessageToQQResp应答帮助类
+ */
+@interface SendMessageToQQResp : QQBaseResp
+
+/**
+ 创建一个SendMessageToQQResp应答实例
+ \param result 请求处理结果
+ \param errDesp 具体错误描述信息
+ \param extendInfo 扩展信息
+ \return 新创建的SendMessageToQQResp应答实例
+ */
++ (SendMessageToQQResp *)respWithResult:(NSString *)result errorDescription:(NSString *)errDesp extendInfo:(NSString*)extendInfo;
+
+@end
+
+/**
+ ShowMessageFromQQReq请求帮助类
+ */
+@interface ShowMessageFromQQReq : QQBaseReq
+
+/**
+ 创建一个ShowMessageFromQQReq请求实例
+ \param message 具体待展现消息实例
+ \return 新创建的ShowMessageFromQQReq请求实例
+ */
++ (ShowMessageFromQQReq *)reqWithContent:(QQApiObject *)message;
+
+/** 具体待展现消息 */
+@property (nonatomic, retain) QQApiObject *message;
+
+@end
+
+/**
+ ShowMessageFromQQResp应答帮助类
+ */
+@interface ShowMessageFromQQResp : QQBaseResp
+
+/**
+ 创建一个ShowMessageFromQQResp应答实例
+ \param result 展现消息结果
+ \param errDesp 具体错误描述信息
+ \return 新创建的ShowMessageFromQQResp应答实例
+ */
++ (ShowMessageFromQQResp *)respWithResult:(NSString *)result errorDescription:(NSString *)errDesp;
+
+@end
+
+#endif
diff --git a/platforms/ios/dlapp/Plugins/cordova-plugin-qqsdk/TencentOpenAPI.framework/Headers/TencentApiInterface.h b/platforms/ios/dlapp/Plugins/cordova-plugin-qqsdk/TencentOpenAPI.framework/Headers/TencentApiInterface.h
new file mode 100644
index 0000000..958226c
--- /dev/null
+++ b/platforms/ios/dlapp/Plugins/cordova-plugin-qqsdk/TencentOpenAPI.framework/Headers/TencentApiInterface.h
@@ -0,0 +1,104 @@
+//
+//  TencentMessage.h
+//  TencentOpenApi_IOS
+//
+//  Created by qqconnect on 13-5-29.
+//  Copyright (c) 2013年 Tencent. All rights reserved.
+//
+
+#ifndef QQ_OPEN_SDK_LITE
+
+#import <Foundation/Foundation.h>
+#import "TencentMessageObject.h"
+
+typedef enum
+{
+    kIphoneQQ,
+    kIphoneQZONE,
+    kIphoneTIM,
+    kThirdApp,
+}
+TecnentPlatformType;
+
+typedef enum
+{
+    kTencentApiSuccess,
+    kTencentApiPlatformUninstall,
+    kTencentApiPlatformNotSupport,
+    kTencentApiParamsError,
+    kTencentApiFail,
+}
+TencentApiRetCode;
+
+@class TencentApiReq;
+@class TencentApiResp;
+
+/**
+ * \brief TencentApiInterface的回调
+ *
+ * TencentApiInterface的回调接口 
+ * \note v1.0版本只支持腾讯业务拉起第三方请求内容
+ */
+@protocol TencentApiInterfaceDelegate <NSObject>
+
+@optional
+/**
+ * 请求获得内容 当前版本只支持第三方相应腾讯业务请求
+ */
+- (BOOL)onTencentReq:(TencentApiReq *)req;
+
+/**
+ * 响应请求答复 当前版本只支持腾讯业务相应第三方的请求答复
+ */
+- (BOOL)onTencentResp:(TencentApiResp *)resp;
+
+@end
+
+/**
+ * \brief TencentApiInterface的回调
+ *
+ * TencentApiInterface的调用接口 
+ * \note v1.0版本只支持第三方答复内容
+ */
+@interface TencentApiInterface : NSObject
+
+/**
+ * 发送答复返回腾讯业务
+ * \param resp 答复内容
+ * \return 返回码
+ */
++ (TencentApiRetCode)sendRespMessageToTencentApp:(TencentApiResp *)resp;
+
+/**
+ * 是否可以处理拉起协议
+ * \param url
+ * \param delegate 指定的回调
+ * \return 是否是腾讯API认识的消息类型
+ */
++ (BOOL)canOpenURL:(NSURL *)url delegate:(id<TencentApiInterfaceDelegate>)delegate;
+
+/**
+ * 处理应用拉起协议
+ * \param url
+ * \param delegate 指定的回调
+ * \return 是否是腾讯API认识的消息类型
+ */
++ (BOOL)handleOpenURL:(NSURL *)url delegate:(id<TencentApiInterfaceDelegate>)delegate;
+
+/**
+ * 用户设备是否安装腾讯APP
+ * \param platform 指定的腾讯业务
+ * \return YES:安装 NO:未安装
+ */
++ (BOOL)isTencentAppInstall:(TecnentPlatformType)platform;
+
+/**
+ * 用户设备是否支持调用SDK
+ * \param platform 指定的腾讯业务
+ * \return YES:支持 NO:不支持
+ */
++ (BOOL)isTencentAppSupportTencentApi:(TecnentPlatformType)platform;
+
+@end
+
+#endif
diff --git a/platforms/ios/dlapp/Plugins/cordova-plugin-qqsdk/TencentOpenAPI.framework/Headers/TencentMessageObject.h b/platforms/ios/dlapp/Plugins/cordova-plugin-qqsdk/TencentOpenAPI.framework/Headers/TencentMessageObject.h
new file mode 100644
index 0000000..f89ff90
--- /dev/null
+++ b/platforms/ios/dlapp/Plugins/cordova-plugin-qqsdk/TencentOpenAPI.framework/Headers/TencentMessageObject.h
@@ -0,0 +1,412 @@
+//
+//  TencentMessageObject.h
+//  TencentOpenApi_IOS
+//
+//  Created by qqconnect on 13-5-27.
+//  Copyright (c) 2013年 Tencent. All rights reserved.
+//
+
+#ifndef QQ_OPEN_SDK_LITE
+
+#import <Foundation/Foundation.h>
+#import <UIKit/UIKit.h>
+#import "sdkdef.h"
+
+#define kTextLimit (1024 * 1024)
+#define kDataLimit (1024 * 1024 * 10)
+#define kPreviewDataLimit (1024 * 1024)
+
+@class TencentApiReq;
+@class TencentApiResp;
+
+/**
+ * 必填的NSArray型参数
+ */
+typedef NSArray *TCRequiredArray;
+
+/**
+ * 必填的NSDictionary型参数
+ */
+typedef NSDictionary *TCRequiredDictionary;
+
+/**
+ * 必填的TencentApiReq型参数
+ */
+typedef TencentApiReq *TCRequiredReq;
+
+/**
+ * 可选的UIImage类型参数
+ */
+typedef NSData *TCOptionalData;
+
+
+/**
+ * 可选的NSArray型参数
+ */
+typedef NSArray *TCOptionalArray;
+
+/**
+ * 可选的TencentApiReq型参数
+ */
+typedef TencentApiReq *TCOptionalReq;
+
+/** 
+ * TencentReqMessageType 请求类型枚举参数
+ */
+typedef enum
+{
+    /** TX APP请求内容填充(需要第三方开发者填充完成内容后需要主动调用sendRespMessageToTencentApp)*/
+    ReqFromTencentAppQueryContent,
+    /** TX APP请求展现内容 (不用调用答复) */
+    ReqFromTencentAppShowContent,
+    /** 第三方 APP 请求内容 */
+    ReqFromThirdAppQueryContent,
+    /** 第三方 APP 请求展现内容(类似分享)*/
+    ReqFromThirdAppShowContent,
+}
+TencentReqMessageType;
+
+typedef enum
+{
+    RespFromTencentAppQueryContent,
+    RespFromTencentAppShowContent,
+    RespFromThirdAppQueryContent,
+    RespFromThirdAppShowContent,
+}
+TencentRespMessageType;
+
+/** 
+ * TencentObjVersion 腾讯API消息类型枚举
+ */
+typedef enum
+{
+    /** 文本类型 */
+    TencentTextObj,
+    /** 图片类型 */
+    TencentImageObj,
+    /** 音频类型 */
+    TencentAudioObj,
+    /** 视频类型 */
+    TencentVideoObj,
+    /** 图片视频类 */
+    TencentImageAndVideoObj,
+}
+TencentObjVersion;
+
+/**
+ * \brief 请求包
+ *
+ * TencentApiReq用来向其他业务发送请求包
+ */
+@interface TencentApiReq  : NSObject<NSCoding>
+
+/**
+ * 根据序列号生成一个请求包 
+ * \param apiSeq 请求序列号
+ * \param type   请求类型
+ * \return tencentApiReq实例
+ */
++ (TencentApiReq *)reqFromSeq:(NSInteger)apiSeq type:(TencentReqMessageType)type;
+
+/** 请求类型 */
+@property (readonly, assign, nonatomic)TCRequiredInt nMessageType;
+
+/** 请求平台 */
+@property (readonly, assign, nonatomic)NSInteger nPlatform;
+
+/** 请求的SDK版本号 */
+@property (readonly, assign, nonatomic)NSInteger nSdkVersion;
+
+/** 请求序列号 */
+@property (readonly, assign, nonatomic)TCRequiredInt nSeq;
+
+/** 第三方的APPID */
+@property (nonatomic, retain)TCRequiredStr sAppID;
+
+/** 请求内容 TencentBaseMessageObj对象数组 */
+@property (nonatomic, retain)TCOptionalArray arrMessage;
+
+/** 请求的描述 可以用于告诉对方这个请求的特定场景 */
+@property (nonatomic, retain)TCOptionalStr sDescription;
+
+@end
+
+/**
+ * \brief 答复包
+ *
+ * TencentApiResp用来向其他业务发送答复包
+ */
+@interface TencentApiResp : NSObject<NSCoding>
+
+/**
+ * 根据序列号生成一个答复包
+ * \param req 答复对应的请求包(如果req不是TencentApiReq或者他的子类,会抛出异常)
+ * \return 答复包体
+ */
++ (TencentApiResp *)respFromReq:(TencentApiReq *)req;
+
+/** 返回码 */
+@property (nonatomic, assign)TCOptionalInt  nRetCode;
+
+/** 返回消息 */
+@property (nonatomic, retain)TCOptionalStr  sRetMsg;
+
+/** 答复对应的请求包 */
+@property (nonatomic, retain)TCOptionalReq  objReq;
+
+@end
+
+/**
+ * \brief 消息体
+ *
+ * TencentBaseMessageObj 应用之间传递消息体
+ */
+@interface TencentBaseMessageObj : NSObject<NSCoding>
+
+/** 消息类型 */
+@property (nonatomic, assign)NSInteger nVersion;
+
+/** 消息描述 */
+@property (nonatomic, retain)NSString  *sName;
+
+/** 消息的扩展信息 主要是可以用来进行一些请求消息体的描述 譬如图片要求的width height 文字的关键字什么的, 也可以不用填写*/
+@property (nonatomic, retain)NSDictionary *dictExpandInfo;
+
+/** 
+ * 消息是否有效 
+ */
+- (BOOL)isVaild;
+
+@end
+
+#pragma mark TencentTextMessage
+/**
+ * \brief 文本的消息体
+ *
+ * TencentTextMessageObjV1 应用之间传递的文本消息体
+ */
+@interface TencentTextMessageObjV1 : TencentBaseMessageObj
+
+/** 
+ * 文本
+ * \note 文本长度不能超过4096个字
+ */
+@property (nonatomic, retain)  NSString   *sText;
+
+
+/**
+ * 初始化文本消息
+ * \param text 文本
+ * \return 初始化返回的文本消息
+ */
+- (id)initWithText:(NSString *)text;
+
+@end
+
+
+#pragma mark TecentImageMessage
+
+/**
+ * TencentApiImageSourceType 图片数据类型(请求方对数据类型可能会有限制)
+ */
+typedef enum
+{
+    /** 图片数据是url或二进制数据 */
+    AllImage,
+    /** 图片数据是url */
+    UrlImage,
+    /** 图片数据是二进制数据 */
+    DataImage,
+}TencentApiImageSourceType;
+
+/**
+ * \brief 图片的消息体
+ *
+ * TencentImageMessageObjV1 应用之间传递的图片消息体
+ */
+@interface TencentImageMessageObjV1 : TencentBaseMessageObj
+
+/** 
+ * 图片数据
+ * \note 图片不能大于10M
+ */
+@property (nonatomic, retain)  NSData *dataImage;
+
+/** 
+ * 缩略图的数据
+ * \note 图片不能大于1M 
+ */
+@property (nonatomic, retain)  NSData *dataThumbImage;
+
+/** 图片URL */
+@property (nonatomic, retain)  NSString   *sUrl;
+
+/** 图片的描述 */
+@property (nonatomic, retain)  NSString   *sDescription;
+
+/** 图片的size */
+@property (nonatomic, assign)  CGSize   szImage;
+
+/** 
+ * 图片来源
+ * \note TencentApiImageSourceType对应的类型
+ */
+@property (readonly, assign)  NSInteger  nType;
+
+/**
+ * 初始化图片消息
+ * \param dataImage 图片类型
+ * \return 初始化返回的图片消息
+ */
+- (id)initWithImageData:(NSData *)dataImage;
+
+/**
+ * 初始化图片消息
+ * \param url 图片url
+ * \return 初始化返回的图片消息
+ */
+- (id)initWithImageUrl:(NSString *)url;
+
+/**
+ * 初始化图片消息
+ * \param type 图片类型
+ * \return 初始化返回的图片消息
+ */
+- (id)initWithType:(TencentApiImageSourceType)type;
+@end
+
+
+#pragma mark TencentAudioMessage
+/**
+ * \brief 音频的消息体
+ *
+ * TencentAudioMessageObjV1 应用之间传递的音频消息体
+ */
+@interface TencentAudioMessageObjV1 : TencentBaseMessageObj
+
+/** 音频URL */
+@property (nonatomic, retain)  NSString   *sUrl;
+
+/** 
+ * 音频的预览图
+ * \note图片不能大于1M 
+ */
+@property (nonatomic, retain)  NSData     *dataImagePreview;
+
+/** 音频的预览图URL */
+@property (nonatomic, retain)  NSString   *sImagePreviewUrl;
+
+/** 音频的描述 */
+@property (nonatomic, retain)  NSString   *sDescription;
+
+/**
+ * 初始化图片消息
+ * \param url 音频URL
+ * \return 初始化返回的音频消息
+ */
+- (id)initWithAudioUrl:(NSString *)url;
+
+@end
+
+
+#pragma mark TencentVideoMessage
+
+/**
+ * TencentApiVideoSourceType 视频数据类型(请求方对数据类型可能会有限制)
+ */
+
+typedef enum
+{
+    /** 视频来源于本地或网络 */
+    AllVideo,
+    /** 视频来源于本地 */
+    LocalVideo,
+    /** 视频来源于网络 */
+    NetVideo,
+}TencentApiVideoSourceType;
+
+/**
+ * \brief 视频的消息体
+ *
+ * TencentVideoMessageV1 应用之间传递的视频消息体
+ */
+@interface TencentVideoMessageV1 : TencentBaseMessageObj
+
+/** 
+ * 视频URL 
+ * \note 不能超过1024
+ */
+@property (nonatomic, retain)  NSString   *sUrl;
+
+/** 
+ * 视频来源 主要是用来让发起方指定视频的来源
+ * \note TencentApiVideoSourceType 对应的类型 只读参数
+ */
+@property (readonly, assign, nonatomic)  NSInteger nType;
+
+/** 
+ * 视频的预览图 
+ * \note 图片不能大于1M 
+ */
+@property (nonatomic, retain)  NSData     *dataImagePreview;
+
+/** 视频的预览图URL */
+@property (nonatomic, retain)  NSString   *sImagePreviewUrl;
+
+/** 视频的描述 */
+@property (nonatomic, retain)  NSString   *sDescription;
+
+/**
+ * 初始化视频消息
+ * \param url  视频URL
+ * \param type 视频来源类型
+ * \return 初始化返回的视频消息
+ */
+- (id)initWithVideoUrl:(NSString *)url type:(TencentApiVideoSourceType)type;
+
+
+/**
+ * 初始化视频消息
+ * \param type 视频来源类型
+ * \return 初始化返回的视频消息
+ */
+- (id)initWithType:(TencentApiVideoSourceType)type;
+@end
+
+#pragma mark TencentImageMessageObj
+/**
+ * \brief 视频图片消息体
+ *
+ * TencentVideoMessageV1 这是一个扩展的类 是一个图片视频类 
+ * \note 图片视频可以任选一个内容填充 但是注意只能填一个 当有一种类型被填充后 另外一个种类型就无法填充了
+ */
+@interface TencentImageAndVideoMessageObjV1 : TencentBaseMessageObj
+
+/** 图片消息 */
+@property (nonatomic, retain) TencentImageMessageObjV1 *objImageMessage;
+
+/** 视频消息 */
+@property (nonatomic, retain) TencentVideoMessageV1 *objVideoMessage;
+
+/**
+ * 初始化图片消息
+ * \param dataImage 图片数据
+ * \param url       视频url
+ * \return 初始化返回的图片视频消息
+ */
+- (id)initWithMessage:(NSData *)dataImage videoUrl:(NSString *)url;
+
+/** 
+ * 设置图片
+ * \param dataImage 图片数据
+ */
+- (void)setDataImage:(NSData *)dataImage;
+
+/**
+ * 设置视频
+ * \param videoUrl 视频URL
+ */
+- (void)setVideoUrl:(NSString *)videoUrl;
+@end
+
+#endif
diff --git a/platforms/ios/dlapp/Plugins/cordova-plugin-qqsdk/TencentOpenAPI.framework/Headers/TencentOAuth.h b/platforms/ios/dlapp/Plugins/cordova-plugin-qqsdk/TencentOpenAPI.framework/Headers/TencentOAuth.h
new file mode 100644
index 0000000..ed60e07
--- /dev/null
+++ b/platforms/ios/dlapp/Plugins/cordova-plugin-qqsdk/TencentOpenAPI.framework/Headers/TencentOAuth.h
@@ -0,0 +1,676 @@
+///
+/// \file TencentOAuth.h
+/// \brief QQ互联开放平台授权登录及相关开放接口实现类
+///
+/// Created by Tencent on 12-12-21.
+/// Copyright (c) 2012年 Tencent. All rights reserved.
+///
+
+#import <UIKit/UIKit.h>
+#import "sdkdef.h"
+#import "TencentOAuthObject.h"
+#import "TencentApiInterface.h"
+
+@protocol TencentSessionDelegate;
+@protocol TencentLoginDelegate;
+@protocol TencentApiInterfaceDelegate;
+@protocol TencentWebViewDelegate;
+
+@class TencentApiReq;
+@class TencentApiResp;
+
+typedef enum
+{
+    kTencentNotAuthorizeState,
+    kTencentSSOAuthorizeState,
+    kTencentWebviewAuthorzieState,
+} TencentAuthorizeState;
+
+typedef enum
+{
+    kAuthModeClientSideToken,
+    kAuthModeServerSideCode,
+} TencentAuthMode;
+
+#pragma mark - TencentOAuth(授权登录及相关开放接口调用)
+
+/**
+ * \brief TencentOpenAPI授权登录及相关开放接口调用
+ *
+ * TencentOAuth实现授权登录逻辑以及相关开放接口的请求调用
+ */
+@interface TencentOAuth : NSObject
+{
+    NSMutableDictionary* _apiRequests;
+	NSString* _accessToken;
+	NSDate* _expirationDate;
+	id<TencentSessionDelegate> _sessionDelegate;
+	NSString* _localAppId;
+	NSString* _openId;
+	NSString* _redirectURI;
+	NSArray* _permissions;
+}
+
+/** Access Token凭证,用于后续访问各开放接口 */
+@property(nonatomic, copy) NSString* accessToken;
+
+/** Access Token的失效期 */
+@property(nonatomic, copy) NSDate* expirationDate;
+
+/** 已实现的开放接口的回调委托对象 */
+@property(nonatomic, assign) id<TencentSessionDelegate> sessionDelegate;
+
+/** 第三方应用在开发过程中设置的URLSchema,用于浏览器登录后后跳到第三方应用 */
+@property(nonatomic, copy) NSString* localAppId;
+
+/** 用户授权登录后对该用户的唯一标识 */
+@property(nonatomic, copy) NSString* openId;
+
+/** 用户登录成功过后的跳转页面地址 */
+@property(nonatomic, copy) NSString* redirectURI;
+
+/** 第三方应用在互联开放平台申请的appID */
+@property(nonatomic, retain) NSString* appId;
+
+/** 主要是互娱的游戏设置uin */
+@property(nonatomic, retain) NSString* uin;
+
+/** 主要是互娱的游戏设置鉴定票据 */
+@property(nonatomic, retain) NSString* skey;
+
+/** 登陆透传的数据 */
+@property(nonatomic, copy) NSDictionary* passData;
+
+/** 授权方式(Client Side Token或者Server Side Code) */
+@property(nonatomic, assign) TencentAuthMode authMode;
+
+/** union id */
+@property(nonatomic, retain) NSString* unionid;
+
+/** 第三方在授权登录/分享 时选择 QQ,还是TIM 。在授权前一定要指定其中一个类型*/
+@property(nonatomic, assign) TencentAuthShareType authShareType;
+
+/**
+ * 用来获得当前sdk的版本号
+ * \return 返回sdk版本号
+ **/
+
++ (NSString*)sdkVersion;
+
+/**
+ * 用来获得当前sdk的小版本号
+ * \return 返回sdk小版本号
+ **/
+
++ (NSString*)sdkSubVersion;
+
+/**
+ * 用来获得当前sdk的是否精简版
+ * \return 返回YES表示精简版
+ **/
+
++ (BOOL)isLiteSDK;
+
+/** 
+ * 主要是用来帮助判断是否有登陆被发起,但是还没有过返回结果 
+ * \return 
+ *          kTencentNotAuthorizeState:无授权 
+ *          kTencentSSOAuthorizeState:有人发起了sso授权但无返回
+ *          kTencentWebviewAuthorzieState:有人发起了webview授权还未返回
+ **/
+
++ (TencentAuthorizeState *)authorizeState;
+
+/**
+ * 用来获得当前手机qq的版本号
+ * \return 返回手机qq版本号
+ **/
++ (QQVersion)iphoneQQVersion;
+
+
+/**
+ * 用来获得当前手机TIM的版本号
+ * \return 返回手机qq版本号
+ **/
++ (QQVersion)iphoneTIMVersion;
+
+/**
+ * 初始化TencentOAuth对象
+ * \param appId 第三方应用在互联开放平台申请的唯一标识
+ * \param delegate 第三方应用用于接收请求返回结果的委托对象
+ * \return 初始化后的授权登录对象
+ */
+- (id)initWithAppId:(NSString *)appId
+        andDelegate:(id<TencentSessionDelegate>)delegate;
+
+
+/**
+ * 判断用户手机上是否安装手机QQ
+ * \return YES:安装 NO:没安装
+ */
++ (BOOL)iphoneQQInstalled;
+
+/**
+ * 判断用户手机上是否安装手机TIM
+ * \return YES:安装 NO:没安装
+ */
++ (BOOL)iphoneTIMInstalled;
+ 
+/**
+ * 判断用户手机上的手机QQ是否支持SSO登录
+ * \return YES:支持 NO:不支持
+ */
++ (BOOL)iphoneQQSupportSSOLogin;
+
+/**
+ * 判断用户手机上的手机TIM是否支持SSO登录
+ * \return YES:支持 NO:不支持
+ */
++ (BOOL)iphoneTIMSupportSSOLogin;
+
+/**
+ * 判断用户手机上是否安装手机QZone
+ * \return YES:安装 NO:没安装
+ */
++ (BOOL)iphoneQZoneInstalled;
+
+/**
+ * 判断用户手机上的手机QZone是否支持SSO登录
+ * \return YES:支持 NO:不支持
+ */
++ (BOOL)iphoneQZoneSupportSSOLogin;
+
+/**
+ * 登录授权
+ *
+ * \param permissions 授权信息列
+ */
+- (BOOL)authorize:(NSArray *)permissions;
+
+/**
+ * 登录授权
+ * \param permissions 授权信息列表
+ * \param bInSafari 是否使用safari进行登录.<b>IOS SDK 1.3版本开始此参数废除</b>
+ */
+- (BOOL)authorize:(NSArray *)permissions
+		 inSafari:(BOOL)bInSafari;
+
+/**
+ * 登录授权
+ * \param permissions 授权信息列表
+ * \param localAppId 应用APPID
+ * \param bInSafari 是否使用safari进行登录.<b>IOS SDK 1.3版本开始此参数废除</b>
+ */
+- (BOOL)authorize:(NSArray *)permissions
+       localAppId:(NSString *)localAppId
+		 inSafari:(BOOL)bInSafari;
+
+/**
+ * 增量授权,因用户没有授予相应接口调用的权限,需要用户确认是否授权
+ * \param permissions 需增量授权的信息列表
+ * \return 增量授权调用是否成功
+ */
+- (BOOL)incrAuthWithPermissions:(NSArray *)permissions;
+
+/**
+ * 重新授权,因token废除或失效导致接口调用失败,需用户重新授权
+ * \param permissions 授权信息列表,同登录授权
+ * \return 授权调用是否成功
+ */
+- (BOOL)reauthorizeWithPermissions:(NSArray *)permissions;
+
+/**
+ * 获取UnindID,可以根据UnindID的比较来确定OpenID是否属于同一个用户
+ * \return NO未登录,信息不足;YES条件满足,发送请求成功,请等待回调
+ */
+- (BOOL)RequestUnionId;
+
+/**
+ * (静态方法)处理应用拉起协议
+ * \param url 处理被其他应用呼起时的逻辑
+ * \return 处理结果,YES表示成功,NO表示失败
+ */
++ (BOOL)HandleOpenURL:(NSURL *)url;
+
+/**
+ * (静态方法)sdk是否可以处理应用拉起协议
+ * \param url 处理被其他应用呼起时的逻辑
+ * \return 处理结果,YES表示可以 NO表示不行
+ */
++ (BOOL)CanHandleOpenURL:(NSURL *)url;
+
+/**
+ * (静态方法)获取TencentOAuth调用的上一次错误信息
+ */
++ (NSString *)getLastErrorMsg;
+
+/**
+ * 以Server Side Code模式授权登录时,通过此接口获取返回的code值;
+ * 以Client Side Token模式授权登录时,忽略此接口。
+ */
+- (NSString *)getServerSideCode;
+
+/**
+ * 退出登录(退出登录后,TecentOAuth失效,需要重新初始化)
+ * \param delegate 第三方应用用于接收请求返回结果的委托对象
+ */
+- (void)logout:(id<TencentSessionDelegate>)delegate;
+
+/**
+ * 判断登录态是否有效
+ * \return 处理结果,YES表示有效,NO表示无效,请用户重新登录授权
+ */
+- (BOOL)isSessionValid;
+
+/**
+ * 获取用户个人信息
+ * \return 处理结果,YES表示API调用成功,NO表示API调用失败,登录态失败,重新登录
+ */
+- (BOOL)getUserInfo;
+
+/**
+ * SDK内置webview实现定向分享时,第三方应用可以根据应用是否在白名单里来开启该配置开关,默认为关闭;
+ * 在白名单里的应用调用该接口后,即打开sdk内置webview的二级白名单开关(相对与sdk后台的白名单),
+ * 那么在sdk后台白名单校验请求失败的情况下,会继续先尝试采用内置webview进行分享。
+ */
+- (void)openSDKWebViewQQShareEnable;
+
+
+/**
+ * 获取用户QZone相册列表
+ * \attention 需\ref apply_perm
+ * \return 处理结果,YES表示API调用成功,NO表示API调用失败,登录态失败,重新登录
+ */
+- (BOOL)getListAlbum;
+
+/**
+ * 获取用户QZone相片列表
+ * \attention 需\ref apply_perm
+ * \param params 参数字典,字典的关键字参见TencentOAuthObject.h中的\ref TCListPhotoDic
+ * \return 处理结果,YES表示API调用成功,NO表示API调用失败,登录态失败,重新登录
+ */
+- (BOOL)getListPhotoWithParams:(NSMutableDictionary *)params;
+
+
+/**
+ * 分享到QZone
+ * \param params 参数字典,字典的关键字参见TencentOAuthObject.h中的\ref TCAddShareDic 
+ * \return 处理结果,YES表示API调用成功,NO表示API调用失败,登录态失败,重新登录
+ */
+- (BOOL)addShareWithParams:(NSMutableDictionary *)params;
+
+
+/**
+ * 上传照片到QZone指定相册
+ * \attention 需\ref apply_perm
+ * \param params 参数字典,字典的关键字参见TencentOAuthObject.h中的\ref TCUploadPicDic
+ * \return 处理结果,YES表示API调用成功,NO表示API调用失败,登录态失败,重新登录
+ */
+- (BOOL)uploadPicWithParams:(NSMutableDictionary *)params;
+
+/**
+ * 在QZone相册中创建一个新的相册
+ * \attention 需\ref apply_perm
+ * \param params 参数字典,字典的关键字参见TencentOAuthObject.h中的\ref TCAddAlbumDic
+ * \return 处理结果,YES表示API调用成功,NO表示API调用失败,登录态失败,重新登录
+ */
+- (BOOL)addAlbumWithParams:(NSMutableDictionary *)params;
+
+/**
+ * 检查是否是QZone某个用户的粉丝
+ * \param params 参数字典,字典的关键字参见TencentOAuthObject.h中的\ref TCCheckPageFansDic
+ * \return 处理结果,YES表示API调用成功,NO表示API调用失败,登录态失败,重新登录
+ */
+- (BOOL)checkPageFansWithParams:(NSMutableDictionary *)params;
+
+/**
+ * 在QZone中发表一篇日志
+ * \attention 需\ref apply_perm
+ * \param params 参数字典,字典的关键字参见TencentOAuthObject.h中的\ref TCAddOneBlogDic
+ * \return 处理结果,YES表示API调用成功,NO表示API调用失败,登录态失败,重新登录
+ */
+- (BOOL)addOneBlogWithParams:(NSMutableDictionary *)params;
+
+/**
+ * 在QZone中发表一条说说
+ * \attention 需\ref apply_perm
+ * \param params 参数字典,字典的关键字参见TencentOAuthObject.h中的\ref TCAddTopicDic
+ * \return 处理结果,YES表示API调用成功,NO表示API调用失败,登录态失败,重新登录
+ */
+- (BOOL)addTopicWithParams:(NSMutableDictionary *)params;
+
+/**
+ * 设置QQ头像 使用默认的效果处理设置头像的界面
+ * \attention 需\ref apply_perm
+ * \param params 参数字典,字典的关键字参见TencentOAuthObject.h中的\ref TCSetUserHeadpic
+ * \return 处理结果,YES表示API调用成功,NO表示API调用失败,登录态失败,重新登录
+ */
+- (BOOL)setUserHeadpic:(NSMutableDictionary *)params;
+
+
+/**
+ * 设置QQ头像 会返回设置头像由第三方自己处理界面的弹出方式
+ * \attention 需\ref apply_perm
+ * \param params 参数字典,字典的关键字参见TencentOAuthObject.h中的\ref TCSetUserHeadpic
+ * \param viewController 设置头像的界面
+ * \return 处理结果,YES表示API调用成功,NO表示API调用失败,登录态失败,重新登录
+ */
+- (BOOL)setUserHeadpic:(NSMutableDictionary *)params andViewController:(UIViewController **)viewController;
+
+/**
+ * 获取QQ会员信息(仅包括是否为QQ会员,是否为年费QQ会员)
+ * \attention 需\ref apply_perm
+ * \return 处理结果,YES表示API调用成功,NO表示API调用失败,登录态失败,重新登录
+ */
+- (BOOL)getVipInfo;
+
+/**
+ * 获取QQ会员详细信息
+ * \attention 需\ref apply_perm
+ * \return 处理结果,YES表示API调用成功,NO表示API调用失败,登录态失败,重新登录
+ */
+- (BOOL)getVipRichInfo;
+
+/**
+ * QZone定向分享,可以@到具体好友,完成后将触发responseDidReceived:forMessage:回调,message:“SendStory”
+ * \param params 参数字典
+ * \param fopenIdArray 第三方应用预传人好友列表,好友以openid标识
+ * \return 处理结果,YES表示API调用成功,NO表示API调用失败,登录态失败,重新登录
+ */
+- (BOOL)sendStory:(NSMutableDictionary *)params friendList:(NSArray *)fopenIdArray;
+
+/**
+ * 发送应用邀请,完成后将触发responseDidReceived:forMessage:回调,message:“AppInvitation”
+ * \param desc 应用的描述文字,不超过35字符,如果为nil或@“”则显示默认描述
+ * \param imageUrl 应用的图标,如果为nil或者@“”则显示默认图标
+ * \param source 透传参数,由开发者自定义该参数内容
+ * \return 处理结果,YES表示API调用成功,NO表示API调用失败,登录态失败,重新登录
+ */
+- (BOOL)sendAppInvitationWithDescription:(NSString *)desc imageURL:(NSString *)imageUrl source:(NSString *)source;
+
+/**
+ * 发起PK或者发送炫耀,完成后将触发responseDidReceived:forMessage:回调,message:“AppChallenge”
+ * \param receiver 必须指定一位进行PK或者炫耀的好友,填写其OpenID,填写多个OpenID将截取第一个
+ * \param type 类型,"pk"或者“brag”
+ * \param imageUrl 炫耀/挑战场景图的URL
+ * \param message 炫耀/挑战中的内容描述,不超过50个字符,超过限制则自动截断
+ * \param source 透传参数,由开发者自定义该参数内容
+ * \return 处理结果,YES表示API调用成功,NO表示API调用失败,登录态失败,重新登录
+ */
+- (BOOL)sendChallenge:(NSString *)receiver type:(NSString *)type imageURL:(NSString *)imageUrl message:(NSString *)message source:(NSString *)source;
+
+/**
+ * 赠送或者请求礼物,完成后将触发responseDidReceived:forMessage:回调,message:“AppGiftRequest”
+ * \param receiver 赠送或者请求礼物的好友的OpenID,支持填写多个,OpenID之用","分隔,为nil时将由用户通过好友选择器选择好友
+ * \param exclude 用户通过好友选择器选择好友场景下,希望排除的好友(不显示在好友选择器)
+ * \param specified 用户通过好友选择器选择好友场景下,希望出现的指定好友
+ * \param only 是否只显示specified指定的好友
+ * \param type 类型,"request"或者“freegift”
+ * \param title 免费礼物或请求名称,不超过6个字符
+ * \param message 礼物或请求的默认赠言,控制在35个汉字以内,超过限制自动截断
+ * \param imageUrl 请求或礼物配图的URL,如果不传,则默认在弹框中显示应用的icon
+ * \param source 透传参数,由开发者自定义该参数内容
+ * \return 处理结果,YES表示API调用成功,NO表示API调用失败,登录态失败,重新登录
+ */
+- (BOOL)sendGiftRequest:(NSString *)receiver exclude:(NSString *)exclude specified:(NSString *)specified only:(BOOL)only type:(NSString *)type title:(NSString *)title message:(NSString *)message imageURL:(NSString *)imageUrl source:(NSString *)source;
+
+
+/**
+ * 退出指定API调用
+ * \param userData 用户调用某条API的时候传入的保留参数
+ * \return 处理结果,YES表示成功 NO表示失败
+ */
+- (BOOL)cancel:(id)userData;
+
+/**
+ * CGI类任务创建接口
+ * \param apiURL CGI请求的URL地址
+ * \param method CGI请求方式:"GET","POST"
+ * \param params CGI请求参数字典
+ * \param callback CGI请求结果的回调接口对象
+ * \return CGI请求任务实例,用于取消任务,返回nil代表任务创建失败
+ */
+- (TCAPIRequest *)cgiRequestWithURL:(NSURL *)apiURL method:(NSString *)method params:(NSDictionary *)params callback:(id<TCAPIRequestDelegate>)callback;
+
+/**
+ * TencentOpenApi发送任务统一接口
+ * \param request 请求发送的任务
+ * \param callback 任务发送后的回调地址
+ */
+- (BOOL)sendAPIRequest:(TCAPIRequest *)request callback:(id<TCAPIRequestDelegate>)callback;
+
+- (NSString *)getUserOpenID;
+
+@end
+
+#pragma mark - TencentLoginDelegate(授权登录回调协议)
+
+/**
+ * \brief TencentLoginDelegate iOS Open SDK 1.3 API回调协议
+ *
+ * 第三方应用实现登录的回调协议
+ */
+@protocol TencentLoginDelegate <NSObject>
+
+@required
+
+/**
+ * 登录成功后的回调
+ */
+- (void)tencentDidLogin;
+
+/**
+ * 登录失败后的回调
+ * \param cancelled 代表用户是否主动退出登录
+ */
+- (void)tencentDidNotLogin:(BOOL)cancelled;
+
+/**
+ * 登录时网络有问题的回调
+ */
+- (void)tencentDidNotNetWork;
+
+@optional
+/**
+ * 登录时权限信息的获得
+ */
+- (NSArray *)getAuthorizedPermissions:(NSArray *)permissions withExtraParams:(NSDictionary *)extraParams;
+
+/**
+ * unionID获得
+ */
+- (void)didGetUnionID;
+
+@end
+
+#pragma mark - TencentSessionDelegate(开放接口回调协议)
+
+/**
+ * \brief TencentSessionDelegate iOS Open SDK 1.3 API回调协议
+ *
+ * 第三方应用需要实现每条需要调用的API的回调协议
+ */
+@protocol TencentSessionDelegate<NSObject, TencentLoginDelegate,
+                                TencentApiInterfaceDelegate,
+                                TencentWebViewDelegate>
+
+@optional
+
+/**
+ * 退出登录的回调
+ */
+- (void)tencentDidLogout;
+
+/**
+ * 因用户未授予相应权限而需要执行增量授权。在用户调用某个api接口时,如果服务器返回操作未被授权,则触发该回调协议接口,由第三方决定是否跳转到增量授权页面,让用户重新授权。
+ * \param tencentOAuth 登录授权对象。
+ * \param permissions 需增量授权的权限列表。
+ * \return 是否仍然回调返回原始的api请求结果。
+ * \note 不实现该协议接口则默认为不开启增量授权流程。若需要增量授权请调用\ref TencentOAuth#incrAuthWithPermissions: \n注意:增量授权时用户可能会修改登录的帐号
+ */
+- (BOOL)tencentNeedPerformIncrAuth:(TencentOAuth *)tencentOAuth withPermissions:(NSArray *)permissions;
+
+/**
+ * [该逻辑未实现]因token失效而需要执行重新登录授权。在用户调用某个api接口时,如果服务器返回token失效,则触发该回调协议接口,由第三方决定是否跳转到登录授权页面,让用户重新授权。
+ * \param tencentOAuth 登录授权对象。
+ * \return 是否仍然回调返回原始的api请求结果。
+ * \note 不实现该协议接口则默认为不开启重新登录授权流程。若需要重新登录授权请调用\ref TencentOAuth#reauthorizeWithPermissions: \n注意:重新登录授权时用户可能会修改登录的帐号
+ */
+- (BOOL)tencentNeedPerformReAuth:(TencentOAuth *)tencentOAuth;
+
+/**
+ * 用户通过增量授权流程重新授权登录,token及有效期限等信息已被更新。
+ * \param tencentOAuth token及有效期限等信息更新后的授权实例对象
+ * \note 第三方应用需更新已保存的token及有效期限等信息。
+ */
+- (void)tencentDidUpdate:(TencentOAuth *)tencentOAuth;
+
+/**
+ * 用户增量授权过程中因取消或网络问题导致授权失败
+ * \param reason 授权失败原因,具体失败原因参见sdkdef.h文件中\ref UpdateFailType
+ */
+- (void)tencentFailedUpdate:(UpdateFailType)reason;
+
+/**
+ * 获取用户个人信息回调
+ * \param response API返回结果,具体定义参见sdkdef.h文件中\ref APIResponse
+ * \remarks 正确返回示例: \snippet example/getUserInfoResponse.exp success
+ *          错误返回示例: \snippet example/getUserInfoResponse.exp fail
+ */
+- (void)getUserInfoResponse:(APIResponse*) response;
+
+
+/**
+ * 获取用户QZone相册列表回调
+ * \param response API返回结果,具体定义参见sdkdef.h文件中\ref APIResponse
+ * \remarks 正确返回示例: \snippet example/getListAlbumResponse.exp success
+ *          错误返回示例: \snippet example/getListAlbumResponse.exp fail
+ */
+- (void)getListAlbumResponse:(APIResponse*) response;
+
+/**
+ * 获取用户QZone相片列表
+ * \param response API返回结果,具体定义参见sdkdef.h文件中\ref APIResponse
+ * \remarks 正确返回示例: \snippet example/getListPhotoResponse.exp success
+ *          错误返回示例: \snippet example/getListPhotoResponse.exp fail
+ */
+- (void)getListPhotoResponse:(APIResponse*) response;
+
+/**
+ * 检查是否是QZone某个用户的粉丝回调
+ * \param response API返回结果,具体定义参见sdkdef.h文件中\ref APIResponse
+ * \remarks 正确返回示例: \snippet example/checkPageFansResponse.exp success
+ *          错误返回示例: \snippet example/checkPageFansResponse.exp fail
+ */
+- (void)checkPageFansResponse:(APIResponse*) response;
+ 
+/**
+ * 分享到QZone回调
+ * \param response API返回结果,具体定义参见sdkdef.h文件中\ref APIResponse
+ * \remarks 正确返回示例: \snippet example/addShareResponse.exp success
+ *          错误返回示例: \snippet example/addShareResponse.exp fail
+ */
+- (void)addShareResponse:(APIResponse*) response;
+
+/**
+ * 在QZone相册中创建一个新的相册回调
+ * \param response API返回结果,具体定义参见sdkdef.h文件中\ref APIResponse
+ * \remarks 正确返回示例: \snippet example/addAlbumResponse.exp success
+ *          错误返回示例: \snippet example/addAlbumResponse.exp fail
+ */
+- (void)addAlbumResponse:(APIResponse*) response;
+
+/**
+ * 上传照片到QZone指定相册回调
+ * \param response API返回结果,具体定义参见sdkdef.h文件中\ref APIResponse
+ * \remarks 正确返回示例: \snippet example/uploadPicResponse.exp success
+ *          错误返回示例: \snippet example/uploadPicResponse.exp fail
+ */
+- (void)uploadPicResponse:(APIResponse*) response;
+
+
+/**
+ * 在QZone中发表一篇日志回调
+ * \param response API返回结果,具体定义参见sdkdef.h文件中\ref APIResponse
+ * \remarks 正确返回示例: \snippet example/addOneBlogResponse.exp success
+ *          错误返回示例: \snippet example/addOneBlogResponse.exp fail
+ */
+- (void)addOneBlogResponse:(APIResponse*) response;
+
+/**
+ * 在QZone中发表一条说说回调
+ * \param response API返回结果,具体定义参见sdkdef.h文件中\ref APIResponse
+ * \remarks 正确返回示例: \snippet example/addTopicResponse.exp success
+ *          错误返回示例: \snippet example/addTopicResponse.exp fail
+ */
+- (void)addTopicResponse:(APIResponse*) response;
+
+/**
+ * 设置QQ头像回调
+ * \param response API返回结果,具体定义参见sdkdef.h文件中\ref APIResponse
+ * \remarks 正确返回示例: \snippet example/setUserHeadpicResponse.exp success
+ *          错误返回示例: \snippet example/setUserHeadpicResponse.exp fail
+ */
+- (void)setUserHeadpicResponse:(APIResponse*) response;
+
+/**
+ * 获取QQ会员信息回调
+ * \param response API返回结果,具体定义参见sdkdef.h文件中\ref APIResponse
+ * \remarks 正确返回示例: \snippet example/getVipInfoResponse.exp success
+ *          错误返回示例: \snippet example/getVipInfoResponse.exp fail
+ */
+- (void)getVipInfoResponse:(APIResponse*) response;
+
+/**
+ * 获取QQ会员详细信息回调
+ * \param response API返回结果,具体定义参见sdkdef.h文件中\ref APIResponse
+ */
+- (void)getVipRichInfoResponse:(APIResponse*) response;
+
+/**
+ * sendStory分享的回调(已废弃,使用responseDidReceived:forMessage:)
+ * \param response API返回结果,具体定义参见sdkdef.h文件中\ref APIResponse
+ */
+- (void)sendStoryResponse:(APIResponse*) response;
+
+
+/**
+ * 社交API统一回调接口
+ * \param response API返回结果,具体定义参见sdkdef.h文件中\ref APIResponse
+ * \param message 响应的消息,目前支持‘SendStory’,‘AppInvitation’,‘AppChallenge’,‘AppGiftRequest’
+ */
+- (void)responseDidReceived:(APIResponse*)response forMessage:(NSString *)message;
+
+/**
+ * post请求的上传进度
+ * \param tencentOAuth 返回回调的tencentOAuth对象
+ * \param bytesWritten 本次回调上传的数据字节数
+ * \param totalBytesWritten 总共已经上传的字节数
+ * \param totalBytesExpectedToWrite 总共需要上传的字节数
+ * \param userData 用户自定义数据
+ */
+- (void)tencentOAuth:(TencentOAuth *)tencentOAuth didSendBodyData:(NSInteger)bytesWritten totalBytesWritten:(NSInteger)totalBytesWritten totalBytesExpectedToWrite:(NSInteger)totalBytesExpectedToWrite userData:(id)userData;
+
+
+/**
+ * 通知第三方界面需要被关闭
+ * \param tencentOAuth 返回回调的tencentOAuth对象
+ * \param viewController 需要关闭的viewController
+ */
+- (void)tencentOAuth:(TencentOAuth *)tencentOAuth doCloseViewController:(UIViewController *)viewController;
+
+@end
+
+#pragma mark - TencentWebViewDelegate(H5登录webview旋转方向回调)
+
+/**
+ * \brief TencentWebViewDelegate: H5登录webview旋转方向回调协议
+ *
+ * 第三方应用可以根据自己APP的旋转方向限制,通过此协议设置
+ */
+@protocol TencentWebViewDelegate <NSObject>
+@optional
+- (BOOL) tencentWebViewShouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation;
+- (NSUInteger) tencentWebViewSupportedInterfaceOrientationsWithWebkit;
+- (BOOL) tencentWebViewShouldAutorotateWithWebkit;
+@end
diff --git a/platforms/ios/dlapp/Plugins/cordova-plugin-qqsdk/TencentOpenAPI.framework/Headers/TencentOAuthObject.h b/platforms/ios/dlapp/Plugins/cordova-plugin-qqsdk/TencentOpenAPI.framework/Headers/TencentOAuthObject.h
new file mode 100644
index 0000000..2fc3a65
--- /dev/null
+++ b/platforms/ios/dlapp/Plugins/cordova-plugin-qqsdk/TencentOpenAPI.framework/Headers/TencentOAuthObject.h
@@ -0,0 +1,452 @@
+///
+/// \file TencentOAuthObject.h
+/// 对开放接口的调用提供参数字典封装的辅助类
+///
+/// Created by Tencent on 12-12-28.
+/// Copyright (c) 2012年 Tencent. All rights reserved.
+///
+
+#import <Foundation/Foundation.h>
+#import <UIKit/UIKit.h>
+#import "sdkdef.h"
+
+
+#pragma mark -
+#pragma mark TCAddTopicDic
+
+/** 
+ * \brief 发表说说的参数字典定义
+ *
+ * 可以直接填写相应参数后将对象当作参数传入API中
+ */
+@interface TCAddTopicDic : TCAPIRequest
+
+/** 
+ * 返回一个对象用来进行API参数的填充
+ * \note 不用释放,返回的对象是自动释放的
+ */
++ (TCAddTopicDic *) dictionary;
+
+/** 
+ * 发布心情时引用的信息的类型。
+ * \note 1表示图片; 2表示网页; 3表示视频
+ */
+@property (nonatomic, retain) TCOptionalStr paramRichtype;
+
+/**
+ * 发布心情时引用的信息的值。有richtype时必须有richval
+ *
+ * \note
+ *       -# 当richtype为图片(即richtype为1,应用场景为发布心情时引用某张图片)时,\n
+ *          richval需要传入该图片的相关参数。引用的图片来源分为两种:一种为网站图片,\n
+ *          一种为QQ空间相册中的某张图片。
+ *             - 当引用的图片来自网站,richval包含下列参数的值:\n
+ *               | 参数名称 | 是否必须 | 类型    | 描述              |
+ *               | ------ | ------- | ------ | ----------------- |
+ *               | url    | 必须     | string | 网站图片的URL      |
+ *               | height | 必须     | string | 图片高度,单位: px |
+ *               | width  | 必须     | string | 图片宽度,单位: px |
+ *               \n
+ *               输入时每个值中间用“&”分隔,如下所示:\n
+ *               “url=http://qq.com/logo.png&width=25&height=21”
+ *
+ *             - 当引用的图片来自QQ空间相册,richval包含下列参数的值。\n
+ *               这些值都需要通过调用相册OpenAPI来获得。参数意义如下:\n
+ *               | 参数名称   | 是否必须 | 类型    | 描述                               |
+ *               | --------- | ------ | ------ | ---------------------------------- |
+ *               | albumid   | 必须    | string | 图片所属空间相册的ID                  |
+ *               | pictureid | 必须    | string | 图片ID                              |
+ *               | sloc      | 必须    | string | 小图ID                              |
+ *               | pictype   |        | string | 图片类型(JPG = 1;GIF = 2;PNG = 3) |
+ *               | picheight |        | string | 图片高度,单位: px                   |
+ *               | picwidth  |        | string | 图片宽度,单位: px                   |
+ *               输入时每个值中间用逗号分隔,如下所示 :\n
+ *               “albumid,pictureid,sloc,pictype,picheight,picwidth”
+ *       -# 当richtype为网页(即richtype为2,应用场景为针对某网页发表评论)时,\n
+ *          richval需要传入该网页的URL,发表为feeds时,后台会自动将该URL转换为短URL。
+ *       -# 当richtype为视频(即richtype为3,应用场景为针对某视频发表评论)时,\n
+ *          richval需要传入该视频的URL,发表为feeds时,后台会对该URL进行解析,\n
+ *          在feeds上显示播放器,视频源及缩略图。
+ */
+@property (nonatomic, retain) TCOptionalStr paramRichval;
+
+/** 
+ * 发布的心情的内容。
+ */
+@property (nonatomic, retain) TCRequiredStr paramCon;
+
+/** 
+ * 地址文。例如:广东省深圳市南山区高新科技园腾讯大厦。lbs_nm,lbs_x,lbs_y通常一起使用,来明确标识一个地址。
+ */
+@property (nonatomic, retain) TCOptionalStr paramLbs_nm;
+
+/** 
+ * 经度。-180.0到+180.0,+表示东经。lbs_nm,lbs_x,lbs_y通常一起使用,来明确标识一个地址。
+ */
+@property (nonatomic, retain) TCOptionalStr paramLbs_x;
+
+/** 
+ * 纬度。-90.0到+90.0,+表示北纬。lbs_nm,lbs_x,lbs_y通常一起使用,来明确标识一个地址。
+ */
+@property (nonatomic, retain) TCOptionalStr paramLbs_y;
+
+/** 
+ * 第三方应用的平台类型。
+ * \note 1表示QQ空间; 2表示腾讯朋友; 3表示腾讯微博平台; 4表示腾讯Q+平台。
+ */
+@property (nonatomic, retain) TCOptionalStr paramThirdSource;
+@end
+
+
+#pragma mark -
+#pragma mark TCAddOneBlogDic
+/**
+ * \brief 发表日志的参数字典定义
+ *
+ * 可以直接填写相应参数后将对象当作参数传入API中
+ */
+@interface TCAddOneBlogDic : TCAPIRequest
+
+/**
+ * 返回一个对象用来进行API参数的填充
+ * \note 不用释放,返回的对象是自动释放的
+ */
++ (TCAddOneBlogDic *) dictionary;
+
+/** 
+ * 日志标题(纯文本,最大长度128个字节,utf-8编码)。
+ */
+@property (nonatomic, retain) TCRequiredStr paramTitle;
+
+/** 
+ * content 文章内容(html数据,最大长度100*1024个字节,utf-8编码)
+ */
+@property (nonatomic, retain) TCRequiredStr paramContent;
+@end
+
+#pragma mark -
+#pragma mark TCAddAlbumDic
+/** 
+ * \brief 创建空间相册的参数字典定义
+ *
+ * 可以直接填写相应参数后将对象当作参数传入API中
+ */
+@interface TCAddAlbumDic : TCAPIRequest
+
+/**
+ * 返回一个对象用来进行API参数的填充
+ *
+ * \note 不用释放,返回的对象是自动释放的
+ */
++ (TCAddAlbumDic *) dictionary;
+
+/** 
+ * albumname 必须 string 相册名 不能超过30个字符。
+ */
+@property (nonatomic, retain) TCRequiredStr paramAlbumname;
+
+
+/**
+ * albumdesc string 相册描述,不能超过200个字符。
+ */
+@property (nonatomic, retain) TCOptionalStr paramAlbumdesc;
+
+/** 
+ * priv string	相册权限
+ *
+ * \note 其取值含义为: 1=公开;3=只主人可见; 4=QQ好友可见; 5=问答加密。\n
+ *       不传则相册默认为公开权限。\n
+ *       如果priv取值为5,即相册是问答加密的,则必须包含问题和答案两个参数:\n
+ *       - question: 问题,不能超过30个字符。
+ *       - answer: 答案,不能超过30个字符。
+ */
+@property (nonatomic, retain) TCOptionalStr paramPriv;
+
+/**
+ * question 问题,不能超过30个字符。
+ * \note 如果priv取值为5,必须包含这个参数:
+ **/
+@property (nonatomic, retain) TCOptionalStr paramQuestion;
+
+/**
+ * answer 答案,不能超过30个字符。
+ * \note 如果priv取值为5,必须包含这个参数:
+ **/
+@property (nonatomic, retain) TCOptionalStr paramAnswer;
+
+@end
+
+#pragma mark -
+#pragma mark TCUploadPicDic
+/**
+ * \brief 上传一张照片到QQ空间相册的参数字典定义
+ *
+ * 可以直接填写相应参数后将对象当作参数传入API中
+ */
+@interface TCUploadPicDic : TCAPIRequest
+
+/**
+ * 返回一个对象用来进行API参数的填充
+ * \note 不用释放,返回的对象是自动释放的
+ */
++ (TCUploadPicDic *) dictionary;
+
+/** 
+ * photodesc string 照片描述,注意照片描述不能超过200个字符。
+ */
+@property (nonatomic, retain) TCOptionalStr paramPhotodesc;
+/**	
+ * string 照片的命名,必须以.jpg, .gif, .png, .jpeg, .bmp此类后缀结尾。
+ */
+@property (nonatomic, retain) TCOptionalStr paramTitle;
+
+/**	
+ * string 相册id。可不填,不填时则根据“mobile”标识选择默认上传的相册。
+ */
+@property (nonatomic, retain) TCOptionalStr paramAlbumid;
+
+/** 
+ * 标志位
+ *
+ * \note 0表示PC,1表示手机。用于当不传相册id时(即albumid为空时)控制是否传到手机相册。\n
+ *       -# 如果传1,则当albumid为空时,图片会上传到手机相册;
+ *       -# 如果不传或传0,则当albumid为空时,图片会上传到贴图相册;
+ */
+@property (nonatomic, assign) TCOptionalStr paramMobile;
+
+/** 
+ * x string 照片拍摄时的地理位置的经度。请使用原始数据(纯经纬度,0-360)。
+ */
+@property (nonatomic, retain) TCOptionalStr paramX;
+
+/** 
+ * y string 照片拍摄时的地理位置的纬度。请使用原始数据(纯经纬度,0-360)。
+ */
+@property (nonatomic, retain) TCOptionalStr paramY;
+
+/**
+ * picture 必须 string 上传照片的文件名以及图片的内容(在发送请求时,图片内容以二进制数据流的形式发送,见下面的请求示例),注意照片名称不能超过30个字符。
+ */
+@property (nonatomic, retain) TCRequiredImage paramPicture;
+
+/** 
+ * needfeed int	 标识上传照片时是否要发feed
+ * \note(0:不发feed; 1:发feed)。如果不填则默认为发feed。
+ */
+@property (nonatomic, assign)TCOptionalStr paramNeedfeed;
+
+/** 
+ * successnum int 批量上传照片时,已成功上传的张数,指明上传完成情况。
+ * \note 单张上传时可以不填,不填则默认为0。
+ */
+@property (nonatomic, assign)TCOptionalStr paramSuccessnum;
+
+/** 
+ * picnum int 批量上传照片的总张数,如果不填则默认为1。
+ * \note
+ *       - 如果picnum=1,为单张上传,发送单张上传feed;
+ *       - 如果picnum>1,为批量上传,发送批量上传feed。
+ *       批量上传方式:picnum为一次上传照片的张数,successnum初始值为0,每调用一次照片上传接口后递增其值。
+ *       信息中心中的feed表现形式:批量上传时最新的7张在feed中展示。其中最新上传的一张图片展示为大图,剩下的
+ *       六张按从新到旧的顺序展示为小图,其他图片不在feed中展示。
+ */
+@property (nonatomic, assign)TCOptionalStr paramPicnum;
+
+@end
+
+#pragma mark -
+#pragma mark TCAddShareDic
+/**
+ * \brief 同步分享到QQ空间,腾讯微博的参数字典定义
+ *
+ * 可以直接填写相应参数后将对象当作参数传入API中
+ */
+@interface TCAddShareDic : TCAPIRequest
+
+/**
+ * 返回一个对象用来进行API参数的填充
+ *
+ * \note 不用释放,返回的对象是自动释放的
+ */
++ (TCAddShareDic *) dictionary;
+
+/** 
+ * title 必须 string	 feeds的标题 最长36个中文字,超出部分会被截断。
+ */
+@property (nonatomic, retain) TCRequiredStr paramTitle;
+
+
+/**
+ * url 必须 string 分享所在网页资源的链接,点击后跳转至第三方网页,对应上文接口说明中2的超链接。请以http://开头。
+ */
+@property (nonatomic, retain) TCRequiredStr paramUrl;
+
+
+/**
+ * comment string 用户评论内容,也叫发表分享时的分享理由 禁止使用系统生产的语句进行代替。
+ * 最长40个中文字,超出部分会被截断。
+ */
+@property (nonatomic, retain) TCOptionalStr paramComment;
+
+
+/** 
+ * summary string 所分享的网页资源的摘要内容,或者是网页的概要描述 最长80个中文字,超出部分会被截断。
+ */
+@property (nonatomic, retain) TCOptionalStr paramSummary;
+
+/** 
+ * images string 所分享的网页资源的代表性图片链接",请以http://开头,长度限制255字符。多张图片以竖线(|)分隔,目前只有第一张图片有效,图片规格100*100为佳。
+ */
+@property (nonatomic, retain) TCOptionalStr paramImages;
+
+/** 
+ * type string 分享内容的类型。
+ *
+ * \note 4表示网页;5表示视频(type=5时,必须传入playurl)
+ */
+@property (nonatomic, retain) TCOptionalStr paramType;
+
+/** 
+ * playurl string 长度限制为256字节。仅在type=5的时候有效,表示视频的swf播放地址。
+ */
+@property (nonatomic, retain) TCOptionalStr paramPlayurl;
+
+/** 
+ * site 必须 string 分享的来源网站名称,请填写网站申请接入时注册的网站名称
+ */
+@property (nonatomic, retain) TCRequiredStr paramSite;
+
+/** 
+ * fromurl 必须 string 分享的来源网站对应的网站地址url 请以http://开头。
+ */
+@property (nonatomic, retain) TCRequiredStr paramFromurl;
+
+/**
+ * nswb string	值为1时,表示分享不默认同步到微博,其他值或者不传此参数表示默认同步到微博。
+ */
+@property (nonatomic, retain) TCOptionalStr paramNswb;
+
+@end
+
+#pragma mark -
+#pragma mark TCCheckPageFansDic
+/**
+ * \brief 验证是否认证空间粉丝tttyttyyyu的参数字典定义
+ *
+ * 可以直接填写相应参数后将对象当作参数传入API中
+ */
+@interface TCCheckPageFansDic : TCAPIRequest
+
+/**
+ * 返回一个对象用来进行API参数的填充
+ *
+ * \note 不用释放,返回的对象是自动释放的
+ */
++ (TCCheckPageFansDic *) dictionary;
+
+/** 
+ * 表示认证空间的QQ号码
+ */
+@property (nonatomic, retain) TCRequiredStr paramPage_id;
+@end
+
+#pragma mark -
+#pragma mark TCSetUserHeadpic
+/**
+ * \brief 设置用户头像
+ *
+ * 可以直接填写相应参数后将对象当作参数传入API中
+ */
+@interface TCSetUserHeadpic : TCAPIRequest
+
+/**
+ * 返回一个对象用来进行API参数的填充
+ * \note 不用释放,返回的对象是自动释放的
+ */
++ (TCSetUserHeadpic *) dictionary;
+
+/** 
+ * 设置用户头像的图片
+ */
+@property (nonatomic, retain) TCRequiredImage paramImage;
+
+/** 
+ * 图片的文件名
+ */
+@property (nonatomic, retain) TCOptionalStr paramFileName;
+@end
+
+#pragma mark -
+#pragma mark TCListPhotoDic
+
+/**
+ * \brief 获取用户QQ空间相册中的照片列表
+ *
+ * 可以直接填写相应参数后将对象当作参数传入API中
+ */
+@interface TCListPhotoDic : TCAPIRequest
+
+/**
+ * 返回一个对象用来进行API参数的填充
+ *
+ * \note 不用释放,返回的对象是自动释放的
+ */
++ (TCListPhotoDic *) dictionary;
+
+/**
+ * 表示要获取的照片列表所在的相册ID
+ */
+@property (nonatomic, retain) TCRequiredStr paramAlbumid;
+
+@end
+
+#pragma mark -
+#pragma mark TCSendStoryDic
+/**
+ * \brief QQ空间定向分享的参数字典定义
+ *
+ * 该分享支持@到指定好友,最多支持10个好友。
+ * 其中第三方应用可预传最多5个指定好友的openid,其余好友由用户自行选择。
+ * 该分享形式仅提供跳QZone分享和本地Html5分享两种形式。
+ * sendStroy不支持userData参数
+ */
+@interface TCSendStoryDic : TCAPIRequest
+
+/**
+ * 返回一个对象用来进行API参数的填充
+ *
+ * \note 不用释放,返回的对象是自动释放的
+ */
++ (TCSendStoryDic *) dictionary;
+
+/**
+ * 分享的标题
+ */
+@property (nonatomic, retain) TCRequiredStr paramTitle;
+
+/**
+ * 故事摘要,最多不超过50个汉字,可以为空
+ */
+@property (nonatomic, retain) TCOptionalStr paramSummary;
+
+/**
+ * 默认展示在输入框里的分享理由,最多120个汉字,可以为空
+ */
+@property (nonatomic, retain) TCOptionalStr paramDescription;
+
+/**
+ * 图片url
+ */
+@property (nonatomic, retain) TCOptionalStr paramPics;
+
+/**
+ * 如果不填,则默认为"进入应用"
+ */
+@property (nonatomic, retain) TCRequiredStr paramAct;
+
+/**
+ * 点击分享的Url
+ */
+@property (nonatomic, retain) TCOptionalStr paramShareUrl;
+
+@end
diff --git a/platforms/ios/dlapp/Plugins/cordova-plugin-qqsdk/TencentOpenAPI.framework/Headers/sdkdef.h b/platforms/ios/dlapp/Plugins/cordova-plugin-qqsdk/TencentOpenAPI.framework/Headers/sdkdef.h
new file mode 100644
index 0000000..0eefc78
--- /dev/null
+++ b/platforms/ios/dlapp/Plugins/cordova-plugin-qqsdk/TencentOpenAPI.framework/Headers/sdkdef.h
@@ -0,0 +1,444 @@
+///
+/// \file sdkdef.h
+/// \brief SDK中相关常量定义
+///
+/// Created by Tencent on 12-12-25.
+/// Copyright (c) 2012年 Tencent. All rights reserved.
+///
+
+#import <Foundation/Foundation.h>
+#import <UIKit/UIKit.h>
+
+/**
+ * \brief 设置sdk的log等级
+ */
+typedef enum {
+    TCOLogLevel_Disabled = -1,   // 关闭所有log
+    TCOLogLevel_Error = 0,
+    TCOLogLevel_Warning,
+    TCOLogLevel_Info,
+    TCOLogLevel_Debug,
+} TCOLogLevel;
+
+/**
+ * \brief 手机qq的当前版本
+ */
+typedef enum QQVersion
+{
+    kQQUninstall,
+    kQQVersion3_0,
+    kQQVersion4_0,      //支持sso登陆
+    kQQVersion4_2_1,    //ios7兼容
+    kQQVersion4_5,      //4.5版本,wpa会话
+    kQQVersion4_6,      //4.6版本,sso登陆信令通道切换
+    kQQVersion4_7,      //4.7版本 不确定新支持了什么样的属性
+} QQVersion;
+
+
+/**
+ * \breif TIM的当前版本
+ */
+typedef enum TIMVersion {
+    kTIMUinstall,
+    kTIMVersion1_1,
+}TIMVersion;
+
+/**
+ * \breif 授权/分享 方式
+ */
+typedef enum TencentAuthShareType {
+    AuthShareType_QQ,
+    AuthShareType_TIM,
+}TencentAuthShareType;
+
+/**
+ * \brief APIResponse.retCode可能的枚举常量
+ */
+typedef enum
+{
+	URLREQUEST_SUCCEED = 0, /**< 网络请求成功发送至服务器,并且服务器返回数据格式正确
+                             * \note 这里包括所请求业务操作失败的情况,例如没有授权等原因导致
+                             */
+    
+	URLREQUEST_FAILED = 1,  /**< 网络异常,或服务器返回的数据格式不正确导致无法解析 */
+} REPONSE_RESULT;
+
+/**
+ * \brief 增量授权失败原因
+ *
+ * \note 增量授权失败不影响原token的有效性(原token已失效的情况除外)
+ */
+typedef enum
+{
+    kUpdateFailUnknown = 1,  ///< 未知原因
+    kUpdateFailUserCancel,   ///< 用户取消
+    kUpdateFailNetwork,      ///< 网络问题
+} UpdateFailType;
+
+/**
+ * \brief 封装服务器返回的结果
+ *
+ * APIResponse用于封装所有请求的返回结果,包括错误码、错误信息、原始返回数据以及返回数据的json格式字典
+ */
+@interface APIResponse : NSObject<NSCoding> {
+    int      _detailRetCode;
+	int		 _retCode;
+	int		 _seq;
+	NSString *_errorMsg;
+	NSDictionary *_jsonResponse;
+	NSString *_message;
+    id       _userData;
+}
+
+/**
+ * 新增的详细错误码\n
+ * detailRetCode主要用于区分不同的错误情况,参见\ref OpenSDKError
+ */
+@property (nonatomic, assign) int detailRetCode;
+
+/**
+ * 网络请求是否成功送达服务器,以及服务器返回的数据格式是否正确\n
+ * retCode具体取值可参考\ref REPONSE_RESULT
+ */
+@property (nonatomic, assign) int retCode;
+
+/**
+ * 网络请求对应的递增序列号,方便内部管理
+ */
+@property (nonatomic, assign) int seq;
+
+/**
+ * 错误提示语
+ */
+@property (nonatomic, retain) NSString *errorMsg;
+
+/**
+ * 服务器返回数据的json格式字典\n
+ * 字典内具体参数的命名和含义请参考\ref api_spec
+ */
+@property (nonatomic, retain) NSDictionary *jsonResponse;
+
+/**
+ * 服务器返回的原始数据字符串
+ */
+@property (nonatomic, retain) NSString *message;
+
+/**
+ * 用户保留数据
+ */
+@property (nonatomic, retain) id userData;
+
+@end
+
+
+/**
+ * 用户自定义的保留字段
+ */
+FOUNDATION_EXTERN NSString * const PARAM_USER_DATA;
+
+/**
+ * \name 应用邀请参数字段定义
+ */
+///@{
+
+/** 应用邀请展示图片url的key */
+FOUNDATION_EXTERN NSString * const PARAM_APP_ICON;
+
+/** 应用邀请描述文本的key */
+FOUNDATION_EXTERN NSString * const PARAM_APP_DESC;
+
+/** 应用邀请好友列表的key */
+FOUNDATION_EXTERN NSString * const PARAM_APP_INVITED_OPENIDS;
+
+///@}
+
+/**
+ * \name sendStory新分享参数字段定义
+ */
+///@{
+
+/** 预填入接受人列表的key */
+FOUNDATION_EXTERN NSString * const PARAM_SENDSTORY_RECEIVER;
+
+/** 分享feeds标题的key */
+FOUNDATION_EXTERN NSString * const PARAM_SENDSTORY_TITLE;
+
+/** 分享feeds评论内容的key */
+FOUNDATION_EXTERN NSString * const PARAM_SENDSTORY_COMMENT;
+
+/** 分享feeds摘要的key */
+FOUNDATION_EXTERN NSString * const PARAM_SENDSTORY_SUMMARY;
+
+/** 分享feeds展示图片url的key */
+FOUNDATION_EXTERN NSString * const PARAM_SENDSTORY_IMAGE;
+
+/** 分享feeds跳转链接url的key */
+FOUNDATION_EXTERN NSString * const PARAM_SENDSTORY_URL;
+
+/** 分享feeds点击操作默认行为的key */
+FOUNDATION_EXTERN NSString * const PARAM_SENDSTORY_ACT;
+
+///@}
+
+/**
+ * \name 设置头像参数字段定义
+ */
+///@{
+
+/** 头像图片数据的key */
+FOUNDATION_EXTERN NSString * const PARAM_SETUSERHEAD_PIC;
+
+/** 头像图片文件名的key */
+FOUNDATION_EXTERN NSString * const PARAM_SETUSERHEAD_FILENAME;
+
+///@}
+
+/**
+ * \name 服务器返回数据的参数字段定义
+ */
+///@{
+
+/** 服务器返回码的key */
+FOUNDATION_EXTERN NSString * const PARAM_RETCODE;
+
+/** 服务器返回错误信息的key */
+FOUNDATION_EXTERN NSString * const PARAM_MESSAGE;
+
+/** 服务器返回额外数据的key */
+FOUNDATION_EXTERN NSString * const PARAM_DATA;
+
+///@}
+
+/**
+ * \name 错误信息相关常量定义
+ */
+///@{
+
+/** 详细错误信息字典中额外信息的key */
+FOUNDATION_EXTERN NSString * const TCOpenSDKErrorKeyExtraInfo;
+
+/** 详细错误信息字典中返回码的key */
+FOUNDATION_EXTERN NSString * const TCOpenSDKErrorKeyRetCode;
+
+/** 详细错误信息字典中错误语句的key */
+FOUNDATION_EXTERN NSString * const TCOpenSDKErrorKeyMsg;
+
+/** 不支持的接口 */
+FOUNDATION_EXTERN NSString * const TCOpenSDKErrorMsgUnsupportedAPI;
+
+/** 操作成功 */
+FOUNDATION_EXTERN NSString * const TCOpenSDKErrorMsgSuccess;
+
+/** 未知错误 */
+FOUNDATION_EXTERN NSString * const TCOpenSDKErrorMsgUnknown;
+
+/** 用户取消 */
+FOUNDATION_EXTERN NSString * const TCOpenSDKErrorMsgUserCancel;
+
+/** 请重新登录 */
+FOUNDATION_EXTERN NSString * const TCOpenSDKErrorMsgReLogin;
+
+/** 应用没有操作权限 */
+FOUNDATION_EXTERN NSString * const TCOpenSDKErrorMsgOperationDeny;
+
+/** 网络异常或没有网络 */
+FOUNDATION_EXTERN NSString * const TCOpenSDKErrorMsgNetwork;
+
+/** URL格式或协议错误 */
+FOUNDATION_EXTERN NSString * const TCOpenSDKErrorMsgURL;
+
+/** 解析数据出错 */
+FOUNDATION_EXTERN NSString * const TCOpenSDKErrorMsgDataParse;
+
+/** 传入参数有误 */
+FOUNDATION_EXTERN NSString * const TCOpenSDKErrorMsgParam;
+
+/** 连接超时 */
+FOUNDATION_EXTERN NSString * const TCOpenSDKErrorMsgTimeout;
+
+/** 安全问题 */
+FOUNDATION_EXTERN NSString * const TCOpenSDKErrorMsgSecurity;
+
+/** 文件读写错误 */
+FOUNDATION_EXTERN NSString * const TCOpenSDKErrorMsgIO;
+
+/** 服务器端错误 */
+FOUNDATION_EXTERN NSString * const TCOpenSDKErrorMsgServer;
+
+/** 页面错误 */
+FOUNDATION_EXTERN NSString * const TCOpenSDKErrorMsgWebPage;
+
+/** 设置头像图片过大 */
+FOUNDATION_EXTERN NSString * const TCOpenSDKErrorMsgUserHeadPicLarge;
+
+///@}
+
+/**
+ * \brief SDK新增详细错误常量
+ */
+typedef enum
+{
+    kOpenSDKInvalid = -1,                       ///< 无效的错误码
+    kOpenSDKErrorUnsupportedAPI = -2,                ///< 不支持的接口
+    
+    /**
+     * \name CommonErrorCode
+     * 公共错误码
+     */
+    ///@{
+    kOpenSDKErrorSuccess = 0,                   ///< 成功
+    kOpenSDKErrorUnknown,                       ///< 未知错误
+    kOpenSDKErrorUserCancel,                    ///< 用户取消
+    kOpenSDKErrorReLogin,                       ///< token无效或用户未授权相应权限需要重新登录
+    kOpenSDKErrorOperationDeny,                 ///< 第三方应用没有该api操作的权限
+    ///@}
+    
+    /**
+     * \name NetworkRelatedErrorCode
+     * 网络相关错误码
+     */
+    ///@{
+    kOpenSDKErrorNetwork,                       ///< 网络错误,网络不通或连接不到服务器
+    kOpenSDKErrorURL,                           ///< URL格式或协议错误
+    kOpenSDKErrorDataParse,                     ///< 数据解析错误,服务器返回的数据解析出错
+    kOpenSDKErrorParam,                         ///< 传入参数错误
+    kOpenSDKErrorConnTimeout,                   ///< http连接超时
+    kOpenSDKErrorSecurity,                      ///< 安全问题
+    kOpenSDKErrorIO,                            ///< 下载和文件IO错误
+    kOpenSDKErrorServer,                        ///< 服务器端错误
+    ///@}
+    
+    /**
+     * \name WebViewRelatedError
+     * webview特有错误
+     */
+    ///@{
+    kOpenSDKErrorWebPage,                       ///< 页面错误
+    ///@}
+    
+    /**
+     * \name SetUserHeadRelatedErrorCode
+     * 设置头像自定义错误码段
+     */
+    ///@{
+    kOpenSDKErrorUserHeadPicLarge = 0x010000,   ///< 图片过大 设置头像自定义错误码
+    ///@}
+} OpenSDKError;
+
+/**
+ * \name SDK版本(v1.3)支持的授权列表常量
+ */
+///@{
+
+/** 发表一条说说到QQ空间(<b>需要申请权限</b>) */
+FOUNDATION_EXTERN NSString *const kOPEN_PERMISSION_ADD_TOPIC;
+
+/** 发表一篇日志到QQ空间(<b>需要申请权限</b>) */
+FOUNDATION_EXTERN NSString *const kOPEN_PERMISSION_ADD_ONE_BLOG;
+
+/** 创建一个QQ空间相册(<b>需要申请权限</b>) */
+FOUNDATION_EXTERN NSString *const kOPEN_PERMISSION_ADD_ALBUM;
+
+/** 上传一张照片到QQ空间相册(<b>需要申请权限</b>) */
+FOUNDATION_EXTERN NSString *const kOPEN_PERMISSION_UPLOAD_PIC;
+
+/** 获取用户QQ空间相册列表(<b>需要申请权限</b>) */
+FOUNDATION_EXTERN NSString *const kOPEN_PERMISSION_LIST_ALBUM;
+
+/** 同步分享到QQ空间、腾讯微博 */
+FOUNDATION_EXTERN NSString *const kOPEN_PERMISSION_ADD_SHARE;
+
+/** 验证是否认证空间粉丝 */
+FOUNDATION_EXTERN NSString *const kOPEN_PERMISSION_CHECK_PAGE_FANS;
+
+/** 获取登录用户自己的详细信息 */
+FOUNDATION_EXTERN NSString *const kOPEN_PERMISSION_GET_INFO;
+
+/** 获取其他用户的详细信息 */
+FOUNDATION_EXTERN NSString *const kOPEN_PERMISSION_GET_OTHER_INFO;
+
+/** 获取会员用户基本信息 */
+FOUNDATION_EXTERN NSString *const kOPEN_PERMISSION_GET_VIP_INFO;
+
+/** 获取会员用户详细信息 */
+FOUNDATION_EXTERN NSString *const kOPEN_PERMISSION_GET_VIP_RICH_INFO;
+
+/** 获取用户信息 */
+FOUNDATION_EXTERN NSString *const kOPEN_PERMISSION_GET_USER_INFO;
+
+/** 移动端获取用户信息 */
+FOUNDATION_EXTERN NSString *const kOPEN_PERMISSION_GET_SIMPLE_USER_INFO;
+///@}
+
+
+/**
+ * \name CGI接口相关参数类型定义
+ */
+///@{
+
+/** 必填的字符串类型参数 */
+typedef NSString *TCRequiredStr;
+
+/** 必填的UIImage类型参数 */
+typedef UIImage *TCRequiredImage;
+
+/** 必填的整型参数 */
+typedef NSInteger TCRequiredInt;
+
+/** 必填的数字类型 */
+typedef NSNumber *TCRequiredNumber;
+
+/** 必填的NSData参数 */
+typedef NSData *TCRequiredData;
+
+/** 可选的字符串类型参数 */
+typedef NSString *TCOptionalStr;
+
+/** 可选的UIImage类型参数 */
+typedef UIImage *TCOptionalImage;
+
+/** 可选的整型参数 */
+typedef NSInteger TCOptionalInt;
+
+/** 可选的数字类型 */
+typedef NSNumber *TCOptionalNumber;
+
+/** 可选的不定类型参数 */
+typedef id TCRequiredId;
+///@}
+
+
+/**
+ * \brief CGI请求的参数字典封装辅助基类
+ *
+ * 将相应属性的值以key-value的形式保存到参数字典中
+ */
+@interface TCAPIRequest : NSMutableDictionary
+
+/** CGI请求的URL地址 */
+@property (nonatomic, readonly) NSURL *apiURL;
+
+/** CGI请求方式:"GET","POST" */
+@property (nonatomic, readonly) NSString *method;
+
+/**
+ * API参数中的保留字段,可以塞入任意字典支持的类型,再调用完成后会带回给调用方
+ */
+@property (nonatomic, retain) TCRequiredId paramUserData;
+
+/**
+ * APIResponse,API的返回结果
+ */
+@property (nonatomic, readonly) APIResponse *response;
+
+/** 取消相应的CGI请求任务 */
+- (void)cancel;
+
+@end
+
+@protocol TCAPIRequestDelegate <NSObject>
+@optional
+- (void)cgiRequest:(TCAPIRequest *)request didResponse:(APIResponse *)response;
+
+@end
+
diff --git a/platforms/ios/dlapp/Plugins/cordova-plugin-qqsdk/TencentOpenAPI.framework/Resources/ios_open_sdk_3.2.3.501_iphone_release b/platforms/ios/dlapp/Plugins/cordova-plugin-qqsdk/TencentOpenAPI.framework/Resources/ios_open_sdk_3.2.3.501_iphone_release
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/platforms/ios/dlapp/Plugins/cordova-plugin-qqsdk/TencentOpenAPI.framework/Resources/ios_open_sdk_3.2.3.501_iphone_release
diff --git a/platforms/ios/dlapp/Plugins/cordova-plugin-qqsdk/TencentOpenAPI.framework/TencentOpenAPI b/platforms/ios/dlapp/Plugins/cordova-plugin-qqsdk/TencentOpenAPI.framework/TencentOpenAPI
new file mode 100644
index 0000000..0b9753f
--- /dev/null
+++ b/platforms/ios/dlapp/Plugins/cordova-plugin-qqsdk/TencentOpenAPI.framework/TencentOpenAPI
Binary files differ
diff --git a/platforms/ios/dlapp/Resources/TencentOpenApi_IOS_Bundle.bundle/Info.plist b/platforms/ios/dlapp/Resources/TencentOpenApi_IOS_Bundle.bundle/Info.plist
new file mode 100644
index 0000000..893a59c
--- /dev/null
+++ b/platforms/ios/dlapp/Resources/TencentOpenApi_IOS_Bundle.bundle/Info.plist
Binary files differ
diff --git a/platforms/ios/dlapp/Resources/TencentOpenApi_IOS_Bundle.bundle/error.png b/platforms/ios/dlapp/Resources/TencentOpenApi_IOS_Bundle.bundle/error.png
new file mode 100644
index 0000000..b0ce461
--- /dev/null
+++ b/platforms/ios/dlapp/Resources/TencentOpenApi_IOS_Bundle.bundle/error.png
Binary files differ
diff --git a/platforms/ios/dlapp/Resources/TencentOpenApi_IOS_Bundle.bundle/local.html b/platforms/ios/dlapp/Resources/TencentOpenApi_IOS_Bundle.bundle/local.html
new file mode 100644
index 0000000..4a1cf42
--- /dev/null
+++ b/platforms/ios/dlapp/Resources/TencentOpenApi_IOS_Bundle.bundle/local.html
@@ -0,0 +1,73 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta http-equiv="X-UA-Compatible" content="IE=Edge">
+<meta charset="UTF-8">
+<title>社交渠道</title>
+<meta name="viewport" content="width=device-width,initial-scale=1.0, maximum-scale = 1.0,user-scalable=no" />
+<meta name="format-detection" content="telephone=no" />
+<meta name="apple-mobile-web-app-capable" content="yes" />
+<style>
+*{margin:0;padding:0}
+.header{text-align:center;height:44px;background:-webkit-gradient(linear,0 0,0 100%,from(#4c4c4c),to(#313131));border-top:#5b5b5b 1px solid;position:relative;line-height:44px}
+.header h1{color:#fff;font-weight:bold;font-size:20px}
+.header a{width:49px;height:29px;background-size:49px 29px;position:absolute;top:7px;display:block;text-indent:-999em;cursor:pointer}
+.header .back{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEkAAAAsCAYAAAApSpU1AAAFgElEQVR42u2bSWgsRRjH40XEg3rwIujBg6KCp4CH7AnZ933f9z0hK7kk8RCEhCwEMTmID81C8JIVQRJEfGQ5PEwOnpKDh+T0nomCGngolvUrpsaeYWbSnel5ODOv4Jfp/mrpqv9UffV1TyciwqYUGRn5keRjydeS7yWPgogfJOuSVsnrEXYn2ei7ku+Sk5NFZWWlaG1tFd3d3aK/vz9o6OnpES0tLaKoqEjIsfwu6bNToDzJbU1NjRgbGxPDw8NiYGAgqATSDA4OitHRUXXsEGvJDoEqJX8zcxCG2dPR0SHa2tqCkvb2dtHZ2Sl6e3vFyMiIKCwsRKgufwTKlTxFIKYqF2G6Njc3Bz2MA7EQTY7xRvLafQR6X/JHY2OjaoxGm5qaQgrEYlXk5OQgVJtVgV6W/FRRUaEEorFQE8goVFlZGSI9sCrS5wUFBaKrq0s1wmwKZZgMcsz7VgQqyszMVA4apRsaGkKe8vJyRHpoVqA3JL/U1dUpH4TKz0VyFegFybfEDuxmVK6vrw8LHD7JlEjdubm5aktEIGZTuFBaWnq3SLLAB0TUennV1taGFSUlJb5FkpkvcvNHQRw1lbj9CCfMiPQJy4ytngrV1dXPDEKMxcVFsbe390yv605xcbF3kWRGDPdlCMQMqqqq8gsCz5ubG7G7u+tiRwhscHJyIi4uLlQ5nW5vb8XU1JTXOlagntV+O250H3oS6BXJz3h2nBeFeQTiL4hA4lPb6DxCIA6Qh21jY0OJ46kd8km6jhm4BvWs9tlxk+tRpAcsMxw1BYk67eL4+Fh1Wp/TceO5GbRIVupwDepZ7a9HkaShOC0tTTlqBCKYshtCCX28s7Mjrq6uxMLCgld4bGGsTx2SlWsiEvWs9pVbMBeRHFH1NQqyxFhugUYP2FeijKc6+hwBPCXsxjLu7ZghPz//P5F0VJ2Xl6d2MgoQSNnF0NCQmJ+fd6LteiYZ8zQHBwdqsMbyug5Jn5+fn6tlbKzLOXZjGepZ7Td6GEXqycrKUo4agYgP7GR7e9vlW3a3M4i5uTmnnftDnC12b23pc8pgcy9jrOupjBmcIsk/bxFVs8RYh3YLdNcAr6+v1Sfp6OhICXR2dqZEYgb+X0RiqW2mpKSoDAKoQKEHqM8RCBvH6+vrShidODfThhbAvQx2X2XMwC5vXG6vSs5TU1NVABUo9AA5np2dVceTk5POfGaSTswmdllfbQACaBE02mYsg91qfx2Pb112tw8lf+KbiA8CwdbWlhogx3qpcYxQl5eXKm9tbU3BrMJGnrc2YH9/3ymKEey6DOfUs9rf7Oxsj3FSdVxcnIoPAoEeIMd0fHV11WlDsImJCWdZjhEKu7c2zKJFstpfJoy3iPvThIQEFSPYDd8uaXx83GnTQhHhu5fnh8Ll5WUXmxbJynW1SFb760skHpEcJSUlKe9uB319feL09FQNTn+ylDY3N50g1szMjEeor9ui7H0S9az2m2f6vp4CvCl5zI6Hh/eXpaUl1dGVlRV1Pj09LQ4PD112M1+J8rotLRI2s+gvxGq/MzIy7nyelMTjEtTEy/sLnfWV5wv3sgzYyrX5cnxd3xvp6emmHt+OxsbGKi8fjpgVSQWa7Hg4sXCDJyJmfy1RgWZiYqJyZOEEwbWVHydVoMmLWjizcIGNy7RIDqGqoqOjn4tkQqjPYmJilEMLB1g5ll6YcIj0kuRHHDlOLdTBD8vxfnGfl7jekfzGrUuoi8SqkWNtue/rgASaT1GaHSAU4bZMjvEJP7H5895kueSv+Ph45eBCjaioKERqsuMN3HTeeyYqDxVxmEEOgebtfJf7bcmu5B9CBJw6syvYoN8OcX7lPwMiApFkw+9JhiRfSb5h6wwyvpQ0evJB/wIFDhaTvqlwnwAAAABJRU5ErkJggg==);left:5px}
+</style>
+</head>
+<body>
+<div class="container" id="container">
+	<div class="header">
+		<h1 id="title"></h1>
+		<a href="javascript:void(0)" class="back" id="cancel">返回</a>
+		<a href="javascript:void(0)" style="display:none" id="confirm"></a>
+	</div>
+	<div id="main"></div>
+</div>
+<script>
+(function () {
+	try {
+		document.domain = "qq.com";
+	} catch (_) {
+		alert("invalid domain");
+	}
+	function getParam(name) {
+		var re = new RegExp("(?:\\?|#|&)" + name + "=([^&]*)(?:$|&|#)", "i"), m = re.exec(window.location.href);
+		var ret = m ? m[1] : "";
+		ret = ret.replace(/[+]/ig, "%20");
+		return ret;
+	}
+	var iface = getParam("iface");
+	switch (iface) {
+	case "AppChallenge":
+	case "AppInvitation":
+	case "AppGiftRequest":
+	case "SendStory": {
+		var appid = getParam("oauth_consumer_key"), type = getParam("type");
+		var url = "tencent" + appid + "://" + iface + "/cancel";
+		document.getElementById("cancel").addEventListener("click", function () {
+			setTimeout(function () {
+				window.open(url, "_self");
+			}, 0);
+		}, false);
+		document.getElementById("title").innerHTML = {
+			AppChallenge : type == "pk" ? "发送挑战" : "发送炫耀",
+			AppInvitation : "发送应用邀请",
+			AppGiftRequest : type == "request" ? "发送应用请求" : "发送免费礼物",
+			SendStory : "发送分享"
+		}[iface];
+		document.write('<script type="text/javascript" src="https://qzonestyle.gtimg.cn/open/mobile/' + {
+			AppChallenge : "brag_ios/js/sdk_brag.js",
+			AppInvitation : "invite_ios/js/sdk_invite.js",
+			AppGiftRequest : "request_ios/js/sdk_request.js",
+			SendStory : "story_ios/js/sdk_story.js"
+		}[iface] + '"><\/script>');
+		break;
+	}
+	default:
+		return;
+	}
+})();
+</script>
+</body>
+</html>
diff --git a/platforms/ios/dlapp/Resources/TencentOpenApi_IOS_Bundle.bundle/qqicon.png b/platforms/ios/dlapp/Resources/TencentOpenApi_IOS_Bundle.bundle/qqicon.png
new file mode 100644
index 0000000..65c743c
--- /dev/null
+++ b/platforms/ios/dlapp/Resources/TencentOpenApi_IOS_Bundle.bundle/qqicon.png
Binary files differ
diff --git a/platforms/ios/dlapp/Resources/TencentOpenApi_IOS_Bundle.bundle/success.png b/platforms/ios/dlapp/Resources/TencentOpenApi_IOS_Bundle.bundle/success.png
new file mode 100644
index 0000000..df3899d
--- /dev/null
+++ b/platforms/ios/dlapp/Resources/TencentOpenApi_IOS_Bundle.bundle/success.png
Binary files differ
diff --git a/platforms/ios/dlapp/config.xml b/platforms/ios/dlapp/config.xml
index 8fb53bc..66cd47a 100755
--- a/platforms/ios/dlapp/config.xml
+++ b/platforms/ios/dlapp/config.xml
@@ -71,6 +71,9 @@
         <param name="ios-package" value="ScreenshotBlocker" />
         <param name="onload" value="true" />
     </feature>
+    <feature name="QQSDK">
+        <param name="ios-package" value="CDVQQSDK" />
+    </feature>
     <name short="大理智警">dlapp</name>
     <description>
         A sample Apache Cordova application that responds to the deviceready event.
@@ -114,6 +117,7 @@
     <preference name="StatusBarOverlaysWebView" value="true" />
     <preference name="StatusBarStyle" value="lightcontent" />
     <preference name="CameraUsesGeolocation" value="false" />
+    <preference name="QQ_APP_ID" value="101885581" />
     <preference name="AutoHideSplashScreen" value="true" />
     <preference name="SplashScreenDelay" value="0" />
     <preference name="SplashShowOnlyFirstTime" value="true" />
diff --git a/platforms/ios/dlapp/dlapp-Info.plist b/platforms/ios/dlapp/dlapp-Info.plist
index de17430..07026c3 100644
--- a/platforms/ios/dlapp/dlapp-Info.plist
+++ b/platforms/ios/dlapp/dlapp-Info.plist
@@ -65,6 +65,61 @@
 		<string>UIInterfaceOrientationPortrait</string>
 		<string>UIInterfaceOrientationPortraitUpsideDown</string>
 	</array>
+	<key>CFBundleURLTypes</key>
+	<array>
+		<dict>
+			<key>CFBundleTypeRole</key>
+			<string>Editor</string>
+			<key>CFBundleURLName</key>
+			<string>tencentopenapi</string>
+			<key>CFBundleURLSchemes</key>
+			<array>
+				<string>tencent101885581</string>
+			</array>
+		</dict>
+	</array>
+	<key>LSApplicationQueriesSchemes</key>
+	<array>
+		<string>mqqapi</string>
+		<string>mqq</string>
+		<string>mqqOpensdkSSoLogin</string>
+		<string>mqqconnect</string>
+		<string>mqqopensdkdataline</string>
+		<string>mqqopensdkgrouptribeshare</string>
+		<string>mqqopensdkfriend</string>
+		<string>mqqopensdkapi</string>
+		<string>mqqopensdkapiV2</string>
+		<string>mqqopensdkapiV3</string>
+		<string>mqqopensdkapiV4</string>
+		<string>mqzoneopensdk</string>
+		<string>wtloginmqq</string>
+		<string>wtloginmqq2</string>
+		<string>mqqwpa</string>
+		<string>mqzone</string>
+		<string>mqzonev2</string>
+		<string>mqzoneshare</string>
+		<string>wtloginqzone</string>
+		<string>mqzonewx</string>
+		<string>mqzoneopensdkapiV2</string>
+		<string>mqzoneopensdkapi19</string>
+		<string>mqzoneopensdkapi</string>
+		<string>mqqgamebindinggroup</string>
+		<string>tencentapi.qq.reqContent</string>
+		<string>tencentapi.qzone.reqContent</string>
+		<string>tim</string>
+		<string>timapi</string>
+		<string>timopensdkfriend</string>
+		<string>timwpa</string>
+		<string>timgamebindinggroup</string>
+		<string>timapiwallet</string>
+		<string>timOpensdkSSoLogin</string>
+		<string>wtlogintim</string>
+		<string>timopensdkgrouptribeshare</string>
+		<string>timopensdkapiV4</string>
+		<string>timopensdkdataline</string>
+		<string>wtlogintimV1</string>
+		<string>timapiV1</string>
+	</array>
 	<key>NSCameraUsageDescription</key>
 	<string>APP需要使用您的相机权限,没有该权限将无法完成扫一扫功能</string>
 	<key>NSPhotoLibraryUsageDescription</key>
diff --git a/platforms/ios/frameworks.json b/platforms/ios/frameworks.json
index 71928cb..d516bf0 100644
--- a/platforms/ios/frameworks.json
+++ b/platforms/ios/frameworks.json
@@ -1,18 +1,21 @@
 {
-    "Security.framework": 3,
-    "SystemConfiguration.framework": 2,
+    "Security.framework": 4,
+    "SystemConfiguration.framework": 3,
     "LocalAuthentication.framework": 1,
     "ImageIO.framework": 1,
     "CoreLocation.framework": 1,
     "AVFoundation.framework": 1,
     "CFNetwork.framework": 1,
     "CoreFoundation.framework": 1,
-    "CoreTelephony.framework": 1,
+    "CoreTelephony.framework": 2,
     "Foundation.framework": 1,
     "UIKit.framework": 2,
-    "libz.tbd": 1,
+    "libz.tbd": 2,
     "AdSupport.framework": 1,
     "UserNotifications.framework": 1,
     "libresolv.tbd": 1,
-    "WebKit.framework": 1
+    "WebKit.framework": 1,
+    "libiconv.tbd": 1,
+    "libsqlite3.tbd": 1,
+    "libstdc++.tbd": 1
 }
\ No newline at end of file
diff --git a/platforms/ios/ios.json b/platforms/ios/ios.json
index 2cc797d..543eb31 100644
--- a/platforms/ios/ios.json
+++ b/platforms/ios/ios.json
@@ -87,6 +87,14 @@
             {
               "xml": "<feature name=\"screenshotName\"><param name=\"ios-package\" value=\"ScreenshotBlocker\" /><param name=\"onload\" value=\"true\" /></feature>",
               "count": 1
+            },
+            {
+              "xml": "<feature name=\"QQSDK\"><param name=\"ios-package\" value=\"CDVQQSDK\" /></feature>",
+              "count": 1
+            },
+            {
+              "xml": "<preference name=\"QQ_APP_ID\" value=\"101885581\" />",
+              "count": 1
             }
           ]
         }
@@ -120,6 +128,18 @@
               "mode": "merge",
               "id": "config.xml"
             }
+          ],
+          "CFBundleURLTypes": [
+            {
+              "xml": "<array><dict><key>CFBundleTypeRole</key><string>Editor</string><key>CFBundleURLName</key><string>tencentopenapi</string><key>CFBundleURLSchemes</key><array><string>tencent101885581</string></array></dict></array>",
+              "count": 1
+            }
+          ],
+          "LSApplicationQueriesSchemes": [
+            {
+              "xml": "<array><string>mqqapi</string><string>mqq</string><string>mqqOpensdkSSoLogin</string><string>mqqconnect</string><string>mqqopensdkdataline</string><string>mqqopensdkgrouptribeshare</string><string>mqqopensdkfriend</string><string>mqqopensdkapi</string><string>mqqopensdkapiV2</string><string>mqqopensdkapiV3</string><string>mqqopensdkapiV4</string><string>mqzoneopensdk</string><string>wtloginmqq</string><string>wtloginmqq2</string><string>mqqwpa</string><string>mqzone</string><string>mqzonev2</string><string>mqzoneshare</string><string>wtloginqzone</string><string>mqzonewx</string><string>mqzoneopensdkapiV2</string><string>mqzoneopensdkapi19</string><string>mqzoneopensdkapi</string><string>mqzoneopensdk</string><string>mqqgamebindinggroup</string><string>tencentapi.qq.reqContent</string><string>tencentapi.qzone.reqContent</string><string>tim</string><string>timapi</string><string>timopensdkfriend</string><string>timwpa</string><string>timgamebindinggroup</string><string>timapiwallet</string><string>timOpensdkSSoLogin</string><string>wtlogintim</string><string>timopensdkgrouptribeshare</string><string>timopensdkapiV4</string><string>timgamebindinggroup</string><string>timopensdkdataline</string><string>wtlogintimV1</string><string>timapiV1</string></array>",
+              "count": 1
+            }
           ]
         }
       },
@@ -216,6 +236,10 @@
     },
     "cordova-plugin-prevent-screenshot-coffice": {
       "PACKAGE_NAME": "$(PRODUCT_BUNDLE_IDENTIFIER)"
+    },
+    "cordova-plugin-qqsdk": {
+      "QQ_APP_ID": "101885581",
+      "PACKAGE_NAME": "$(PRODUCT_BUNDLE_IDENTIFIER)"
     }
   },
   "dependent_plugins": {},
@@ -587,6 +611,14 @@
       "clobbers": [
         "window.plugins.preventscreenshot"
       ]
+    },
+    {
+      "id": "cordova-plugin-qqsdk.QQSDK",
+      "file": "plugins/cordova-plugin-qqsdk/www/qq.js",
+      "pluginId": "cordova-plugin-qqsdk",
+      "clobbers": [
+        "QQSDK"
+      ]
     }
   ],
   "plugin_metadata": {
@@ -608,6 +640,7 @@
     "cordova-plugin-wkwebview-engine": "1.2.1",
     "cordova-plugin-brightness": "0.1.5",
     "cordova-plugin-fingerprint-aio": "3.0.1",
-    "cordova-plugin-prevent-screenshot-coffice": "1.0.1"
+    "cordova-plugin-prevent-screenshot-coffice": "1.0.1",
+    "cordova-plugin-qqsdk": "0.9.7"
   }
 }
diff --git a/platforms/ios/platform_www/cordova_plugins.js b/platforms/ios/platform_www/cordova_plugins.js
index b4d865e..3e450c8 100644
--- a/platforms/ios/platform_www/cordova_plugins.js
+++ b/platforms/ios/platform_www/cordova_plugins.js
@@ -367,6 +367,14 @@
       "clobbers": [
         "window.plugins.preventscreenshot"
       ]
+    },
+    {
+      "id": "cordova-plugin-qqsdk.QQSDK",
+      "file": "plugins/cordova-plugin-qqsdk/www/qq.js",
+      "pluginId": "cordova-plugin-qqsdk",
+      "clobbers": [
+        "QQSDK"
+      ]
     }
   ];
   module.exports.metadata = {
@@ -388,6 +396,7 @@
     "cordova-plugin-wkwebview-engine": "1.2.1",
     "cordova-plugin-brightness": "0.1.5",
     "cordova-plugin-fingerprint-aio": "3.0.1",
-    "cordova-plugin-prevent-screenshot-coffice": "1.0.1"
+    "cordova-plugin-prevent-screenshot-coffice": "1.0.1",
+    "cordova-plugin-qqsdk": "0.9.7"
   };
 });
\ No newline at end of file
diff --git a/platforms/ios/platform_www/plugins/cordova-plugin-qqsdk/www/qq.js b/platforms/ios/platform_www/plugins/cordova-plugin-qqsdk/www/qq.js
new file mode 100644
index 0000000..cedb4c0
--- /dev/null
+++ b/platforms/ios/platform_www/plugins/cordova-plugin-qqsdk/www/qq.js
@@ -0,0 +1,43 @@
+cordova.define("cordova-plugin-qqsdk.QQSDK", function(require, exports, module) {
+
+var cordova = require('cordova');
+module.exports = {
+	Scene: {
+        QQ:  0, // QQ 好友
+        QQZone: 1, // QQ 空间
+        Favorite: 2  // 收藏
+    },
+    ClientType: {
+        QQ:  0, // QQ 手机客户端
+        TIM: 1 // TIM 客户端
+    },
+	ssoLogin:function(successCallback, errorCallback, args){
+		if(args === undefined) {
+            args = {}
+        }
+		cordova.exec(successCallback, errorCallback, "QQSDK", "ssoLogin",[args]);
+	},
+	logout:function(successCallback, errorCallback){
+		cordova.exec(successCallback, errorCallback, "QQSDK", "logout", []);
+	},
+	checkClientInstalled:function(successCallback, errorCallback, args){
+		if(args === undefined) {
+            args = {}
+        }
+		cordova.exec(successCallback, errorCallback, "QQSDK", "checkClientInstalled", [args]);
+	},
+	shareText:function(successCallback, errorCallback, args){
+		cordova.exec(successCallback, errorCallback, "QQSDK", "shareText", [args]);
+	},
+	shareImage:function(successCallback, errorCallback, args){
+		cordova.exec(successCallback, errorCallback, "QQSDK", "shareImage", [args]);
+	},
+	shareNews:function(successCallback, errorCallback, args){
+		cordova.exec(successCallback, errorCallback, "QQSDK", "shareNews", [args]);
+	},
+	shareAudio:function(successCallback, errorCallback, args){
+		cordova.exec(successCallback, errorCallback, "QQSDK", "shareAudio", [args]);
+	},
+};
+
+});