浏览代码

1.QQ 分享功能实现

huangxiaodong 1 年之前
父节点
当前提交
d05ff97283

+ 10 - 1
创维盒子/jiSuanQi_Info.plist

@@ -35,12 +35,21 @@
 				<string>wx9f3e477e0df9bf03</string>
 			</array>
 		</dict>
+		<dict>
+			<key>CFBundleTypeRole</key>
+			<string>Editor</string>
+			<key>CFBundleURLName</key>
+			<string>tencentopenapi</string>
+			<key>CFBundleURLSchemes</key>
+			<array>
+				<string>tencent102085690</string>
+			</array>
+		</dict>
 	</array>
 	<key>ITSAppUsesNonExemptEncryption</key>
 	<false/>
 	<key>LSApplicationQueriesSchemes</key>
 	<array>
-		<string>weixinURLParamsAPI</string>
 		<string>alipay </string>
 		<string>alipayshare</string>
 		<string>wechat</string>

+ 24 - 0
创维盒子/双子星云手机.xcodeproj/project.pbxproj

@@ -201,6 +201,14 @@
 		6B304E992BEF6058004F5580 /* customShareManageTool.h in Headers */ = {isa = PBXBuildFile; fileRef = 6B304E962BEF6058004F5580 /* customShareManageTool.h */; };
 		6B304E9A2BEF6058004F5580 /* customShareManageTool.m in Sources */ = {isa = PBXBuildFile; fileRef = 6B304E972BEF6058004F5580 /* customShareManageTool.m */; };
 		6B304E9B2BEF6058004F5580 /* customShareManageTool.m in Sources */ = {isa = PBXBuildFile; fileRef = 6B304E972BEF6058004F5580 /* customShareManageTool.m */; };
+		6B304E9D2BEF687A004F5580 /* TencentOpenAPI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6B304E9C2BEF6879004F5580 /* TencentOpenAPI.framework */; };
+		6B304E9E2BEF687A004F5580 /* TencentOpenAPI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6B304E9C2BEF6879004F5580 /* TencentOpenAPI.framework */; };
+		6B304EA02BEF68DB004F5580 /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6B304E9F2BEF68DB004F5580 /* SystemConfiguration.framework */; };
+		6B304EA22BEF68F1004F5580 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6B304EA12BEF68F1004F5580 /* CoreGraphics.framework */; };
+		6B304EA42BEF6911004F5580 /* CoreTelephony.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6B304EA32BEF6911004F5580 /* CoreTelephony.framework */; };
+		6B304EA52BEF6944004F5580 /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6B304E9F2BEF68DB004F5580 /* SystemConfiguration.framework */; };
+		6B304EA62BEF6954004F5580 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6B304EA12BEF68F1004F5580 /* CoreGraphics.framework */; };
+		6B304EA72BEF6967004F5580 /* CoreTelephony.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6B304EA32BEF6911004F5580 /* CoreTelephony.framework */; };
 		6B3A4B152B6F69A500F74679 /* cloudPhoneCommonModel.h in Headers */ = {isa = PBXBuildFile; fileRef = 6B3A4B132B6F69A500F74679 /* cloudPhoneCommonModel.h */; };
 		6B3A4B162B6F69A500F74679 /* cloudPhoneCommonModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 6B3A4B142B6F69A500F74679 /* cloudPhoneCommonModel.m */; };
 		6B3F96342AD2A15A008E349E /* netWorkManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 6B3F96322AD2A15A008E349E /* netWorkManager.h */; };
@@ -1035,6 +1043,10 @@
 		6B21709F2B15D39900656670 /* privacyModeTipViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = privacyModeTipViewController.m; sourceTree = "<group>"; };
 		6B304E962BEF6058004F5580 /* customShareManageTool.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = customShareManageTool.h; sourceTree = "<group>"; };
 		6B304E972BEF6058004F5580 /* customShareManageTool.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = customShareManageTool.m; sourceTree = "<group>"; };
+		6B304E9C2BEF6879004F5580 /* TencentOpenAPI.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = TencentOpenAPI.framework; sourceTree = "<group>"; };
+		6B304E9F2BEF68DB004F5580 /* SystemConfiguration.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SystemConfiguration.framework; path = System/Library/Frameworks/SystemConfiguration.framework; sourceTree = SDKROOT; };
+		6B304EA12BEF68F1004F5580 /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; };
+		6B304EA32BEF6911004F5580 /* CoreTelephony.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreTelephony.framework; path = System/Library/Frameworks/CoreTelephony.framework; sourceTree = SDKROOT; };
 		6B3A4B132B6F69A500F74679 /* cloudPhoneCommonModel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = cloudPhoneCommonModel.h; sourceTree = "<group>"; };
 		6B3A4B142B6F69A500F74679 /* cloudPhoneCommonModel.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = cloudPhoneCommonModel.m; sourceTree = "<group>"; };
 		6B3F96322AD2A15A008E349E /* netWorkManager.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = netWorkManager.h; sourceTree = "<group>"; };
@@ -1316,6 +1328,9 @@
 			isa = PBXFrameworksBuildPhase;
 			buildActionMask = 2147483647;
 			files = (
+				6B304EA72BEF6967004F5580 /* CoreTelephony.framework in Frameworks */,
+				6B304EA62BEF6954004F5580 /* CoreGraphics.framework in Frameworks */,
+				6B304EA52BEF6944004F5580 /* SystemConfiguration.framework in Frameworks */,
 				6BD507DC2B9576A4006E7CB0 /* libc++.tbd in Frameworks */,
 				6BD507DD2B9576A4006E7CB0 /* libxml2.tbd in Frameworks */,
 				6BD507DE2B9576A4006E7CB0 /* libz.tbd in Frameworks */,
@@ -1326,6 +1341,7 @@
 				6BD507E32B9576A4006E7CB0 /* libiconv.tbd in Frameworks */,
 				6BD507E42B9576A4006E7CB0 /* libc++abi.tbd in Frameworks */,
 				6BD507E52B9576A4006E7CB0 /* OpenGLES.framework in Frameworks */,
+				6B304E9E2BEF687A004F5580 /* TencentOpenAPI.framework in Frameworks */,
 				6BD507E62B9576A4006E7CB0 /* AudioToolbox.framework in Frameworks */,
 				6BD507E72B9576A4006E7CB0 /* RCCloudPhoneSDK.framework in Frameworks */,
 				6BD507E82B9576A4006E7CB0 /* AVFoundation.framework in Frameworks */,
@@ -1337,7 +1353,11 @@
 			isa = PBXFrameworksBuildPhase;
 			buildActionMask = 2147483647;
 			files = (
+				6B304EA42BEF6911004F5580 /* CoreTelephony.framework in Frameworks */,
+				6B304EA22BEF68F1004F5580 /* CoreGraphics.framework in Frameworks */,
+				6B304EA02BEF68DB004F5580 /* SystemConfiguration.framework in Frameworks */,
 				183AE69B2A8C9D5400B11CB0 /* libc++.tbd in Frameworks */,
+				6B304E9D2BEF687A004F5580 /* TencentOpenAPI.framework in Frameworks */,
 				183AE6992A8C9D3C00B11CB0 /* libxml2.tbd in Frameworks */,
 				183AE68D2A8C9C1A00B11CB0 /* libz.tbd in Frameworks */,
 				183AE6972A8C9D0C00B11CB0 /* Security.framework in Frameworks */,
@@ -1759,6 +1779,9 @@
 		24696DA8F8A620ECEA9ED985 /* Frameworks */ = {
 			isa = PBXGroup;
 			children = (
+				6B304EA32BEF6911004F5580 /* CoreTelephony.framework */,
+				6B304EA12BEF68F1004F5580 /* CoreGraphics.framework */,
+				6B304E9F2BEF68DB004F5580 /* SystemConfiguration.framework */,
 				183AE69A2A8C9D5400B11CB0 /* libc++.tbd */,
 				183AE6982A8C9D3C00B11CB0 /* libxml2.tbd */,
 				183AE6962A8C9D0C00B11CB0 /* Security.framework */,
@@ -2099,6 +2122,7 @@
 		A003F6B727D841FF00715CBF /* Vendor */ = {
 			isa = PBXGroup;
 			children = (
+				6B304E9C2BEF6879004F5580 /* TencentOpenAPI.framework */,
 				6BBB35DF2AE935C000E4A59B /* DDYLanguageTool */,
 				6BBB35D42AE7645200E4A59B /* BackgroundKeepAlive */,
 				6BF52C8F2AD5546500A617DB /* pingTool */,

二进制
创维盒子/双子星云手机.xcworkspace/xcuserdata/xdh.xcuserdatad/UserInterfaceState.xcuserstate


+ 175 - 49
创维盒子/双子星云手机.xcworkspace/xcuserdata/xdh.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist

@@ -98,38 +98,6 @@
             endingLineNumber = "250"
             landmarkName = "-keyBoardBtnPressed:"
             landmarkType = "7">
-            <Locations>
-               <Location
-                  uuid = "42649481-F4EB-4835-948C-927A74B4AE3B - e76e557224adabf6"
-                  shouldBeEnabled = "Yes"
-                  ignoreCount = "0"
-                  continueAfterRunningActions = "No"
-                  symbolName = "-[ModifyPWDFirstViewController keyBoardBtnPressed:]"
-                  moduleName = "&#x9690;&#x79c1;&#x4fdd;&#x62a4;"
-                  usesParentBreakpointCondition = "Yes"
-                  urlString = "file:///Users/xdh/Desktop/%E5%88%9B%E7%BB%B4%E7%9B%92%E5%AD%90/%E5%88%9B%E7%BB%B4%E7%9B%92%E5%AD%90/%E5%8F%8C%E5%AD%90%E6%98%9F%E4%BA%91%E6%89%8B%E6%9C%BA/Class/Set/ModifyPWD/ModifyPWDFirstViewController.m"
-                  startingColumnNumber = "9223372036854775807"
-                  endingColumnNumber = "9223372036854775807"
-                  startingLineNumber = "249"
-                  endingLineNumber = "249"
-                  offsetFromSymbolStart = "252">
-               </Location>
-               <Location
-                  uuid = "42649481-F4EB-4835-948C-927A74B4AE3B - 78075b6bdcf499ff"
-                  shouldBeEnabled = "Yes"
-                  ignoreCount = "0"
-                  continueAfterRunningActions = "No"
-                  symbolName = "__51-[ModifyPWDFirstViewController keyBoardBtnPressed:]_block_invoke"
-                  moduleName = "&#x9690;&#x79c1;&#x4fdd;&#x62a4;"
-                  usesParentBreakpointCondition = "Yes"
-                  urlString = "file:///Users/xdh/Desktop/%E5%88%9B%E7%BB%B4%E7%9B%92%E5%AD%90/%E5%88%9B%E7%BB%B4%E7%9B%92%E5%AD%90/%E5%8F%8C%E5%AD%90%E6%98%9F%E4%BA%91%E6%89%8B%E6%9C%BA/Class/Set/ModifyPWD/ModifyPWDFirstViewController.m"
-                  startingColumnNumber = "9223372036854775807"
-                  endingColumnNumber = "9223372036854775807"
-                  startingLineNumber = "250"
-                  endingLineNumber = "250"
-                  offsetFromSymbolStart = "28">
-               </Location>
-            </Locations>
          </BreakpointContent>
       </BreakpointProxy>
       <BreakpointProxy
@@ -190,8 +158,8 @@
             filePath = "&#x53cc;&#x5b50;&#x661f;&#x4e91;&#x624b;&#x673a;/AppDelegate/AppDelegate.m"
             startingColumnNumber = "9223372036854775807"
             endingColumnNumber = "9223372036854775807"
-            startingLineNumber = "69"
-            endingLineNumber = "69"
+            startingLineNumber = "72"
+            endingLineNumber = "72"
             landmarkName = "-application:didFinishLaunchingWithOptions:"
             landmarkType = "7">
          </BreakpointContent>
@@ -318,43 +286,201 @@
             filePath = "&#x53cc;&#x5b50;&#x661f;&#x4e91;&#x624b;&#x673a;/Class/Set/MySetViewController.m"
             startingColumnNumber = "9223372036854775807"
             endingColumnNumber = "9223372036854775807"
-            startingLineNumber = "827"
-            endingLineNumber = "827"
-            landmarkName = "-checkFileTransferTask"
+            startingLineNumber = "841"
+            endingLineNumber = "841"
+            landmarkName = "MySetViewController"
+            landmarkType = "3">
+         </BreakpointContent>
+      </BreakpointProxy>
+      <BreakpointProxy
+         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
+         <BreakpointContent
+            uuid = "57998660-3D5C-4C0F-BDDB-3F0DBD26A91D"
+            shouldBeEnabled = "Yes"
+            ignoreCount = "0"
+            continueAfterRunningActions = "No"
+            filePath = "&#x53cc;&#x5b50;&#x661f;&#x4e91;&#x624b;&#x673a;/CloudPlayer/View/PlayerView.m"
+            startingColumnNumber = "9223372036854775807"
+            endingColumnNumber = "9223372036854775807"
+            startingLineNumber = "379"
+            endingLineNumber = "379"
+            landmarkName = "-setLanMas_makeWithImageRate:isOpenVirtual:isUsageMode:"
             landmarkType = "7">
             <Locations>
                <Location
-                  uuid = "6444AD5F-A95B-462B-8683-9E4277767CB4 - 60b82a6a644e906f"
+                  uuid = "57998660-3D5C-4C0F-BDDB-3F0DBD26A91D - 907b8143c8ae381e"
                   shouldBeEnabled = "Yes"
                   ignoreCount = "0"
                   continueAfterRunningActions = "No"
-                  symbolName = "-[MySetViewController checkFileTransferTask]"
+                  symbolName = "-[PlayerView setLanMas_makeWithImageRate:isOpenVirtual:isUsageMode:]"
                   moduleName = "&#x9690;&#x79c1;&#x4fdd;&#x62a4;"
                   usesParentBreakpointCondition = "Yes"
-                  urlString = "file:///Users/xdh/Desktop/%E5%88%9B%E7%BB%B4%E7%9B%92%E5%AD%90/%E5%88%9B%E7%BB%B4%E7%9B%92%E5%AD%90/%E5%8F%8C%E5%AD%90%E6%98%9F%E4%BA%91%E6%89%8B%E6%9C%BA/Class/Set/MySetViewController.m"
+                  urlString = "file:///Users/xdh/Desktop/%E5%88%9B%E7%BB%B4%E7%9B%92%E5%AD%90/%E5%88%9B%E7%BB%B4%E7%9B%92%E5%AD%90/%E5%8F%8C%E5%AD%90%E6%98%9F%E4%BA%91%E6%89%8B%E6%9C%BA/CloudPlayer/View/PlayerView.m"
                   startingColumnNumber = "9223372036854775807"
                   endingColumnNumber = "9223372036854775807"
-                  startingLineNumber = "830"
-                  endingLineNumber = "830"
-                  offsetFromSymbolStart = "44">
+                  startingLineNumber = "379"
+                  endingLineNumber = "379">
                </Location>
                <Location
-                  uuid = "6444AD5F-A95B-462B-8683-9E4277767CB4 - e030e662ad42a870"
+                  uuid = "57998660-3D5C-4C0F-BDDB-3F0DBD26A91D - 2130b57f8bffa67a"
                   shouldBeEnabled = "Yes"
                   ignoreCount = "0"
                   continueAfterRunningActions = "No"
-                  symbolName = "__44-[MySetViewController checkFileTransferTask]_block_invoke"
+                  symbolName = "__68-[PlayerView setLanMas_makeWithImageRate:isOpenVirtual:isUsageMode:]_block_invoke_2"
                   moduleName = "&#x9690;&#x79c1;&#x4fdd;&#x62a4;"
                   usesParentBreakpointCondition = "Yes"
-                  urlString = "file:///Users/xdh/Desktop/%E5%88%9B%E7%BB%B4%E7%9B%92%E5%AD%90/%E5%88%9B%E7%BB%B4%E7%9B%92%E5%AD%90/%E5%8F%8C%E5%AD%90%E6%98%9F%E4%BA%91%E6%89%8B%E6%9C%BA/Class/Set/MySetViewController.m"
+                  urlString = "file:///Users/xdh/Desktop/%E5%88%9B%E7%BB%B4%E7%9B%92%E5%AD%90/%E5%88%9B%E7%BB%B4%E7%9B%92%E5%AD%90/%E5%8F%8C%E5%AD%90%E6%98%9F%E4%BA%91%E6%89%8B%E6%9C%BA/CloudPlayer/View/PlayerView.m"
                   startingColumnNumber = "9223372036854775807"
                   endingColumnNumber = "9223372036854775807"
-                  startingLineNumber = "831"
-                  endingLineNumber = "831"
-                  offsetFromSymbolStart = "40">
+                  startingLineNumber = "380"
+                  endingLineNumber = "380">
                </Location>
             </Locations>
          </BreakpointContent>
       </BreakpointProxy>
+      <BreakpointProxy
+         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
+         <BreakpointContent
+            uuid = "D92195D1-CA82-4378-A2CE-634F99BBB202"
+            shouldBeEnabled = "Yes"
+            ignoreCount = "0"
+            continueAfterRunningActions = "No"
+            filePath = "&#x53cc;&#x5b50;&#x661f;&#x4e91;&#x624b;&#x673a;/CloudPlayer/View/PlayerView.m"
+            startingColumnNumber = "9223372036854775807"
+            endingColumnNumber = "9223372036854775807"
+            startingLineNumber = "391"
+            endingLineNumber = "391"
+            landmarkName = "-setLanMas_makeWithImageRate:isOpenVirtual:isUsageMode:"
+            landmarkType = "7">
+         </BreakpointContent>
+      </BreakpointProxy>
+      <BreakpointProxy
+         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
+         <BreakpointContent
+            uuid = "F2E2AD93-ED57-4DDC-B12B-025637DAF6CC"
+            shouldBeEnabled = "No"
+            ignoreCount = "0"
+            continueAfterRunningActions = "No"
+            filePath = "&#x53cc;&#x5b50;&#x661f;&#x4e91;&#x624b;&#x673a;/Helpers/customShareManageTool.m"
+            startingColumnNumber = "9223372036854775807"
+            endingColumnNumber = "9223372036854775807"
+            startingLineNumber = "96"
+            endingLineNumber = "96"
+            landmarkName = "-shareWechatByType:withShareUrl:withShareTitle:withShareContent:"
+            landmarkType = "7">
+         </BreakpointContent>
+      </BreakpointProxy>
+      <BreakpointProxy
+         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
+         <BreakpointContent
+            uuid = "01BD27B1-DF01-4F9C-99B4-EC046601FCAF"
+            shouldBeEnabled = "No"
+            ignoreCount = "0"
+            continueAfterRunningActions = "No"
+            filePath = "&#x53cc;&#x5b50;&#x661f;&#x4e91;&#x624b;&#x673a;/Helpers/customShareManageTool.m"
+            startingColumnNumber = "9223372036854775807"
+            endingColumnNumber = "9223372036854775807"
+            startingLineNumber = "114"
+            endingLineNumber = "114"
+            landmarkName = "-shareWechatByType:withShareUrl:withShareTitle:withShareContent:"
+            landmarkType = "7">
+         </BreakpointContent>
+      </BreakpointProxy>
+      <BreakpointProxy
+         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
+         <BreakpointContent
+            uuid = "CF0791BF-FC70-41D2-BC99-F18BA9DED973"
+            shouldBeEnabled = "Yes"
+            ignoreCount = "0"
+            continueAfterRunningActions = "No"
+            filePath = "&#x53cc;&#x5b50;&#x661f;&#x4e91;&#x624b;&#x673a;/AppDelegate/AppDelegate.m"
+            startingColumnNumber = "9223372036854775807"
+            endingColumnNumber = "9223372036854775807"
+            startingLineNumber = "193"
+            endingLineNumber = "193"
+            landmarkName = "-application:continueUserActivity:restorationHandler:"
+            landmarkType = "7">
+         </BreakpointContent>
+      </BreakpointProxy>
+      <BreakpointProxy
+         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
+         <BreakpointContent
+            uuid = "9799AEC1-0433-4260-991F-5461E9262D00"
+            shouldBeEnabled = "Yes"
+            ignoreCount = "0"
+            continueAfterRunningActions = "No"
+            filePath = "&#x53cc;&#x5b50;&#x661f;&#x4e91;&#x624b;&#x673a;/AppDelegate/AppDelegate.m"
+            startingColumnNumber = "9223372036854775807"
+            endingColumnNumber = "9223372036854775807"
+            startingLineNumber = "167"
+            endingLineNumber = "167"
+            landmarkName = "-application:handleOpenURL:"
+            landmarkType = "7">
+         </BreakpointContent>
+      </BreakpointProxy>
+      <BreakpointProxy
+         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
+         <BreakpointContent
+            uuid = "E8162D86-6B5D-491D-8A32-39C38F3F3FB2"
+            shouldBeEnabled = "Yes"
+            ignoreCount = "0"
+            continueAfterRunningActions = "No"
+            filePath = "&#x53cc;&#x5b50;&#x661f;&#x4e91;&#x624b;&#x673a;/AppDelegate/AppDelegate.m"
+            startingColumnNumber = "9223372036854775807"
+            endingColumnNumber = "9223372036854775807"
+            startingLineNumber = "177"
+            endingLineNumber = "177"
+            landmarkName = "-application:openURL:sourceApplication:annotation:"
+            landmarkType = "7">
+         </BreakpointContent>
+      </BreakpointProxy>
+      <BreakpointProxy
+         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
+         <BreakpointContent
+            uuid = "51A69CE1-9181-4BA9-8E69-3758E74F5FCD"
+            shouldBeEnabled = "Yes"
+            ignoreCount = "0"
+            continueAfterRunningActions = "No"
+            filePath = "&#x53cc;&#x5b50;&#x661f;&#x4e91;&#x624b;&#x673a;/AppDelegate/SceneDelegate.m"
+            startingColumnNumber = "9223372036854775807"
+            endingColumnNumber = "9223372036854775807"
+            startingLineNumber = "432"
+            endingLineNumber = "432"
+            landmarkName = "-scene:openURLContexts:"
+            landmarkType = "7">
+         </BreakpointContent>
+      </BreakpointProxy>
+      <BreakpointProxy
+         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
+         <BreakpointContent
+            uuid = "AF79BE94-8A1B-448B-8B96-A9606CFFC280"
+            shouldBeEnabled = "Yes"
+            ignoreCount = "0"
+            continueAfterRunningActions = "No"
+            filePath = "&#x53cc;&#x5b50;&#x661f;&#x4e91;&#x624b;&#x673a;/AppDelegate/AppDelegate.m"
+            startingColumnNumber = "9223372036854775807"
+            endingColumnNumber = "9223372036854775807"
+            startingLineNumber = "174"
+            endingLineNumber = "174"
+            landmarkName = "-application:openURL:sourceApplication:annotation:"
+            landmarkType = "7">
+         </BreakpointContent>
+      </BreakpointProxy>
+      <BreakpointProxy
+         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
+         <BreakpointContent
+            uuid = "4F453F96-CCA2-4869-AC7E-4F1A38C75B78"
+            shouldBeEnabled = "Yes"
+            ignoreCount = "0"
+            continueAfterRunningActions = "No"
+            filePath = "&#x53cc;&#x5b50;&#x661f;&#x4e91;&#x624b;&#x673a;/AppDelegate/AppDelegate.m"
+            startingColumnNumber = "9223372036854775807"
+            endingColumnNumber = "9223372036854775807"
+            startingLineNumber = "189"
+            endingLineNumber = "189"
+            landmarkName = "-application:continueUserActivity:restorationHandler:"
+            landmarkType = "7">
+         </BreakpointContent>
+      </BreakpointProxy>
    </Breakpoints>
 </Bucket>

+ 22 - 0
创维盒子/双子星云手机/AppDelegate/AppDelegate.m

@@ -16,6 +16,8 @@
 #import <Bugly/Bugly.h>
 #import <JJException/JJException.h>
 #import <WXApi.h>
+#import <TencentOpenAPI/QQApiInterface.h>
+#import <TencentOpenAPI/TencentOAuth.h>
 
 @interface AppDelegate ()<JJExceptionHandle,WXApiDelegate>
 {
@@ -120,6 +122,9 @@
     //微信注册
     [WXApi registerApp:WXAPPid universalLink:wxuniversalLink];
     
+    [TencentOAuth setIsUserAgreedAuthorization:YES];
+    TencentOAuth *tencentOAuth =[[TencentOAuth alloc] initWithAppId:QQAPPid andUniversalLink:QQUniversalLink andDelegate:self];
+    
     return YES;
 }
 
@@ -163,11 +168,28 @@
 }
 
 - (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation {
+    
+    if (YES == [TencentOAuth CanHandleOpenURL:url])
+    {
+        return [TencentOAuth HandleOpenURL:url];
+    }
+    
     return [WXApi handleOpenURL:url delegate:self];
 }
 
 - (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray<id<UIUserActivityRestoring>> * _Nullable))restorationHandler
 {
+    if([userActivity.activityType isEqualToString:NSUserActivityTypeBrowsingWeb]) {
+        NSURL *url = userActivity.webpageURL;
+        if(url && [TencentOAuth CanHandleUniversalLink:url]) {
+            UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"CI UniversalLink" message:url.description delegate:nil cancelButtonTitle:@"ok" otherButtonTitles:nil, nil];
+            [alertView show];
+
+            //[QQApiInterface handleOpenUniversallink:url delegate:(id<QQApiInterfaceDelegate>)[QQApiShareEntry class]];
+            return [TencentOAuth HandleUniversalLink:url];
+        }
+    }
+    
     return [WXApi handleOpenUniversalLink:userActivity delegate:self];
 }
 

+ 10 - 1
创维盒子/双子星云手机/AppDelegate/SceneDelegate.m

@@ -30,6 +30,8 @@
 #import "backupsFileManager.h"
 #import "iPhone.h"
 #import <WXApi.h>
+#import <TencentOpenAPI/QQApiInterface.h>
+#import <TencentOpenAPI/TencentOAuth.h>
 
 @interface SceneDelegate ()<SetUsePWDViewControllerDelegate,GuideViewControllerDelegate>
 @property(nonatomic, strong)   CalculatorViewController *calculatorVC;
@@ -411,7 +413,14 @@
 }
 
 - (void)scene:(UIScene *)scene continueUserActivity:(NSUserActivity *)userActivity {
-    [WXApi handleOpenUniversalLink:userActivity delegate:self];
+    
+    if([TencentOAuth CanHandleUniversalLink:userActivity.webpageURL]){
+        [TencentOAuth HandleUniversalLink:userActivity.webpageURL];
+    }
+    else{
+        [WXApi handleOpenUniversalLink:userActivity delegate:self];
+    }
+    
 }
 
 - (void)scene:(UIScene *)scene openURLContexts:(NSSet<UIOpenURLContext *> *)URLContexts {

+ 4 - 0
创维盒子/双子星云手机/Class/Set/MySetViewController.m

@@ -170,6 +170,10 @@
             [[customShareManageTool sharedManager] shareType:2 withShareUrl:@"https://baidu.com" withShareTitle:@"我是标题" withShareContent:@"我是测试内容"];
         }
             break;
+        case 102:{
+            [[customShareManageTool sharedManager] shareType:3 withShareUrl:@"https://baidu.com" withShareTitle:@"我是标题" withShareContent:@"我是测试内容"];
+        }
+            break;
             
         case 1:
         {

+ 29 - 29
创维盒子/双子星云手机/Helpers/customShareManageTool.m

@@ -12,9 +12,9 @@
 #import "WXApiObject.h"
 
 //QQ分享头文件
-//#import <TencentOpenAPI/TencentOAuth.h>
-//#import <TencentOpenAPI/QQApiInterface.h>
-//#import <TencentOpenAPI/QQApiInterfaceObject.h>
+#import <TencentOpenAPI/TencentOAuth.h>
+#import <TencentOpenAPI/QQApiInterface.h>
+#import <TencentOpenAPI/QQApiInterfaceObject.h>
 
 @implementation customShareManageTool
 
@@ -49,32 +49,32 @@
 
 - (void)shareQQwithShareUrl:(NSString*)shareUrl withShareTitle:(NSString*)shareTitle  withShareContent:(NSString*)shareContent
 {
-//    if(![QQApiInterface isSupportShareToQQ])
-//    {
-//        [[iToast makeText:@"未安装QQ,请先安装QQ"] show];
-//        return;
-//    }
-//
-//    //分享没有图片 请用自己的AppIcon 作为分享图片
-//    UIImage *shareImage = [UIImage imageNamed:@"AppIcon"];
-//
-//    /*分享文字+连接*/
-//
-//    QQApiNewsObject *newsObj = [QQApiNewsObject
-//    objectWithURL:[NSURL URLWithString:shareUrl]
-//    title:shareTitle
-//    description:shareContent
-//    previewImageData:UIImagePNGRepresentation(shareImage)];
-//    SendMessageToQQReq *req = [SendMessageToQQReq reqWithContent:newsObj];
-//    //将内容分享到qq
-//    QQApiSendResultCode sent = [QQApiInterface sendReq:req];
-//    if (sent != 0) {
-//        [[iToast makeText:@"QQ分享失败,请稍后重试"] show];
-//        KyoLog(@"QQ好友分享失败");
-//    }
-//    else {
-//        KyoLog(@"QQ好友分享成功");
-//    }
+    if(![QQApiInterface isSupportShareToQQ])
+    {
+        [[iToast makeText:@"未安装QQ,请先安装QQ"] show];
+        return;
+    }
+
+    //分享没有图片 请用自己的AppIcon 作为分享图片
+    UIImage *shareImage = [UIImage imageNamed:@"AppIcon"];
+
+    /*分享文字+连接*/
+
+    QQApiNewsObject *newsObj = [QQApiNewsObject
+    objectWithURL:[NSURL URLWithString:shareUrl]
+    title:shareTitle
+    description:shareContent
+    previewImageData:UIImagePNGRepresentation(shareImage)];
+    SendMessageToQQReq *req = [SendMessageToQQReq reqWithContent:newsObj];
+    //将内容分享到qq
+    QQApiSendResultCode sent = [QQApiInterface sendReq:req];
+    if (sent != 0) {
+        [[iToast makeText:@"QQ分享失败,请稍后重试"] show];
+        KyoLog(@"QQ好友分享失败");
+    }
+    else {
+        KyoLog(@"QQ好友分享成功");
+    }
 }
 //
 // type1 朋友圈 2 微信好友 3 QQ

+ 10 - 1
创维盒子/双子星云手机/Info.plist

@@ -35,12 +35,21 @@
 				<string>wx9f3e477e0df9bf03</string>
 			</array>
 		</dict>
+		<dict>
+			<key>CFBundleTypeRole</key>
+			<string>Editor</string>
+			<key>CFBundleURLName</key>
+			<string>tencentopenapi</string>
+			<key>CFBundleURLSchemes</key>
+			<array>
+				<string>tencent102085690</string>
+			</array>
+		</dict>
 	</array>
 	<key>ITSAppUsesNonExemptEncryption</key>
 	<false/>
 	<key>LSApplicationQueriesSchemes</key>
 	<array>
-		<string>weixinURLParamsAPI</string>
 		<string>alipay </string>
 		<string>alipayshare</string>
 		<string>wechat</string>

+ 4 - 0
创维盒子/双子星云手机/Vendor/TencentOpenAPI.framework/Headers/Modules/module.modulemap

@@ -0,0 +1,4 @@
+module TencentOpenApi{
+    umbrella header "TencentOpenApiUmbrellaHeader.h"
+    export *
+}

+ 220 - 0
创维盒子/双子星云手机/Vendor/TencentOpenAPI.framework/Headers/QQApiInterface.h

@@ -0,0 +1,220 @@
+///
+/// \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"
+
+typedef void (^sendResultBlock)(NSDictionary *result);
+
+// 发送消息回调是否发送成功
+typedef void(^QQApiInterfaceSendMessageResultBlock)(QQApiSendResultCode sendResultCode, NSString *message);
+
+/**
+ \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唤起的universallink跳转请求
+ \param universallink 待处理的universallink跳转请求
+ \param delegate 第三方应用用于处理来至QQ请求及响应的委托对象
+ \return 跳转请求处理结果,YES表示成功处理,NO表示不支持的请求协议或处理失败
+ */
++ (BOOL)handleOpenUniversallink:(NSURL*)universallink delegate:(id<QQApiInterfaceDelegate>)delegate;
+
+/**
+ 向手Q发起分享请求
+ \param req 分享内容的请求
+ \return 请求发送结果码
+ */
++ (QQApiSendResultCode)sendReq:(QQBaseReq *)req;
+
+
+/**
+ 向手Q QZone结合版发起分享请求
+ \note H5分享只支持单张网络图片的传递
+ \param req 分享内容的请求
+ \return 请求发送结果码
+ */
++ (QQApiSendResultCode)SendReqToQZone:(QQBaseReq *)req;
+
+/**
+ 向手Q发起设置QQ头像
+ \param req 分享内容的请求
+ \return 请求发送结果码
+ */
++ (QQApiSendResultCode)sendMessageToQQAvatarWithReq:(QQBaseReq*)req;
+
+
++ (QQApiSendResultCode)sendMessageToQQAuthWithReq:(QQBaseReq*)req;
+
+
+/**
+ 向手Q发起绑群请求
+ \param req 请求的内容
+ \param resultBlock 请求回调
+ */
++ (void)sendThirdAppBindGroupReq:(QQBaseReq *)req resultBlock:(sendResultBlock)resultBlock;
+
+/**
+ 向手Q发起加群请求
+ \param req 请求的内容
+ \param resultBlock 请求回调
+ */
++ (void)sendThirdAppJoinGroupReq:(QQBaseReq *)req resultBlock:(sendResultBlock)resultBlock;
+
+/**
+ 向手Q发起解绑群请求
+ \param req 请求的内容
+ \param resultBlock 请求回调
+ */
++ (void)sendThirdAppUnBindGroupReq:(QQBaseReq *)req resultBlock:(sendResultBlock)resultBlock;
+
+/**
+ 向手Q发起创建QQ频道的请求
+ \param req 请求的内容
+ \param resultBlock 回调发送结果
+ \return void
+ */
++ (void)sendMessageToCreateQQGroupProWithMessageRequest:(SendMessageToQQReq *)messageRequest sendResultBlock:(QQApiInterfaceSendMessageResultBlock)sendResultBlock;
+
+
+/**
+ 向手Q发起加入QQ频道的请求
+ \param req 请求的内容
+ \param resultBlock 回调发送结果
+ \return void
+ */
++ (void)sendMessageToJoinQQGroupProWithMessageRequest:(SendMessageToQQReq *)messageRequest sendResultBlock:(QQApiInterfaceSendMessageResultBlock)sendResultBlock;
+
+
+/**
+ 向手Q发起查询QQ频道openID的请求
+ \param req 请求的内容
+ \param resultBlock 请求回调
+ */
++ (void)sendQueryQQGroupProInfo:(QQBaseReq *)req resultBlock:(sendResultBlock)resultBlock;
+
+/**
+ 向手Q发起组图分享到表情收藏
+ \param req 分享内容的请求
+ \return 请求发送结果码
+ */
++ (QQApiSendResultCode)sendMessageToFaceCollectionWithReq:(QQBaseReq*)req;
+
+/**
+ 检测是否已安装QQ
+ \return 如果QQ已安装则返回YES,否则返回NO
+
+ \note SDK目前已经支持QQ、TIM授权登录及分享功能, 会按照QQ>TIM的顺序进行调用。
+ 只要用户安装了QQ、TIM中任意一个应用,都可为第三方应用进行授权登录、分享功能。
+ 第三方应用在接入SDK时不需要判断是否安装QQ、TIM。若有判断安装QQ、TIM的逻辑建议移除。
+ */
++ (BOOL)isQQInstalled;
+
+/**
+ 检测是否已安装TIM
+ \return 如果TIM已安装则返回YES,否则返回NO
+ 
+ \note SDK目前已经支持QQ、TIM授权登录及分享功能, 会按照QQ>TIM的顺序进行调用。
+ 只要用户安装了QQ、TIM中任意一个应用,都可为第三方应用进行授权登录、分享功能。
+ 第三方应用在接入SDK时不需要判断是否安装QQ、TIM。若有判断安装QQ、TIM的逻辑建议移除。
+ */
++ (BOOL)isTIMInstalled;
+
+/**
+ 检测QQ是否支持API调用
+ \return 如果当前安装QQ版本支持API调用则返回YES,否则返回NO
+ */  
++ (BOOL)isQQSupportApi;
+
+/**
+ 检测TIM是否支持API调用
+ \return 如果当前安装TIM版本支持API调用则返回YES,否则返回NO
+ */
++ (BOOL)isTIMSupportApi __attribute__((deprecated("已过期, 建议删除调用,调用地方用YES替代。")));
+
+/**
+ 检测是否支持分享
+ \return 如果当前已安装QQ且QQ版本支持API调用 或者 当前已安装TIM且TIM版本支持API调用则返回YES,否则返回NO
+ */
++ (BOOL)isSupportShareToQQ;
+
+/**
+ 检测是否支持分享到QQ结合版QZone
+ \return 如果当前已安装QQ且QQ版本支持API调用则返回YES,否则返回NO
+ */
++ (BOOL)isSupportPushToQZone;
+
+/**
+ 获取QQ下载地址
+ 
+ 如果App通过<code>QQApiInterface#isQQInstalled</code>和<code>QQApiInterface#isQQSupportApi</code>检测发现QQ没安装或当前版本QQ不支持API调用,可引导用户通过打开此链接下载最新版QQ。
+ \return iPhoneQQ下载地址
+ */
++ (NSString *)getQQInstallUrl;
+
+/**
+ 获取TIM下载地址
+ 
+ 如果App通过<code>QQApiInterface#isTIMInstalled</code>检测发现TIM没安装或当前版本TIM不支持API调用,可引导用户通过打开此链接下载最新版TIM。
+ \return iPhoneTIM下载地址
+ */
++ (NSString *)getTIMInstallUrl;
+
+#pragma mark - Log
+
+/*! @brief 调用此函数可以导出QQSDK的Log到第三方中,用于定位问题
+ 
+    注意1:SDK会强引用这个block,注意不要导致内存泄漏,注意不要导致内存泄漏
+    注意2:调用过一次startLog by block之后,如果再调用一次任意方式的startLoad,会释放上一次logBlock,不再回调上一个logBlock
+ *
+ *  @param logBlock 打印log的回调block
+ */
++ (void)startLogWithBlock:(QQApiLogBolock)logBlock;
+
+///停止回调打印
++ (void)stopLog;
+
+///设置打印日志到文件开关on/off,如果不设置,默认不打印到文件
++ (void)setSwitchPrintLogToFile:(BOOL)on;
+
+///日志文件目录
++ (NSString *)getLogFilePath;
+
+@end

+ 754 - 0
创维盒子/双子星云手机/Vendor/TencentOpenAPI.framework/Headers/QQApiInterfaceObject.h

@@ -0,0 +1,754 @@
+///
+/// \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 NS_ENUM(NSInteger, QQApiSendResultCode) {
+    EQQAPISENDSUCESS                                 = 0,
+    EQQAPIQQNOTINSTALLED                             = 1,   // QQ未安装
+    EQQAPIQQNOTSUPPORTAPI                            = 2,   // QQ api不支持
+    EQQAPIMESSAGETYPEINVALID                         = 3,
+    EQQAPIMESSAGECONTENTNULL                         = 4,
+    EQQAPIMESSAGECONTENTINVALID                      = 5,
+    EQQAPIAPPNOTREGISTED                             = 6,
+    EQQAPIAPPSHAREASYNC                              = 7,
+    EQQAPIQQNOTSUPPORTAPI_WITH_ERRORSHOW             = 8,   // QQ api不支持 && SDK显示error提示(已废弃)
+    EQQAPIMESSAGEARKCONTENTNULL                      = 9,   // ark内容为空
+    EQQAPIMESSAGE_MINI_CONTENTNULL                   = 10,  // 小程序参数为空
+    EQQAPISENDFAILD                                  = -1,  // 发送失败
+    EQQAPISHAREDESTUNKNOWN                           = -2,  // 未指定分享到QQ或TIM
+    EQQAPITIMSENDFAILD                               = -3,  // 发送失败
+    EQQAPITIMNOTINSTALLED                            = 11,  // TIM未安装
+    EQQAPITIMNOTSUPPORTAPI                           = 12,  // TIM api不支持
+    EQQAPI_INCOMING_PARAM_ERROR                      = 13,  // 外部传参错误
+    EQQAPI_THIRD_APP_GROUP_ERROR_APP_NOT_AUTHORIZIED = 14,  // APP未获得授权
+    EQQAPI_THIRD_APP_GROUP_ERROR_CGI_FAILED          = 15,  // CGI请求失败
+    EQQAPI_THIRD_APP_GROUP_ERROR_HAS_BINDED          = 16,  // 该组织已经绑定群聊
+    EQQAPI_THIRD_APP_GROUP_ERROR_NOT_BINDED          = 17,  // 该组织尚未绑定群聊
+    EQQAPI_THIRD_APP_GROUP_ERROR_HAS_UNBINDED        = 18,  // 该组织已经解绑群聊
+    EQQAPIQZONENOTSUPPORTTEXT                        = 10000,   // qzone分享不支持text类型分享
+    EQQAPIQZONENOTSUPPORTIMAGE                       = 10001,   // qzone分享不支持image类型分享
+    EQQAPIVERSIONNEEDUPDATE                          = 10002,   // 当前QQ版本太低,需要更新至新版本才可以支持
+    ETIMAPIVERSIONNEEDUPDATE                         = 10004,   // 当前TIM版本太低,需要更新至新版本才可以支持
+    EAPPURLTYPESILLEGALITY                           = 20000,   // (>=3.3.8)第三方APP的info.plist中UrlTypes字段存在QQ的UrlScheme
+    EQQAPI_ERROR_USER_NOT_AGREED_AUTHORIZATION       = 30001,   // 用户未同意隐私协议,用户同意隐私协议后,需要设置[TencentOAuth setIsUserAgreedAuthorization:YES];
+};
+
+#pragma mark - QQApiObject(分享对象类型)
+
+// QQApiObject control flags
+typedef NS_ENUM(NSUInteger,kQQAPICtrlFlag) {
+    kQQAPICtrlFlagQZoneShareOnStart         = 0x01,
+    kQQAPICtrlFlagQZoneShareForbid          = 0x02, //屏蔽好友选择器上的空间入口
+    kQQAPICtrlFlagQQShare                   = 0x04,
+    kQQAPICtrlFlagQQShareFavorites          = 0x08, //收藏
+    kQQAPICtrlFlagQQShareDataline           = 0x10, //数据线
+    kQQAPICtrlFlagQQShareEnableArk          = 0x20, //支持ARK
+    kQQAPICtrlFlagQQShareEnableMiniProgram  = 0x40, //支持小程序
+};
+
+// 分享到QQ或TIM
+typedef NS_ENUM(NSUInteger, ShareDestType) {
+    ShareDestTypeQQ = 0,
+    ShareDestTypeTIM,
+};
+
+//小程序的类型
+typedef NS_ENUM(NSUInteger, MiniProgramType) {
+    MiniProgramType_Develop = 0,    // 开发版
+    MiniProgramType_Test    = 1,    // 测试版
+    MiniProgramType_Online  = 3,    // 正式版,默认
+    MiniProgramType_Preview = 4,    // 预览版
+};
+
+/// 打印回调的block
+typedef void(^QQApiLogBolock)(NSString *logStr);
+
+// QQApiObject
+/** \brief 所有在QQ及插件间发送的数据对象的根类。
+ */
+__attribute__((visibility("default"))) @interface QQApiObject : NSObject
+
+@property (nonatomic, copy) NSString *title; ///< 标题,最长128个字符
+@property (nonatomic, copy) NSString *description; ///<简要描述,最长512个字符
+@property (nonatomic, copy) NSString *universalLink; ///(>=3.3.7)支持第三方传入在互联开放平台注册的universallink
+@property (nonatomic, assign) uint64_t cflag;
+//353新增两个字断给游戏侧使用,对齐微信sdk
+@property (nonatomic, copy) NSString *tagName;
+@property (nonatomic, copy) NSString *messageExt;
+/*
+ * 分享到QQ/TIM
+ * SDK根据是否安装对应客户端进行判断,判断顺序:QQ > TIM
+ * 默认分享到QQ,如果QQ未安装检测TIM是否安装
+ */
+@property (nonatomic, assign) ShareDestType shareDestType;
+@end
+
+// ArkObject
+/** \brief 支持Ark的根类。
+ */
+__attribute__((visibility("default"))) @interface ArkObject : NSObject
+@property (nonatomic, copy) NSString *arkData; ///< 显示Ark所需的数据,json串,长度暂不限制
+@property (nonatomic,assign) QQApiObject* qqApiObject; ///<原有老版本的QQApiObject
+
+- (id)initWithData:(NSString *)arkData qqApiObject:(QQApiObject*)qqApiObject;
++ (id)objectWithData:(NSString *)arkData qqApiObject:(QQApiObject*)qqApiObject;
+@end
+
+#pragma mark QQ小程序
+//分享小程序消息 - QQ 8.0.8
+__attribute__((visibility("default"))) @interface QQApiMiniProgramObject : NSObject
+@property (nonatomic, strong) QQApiObject* qqApiObject; //原有老版本的QQApiObject
+@property (nonatomic, copy) NSString *miniAppID; //必填,小程序的AppId(注:必须在QQ互联平台中,将该小程序与分享的App绑定)
+@property (nonatomic, copy) NSString *miniPath; //必填,小程序的展示路径
+@property (nonatomic, copy) NSString *webpageUrl; //必填,兼容低版本的网页链接
+@property (nonatomic,assign) MiniProgramType miniprogramType; //非必填,小程序的类型,默认正式版(3),可选测试版(1)、预览版(4)
+@end
+
+//唤起小程序 - QQ 8.1.8
+__attribute__((visibility("default"))) @interface QQApiLaunchMiniProgramObject : QQApiObject
+@property (nonatomic, copy) NSString *miniAppID; //必填,小程序的AppId(注:必须在QQ互联平台中,将该小程序与分享的App绑定)
+@property (nonatomic, copy) NSString *miniPath; //小程序的展示路径,不填展示默认小程序首页
+@property (nonatomic,assign) MiniProgramType miniprogramType; //非必填,小程序的类型,默认正式版(3),可选测试版(1)、开发版(0)
+@end
+
+//小程序唤起第三方 - SDK 3.3.9
+__attribute__((visibility("default"))) @interface QQApiMiniProgramLaunchObject : QQApiObject
+@property (nonatomic, copy) NSString *appParameter; //小程序带来的数据,透传
++ (instancetype)newWithAppParameter:(NSString *)parameter;
+@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, copy) NSString *error; ///<错误
+@property (nonatomic, copy) NSString *errorDescription; ///<错误描述
+@property (nonatomic, copy) NSString *extendInfo; ///<扩展信息
+@property (nonatomic, copy) NSDictionary *otherInfo; ///<其他扩展信息
+@end
+
+// QQApiTextObject
+/** \brief 文本对象
+ */
+@interface QQApiTextObject : QQApiObject
+@property (nonatomic, copy)NSString *text; ///<文本内容,必填,最长1536个字符
+
+- (id)initWithText:(NSString *)text; ///<初始化方法
++ (id)objectWithText:(NSString *)text;///<工厂方法,获取一个QQApiTextObject对象.
+
+@end
+
+// QQApiURLObject
+typedef NS_ENUM(NSUInteger, QQApiURLTargetType) {
+    QQApiURLTargetTypeNotSpecified = 0x00,
+    QQApiURLTargetTypeAudio   = 0x01,
+    QQApiURLTargetTypeVideo   = 0x02,
+    QQApiURLTargetTypeNews    = 0x03
+};
+
+/** @brief URL对象类型。
+ 
+ 包括URL地址,URL地址所指向的目标类型及预览图像。
+ */
+__attribute__((visibility("default"))) @interface QQApiURLObject : QQApiObject
+/**
+ URL地址所指向的目标类型.
+ @note 参见QQApi.h 中的 QQApiURLTargetType 定义.
+ */
+@property (nonatomic)QQApiURLTargetType targetContentType;
+
+@property (nonatomic, strong) NSURL *url; ///<URL地址,必填,最长512个字符
+@property (nonatomic, copy) NSData *previewImageData;///<预览图像数据,最大1M字节
+@property (nonatomic, strong) 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, copy) NSData *data;///<具体数据内容,必填,最大5M字节
+@property (nonatomic, copy) NSData *previewImageData;///<预览图像,最大1M字节
+@property (nonatomic, copy) 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
+
+// QQApiImageForQQAvatarObject
+/** @brief 图片对象
+ 用于设置QQ头像内容的对象,是一个指定为图片类型的<code>QQApiExtendObject</code>
+ */
+@interface QQApiImageForQQAvatarObject : QQApiExtendObject
+@end
+/**
+ * @brief 视频对象
+ * 用于设置动态头像
+ * assetURL可传ALAsset的ALAssetPropertyAssetURL,或者PHAsset的localIdentifier
+ 从手Q返回的错误码:
+ //第三方设置动态头像结果
+ @"ret=0"//设置成功
+ @"ret=-10&error_des=user cancel"//用户取消设置
+ @"ret=-11&error_des=pasteboard have no video data"//剪切板没有数据
+ @"ret=-12&error_des=export data failed"//从剪切板导出数据到本地失败
+ @"ret=-13&error_des=url param invalid"//sdk传递过来的数据有误
+ @"ret=-14&error_des=video param invalid"//视频的参数不符合要求(检测第三方视频源方案:1、分辨率跟480*480保持一致;2、视频长度0.5s~8s)
+ @"ret=-15&error_des=app authorised failed"//应用鉴权失败
+ @"ret=-16&error_des=upload video failed"//设置头像,上传到后台失败
+ @"ret=-17&error_des=account diff"//账号不一致
+ */
+@interface QQApiVideoForQQAvatarObject : QQApiExtendObject
+@property (nonatomic, copy) NSString *assetURL;
+@end
+
+
+
+//QQApiAuthObject 用于拉起手Q的授权详情页
+@interface QQApiAuthObject : QQApiObject
+@end
+
+// QQApiImageArrayForFaceCollectionObject
+/** @brief 图片数组对象
+   用于分享图片组到表情收藏,是一个指定为图片类型的<code>QQApiObject</code>
+ */
+@interface QQApiImageArrayForFaceCollectionObject : QQApiObject
+
+@property (nonatomic, copy) NSArray *imageDataArray;///图片数组
+
+/**
+ 初始化方法
+ @param imageDataArray 图片数组
+ */
+- (id)initWithImageArrayData:(NSArray *)imageDataArray;
+/**
+ helper方法获取一个autorelease的<code>QQApiObject</code>对象
+ @param imageDataArray 发送的多张图片队列
+ @return
+ 一个自动释放的<code>QQApiObject</code>实例
+ */
++ (id)objectWithimageDataArray:(NSArray *)imageDataArray;
+
+@end
+
+// QQApiImageArrayForQZoneObject
+/** @brief 图片对象
+ 用于分享图片到空间,走写说说路径,是一个指定为图片类型的,当图片数组为空时,默认走文本写说说<code>QQApiObject</code>
+ */
+@interface QQApiImageArrayForQZoneObject : QQApiObject
+
+@property (nonatomic, copy) NSArray *imageDataArray;///图片数组
+@property (nonatomic, copy) 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和videoData两个参数必须设置至少一个参数,如果assetURL设置了忽略videoData参数
+ @param assetURL可传ALAsset的ALAssetPropertyAssetURL,或者PHAsset的localIdentifier
+ @param extMap 扩展字段
+ @param videoData 视频数据,大小不超过50M
+ */
+@interface QQApiVideoForQZoneObject : QQApiObject
+
+@property (nonatomic, copy) NSString *assetURL;
+@property (nonatomic, copy) NSDictionary *extMap; // 扩展字段
+@property (nonatomic, copy) NSData *videoData;
+
+- (id)initWithAssetURL:(NSString *)assetURL title:(NSString *)title extMap:(NSDictionary *)extMap;
+
++ (id)objectWithAssetURL:(NSString *)assetURL title:(NSString *)title extMap:(NSDictionary *)extMap;
+
+- (id)initWithVideoData:(NSData *)videoData title:(NSString *)title extMap:(NSDictionary *)extMap;
+
++ (id)objectWithVideoData:(NSData *)videoData title:(NSString *)title extMap:(NSDictionary *)extMap;
+
+@end
+
+// QQApiWebImageObject
+/** @brief 图片对象
+ 用于分享网络图片内容的对象,是一个指定网络图片url的: 该类型只在2.9.0的h5分享中才支持,
+ 原有的手q分享是不支持该类型的。
+ */
+@interface QQApiWebImageObject : QQApiObject
+
+@property (nonatomic, strong) 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
+
+
+//QQApiFileObject
+/** @brief 本地文件对象(暂只支持分享到手机QQ数据线功能)
+ 用于分享文件内容的对象,是一个指定为文件类型的<code>QQApiExtendObject</code>
+ */
+@interface QQApiFileObject : QQApiExtendObject {
+    NSString *_fileName;
+}
+
+@property (nonatomic, copy)NSString *fileName;
+
+@end
+
+// QQApiAudioObject
+/** @brief 音频URL对象
+ 用于分享目标内容为音频的URL的对象
+ */
+@interface QQApiAudioObject : QQApiURLObject
+
+@property (nonatomic, strong) 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, strong) 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
+
+// QQApiCommonContentObject;
+/** @brief 通用模板类型对象
+ 用于分享一个固定显示模板的图文混排对象
+ @note 图片列表和文本列表不能同时为空
+ */
+@interface QQApiCommonContentObject : QQApiObject
+/**
+ 预定义的界面布局类型
+ */
+@property (nonatomic,assign) unsigned int layoutType;
+@property (nonatomic, copy) NSData *previewImageData;///<预览图
+@property (nonatomic, copy) NSArray *textArray;///<文本列表
+@property (nonatomic, copy) NSArray *pictureDataArray;///<图片列表
++ (id)objectWithLayoutType:(int)layoutType textArray:(NSArray *)textArray pictureArray:(NSArray *)pictureArray previewImageData:(NSData *)data;
+/**
+ 将一个NSDictionary对象转化为QQApiCommomContentObject,如果无法转换,则返回空
+ */
++ (id)objectWithDictionary:(NSDictionary *)dic;
+- (NSDictionary *)toDictionary;
+@end
+
+// QQApiExtraServiceObject; 通用业务消息处理类(旧版,后续使用QQApiCommonServiceObject)
+/**
+ @brief OpenSDK扩展支持的服务,通用接口,后续会扩充能力
+ @param serviceID [必选] 扩展支持的服务类型ID,参考官方文档说明
+ @param openID    [必选] 授权登录后对该用户的唯一标识
+ @param toUin     [可选] 对方的QQ号码
+ @param extraInfo [可选] 扩展字段
+ @note 该接口的使用须先登录
+ */
+@interface QQApiExtraServiceObject : QQApiObject
+@property (nonatomic, copy) NSString *serviceID;
+@property (nonatomic, copy) NSString *openID;
+@property (nonatomic, copy) NSString *toUin;
+@property (nonatomic, copy) NSDictionary *extraInfo;
+
+- (id)initWithOpenID:(NSString *)openID serviceID:(NSString *)serviceID;
++ (id)objecWithOpenID:(NSString *)openID serviceID:(NSString *)serviceID;
+@end
+
+
+/**
+ * QQApiCommonServiceObject; 通用业务消息处理类(新),可以适用所有的需要通过互联SDK发消息给手Q的业务去处理。
+ * 使用前需要申请serviceID,每个业务功能有个对应的serviceID
+ */
+@interface QQApiCommonServiceObject : QQApiObject
+
+// [必选] 授权登录后对该用户的唯一标识
+@property (nonatomic, copy) NSString *openID;
+
+// [必选] 扩展支持的服务类型ID,参考官方文档说明
+@property (nonatomic, copy) NSString *serviceID;
+
+// [可选] 扩展字段,由调用方跟具体的业务方协定具体的字段
+@property (nonatomic, copy) NSDictionary *extendInfo;
+
+- (instancetype)initWithOpenID:(NSString *)openID
+                     serviceID:(NSString *)serviceID
+                    extendInfo:(NSDictionary *)extendInfo;
+
++ (instancetype)objecWithOpenID:(NSString *)openID
+                      serviceID:(NSString *)serviceID
+                     extendInfo:(NSDictionary *)extendInfo;
+
+@end
+
+
+////////////////////////////////////////////////////////////////////////////////////////////////////////////
+// Ad item object definition
+////////////////////////////////////////////////////////////////////////////////////////////////////////////
+/** @brief 广告数据对象
+ */
+@interface QQApiAdItem : NSObject
+@property (nonatomic, copy) NSString *title; ///<名称
+@property (nonatomic, copy) NSString *description;///<描述
+@property (nonatomic, copy) NSData *imageData;///<广告图片
+@property (nonatomic, strong) NSURL *target;///<广告目标链接
+@end
+
+
+#pragma mark - QQApi请求消息类型
+
+/**
+ QQApi请求消息类型
+ */
+typedef NS_ENUM(NSUInteger, QQApiInterfaceReqType) {
+    EGETMESSAGEFROMQQREQTYPE      = 0,  /// < 手Q -> 第三方应用,请求第三方应用向手Q发送消息
+    ESENDMESSAGETOQQREQTYPE       = 1,  /// < 第三方应用 -> 手Q,第三方应用向手Q分享消息
+    ESHOWMESSAGEFROMQQREQTYPE     = 2,  /// < 手Q -> 第三方应用,请求第三方应用展现消息中的数据
+    ESENDMESSAGEARKTOQQREQTYPE    = 3,  /// < 第三方应用 -> 手Q,第三方应用向手Q分享Ark消息
+    ESENDMESSAGE_MINI_TOQQREQTYPE = 4   /// < 第三方应用 -> 手Q,第三方应用向手Q分享小程序消息
+};
+
+/**
+ QQApi应答消息类型
+ */
+typedef NS_ENUM(NSUInteger, 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, copy) NSString *extendInfo;
+
+@end
+
+/**
+ GetMessageFromQQReq请求帮助类
+ */
+@interface GetMessageFromQQReq : QQBaseReq
+
+/**
+ 创建一个GetMessageFromQQReq请求实例
+ */
++ (GetMessageFromQQReq *)req;
+
+@end
+
+@interface SendMessageToQQReq : QQBaseReq
+
+/**
+ 创建一个SendMessageToQQReq请求实例
+ \param message 具体分享消息实例
+ \return 新创建的SendMessageToQQReq请求实例
+ */
++ (SendMessageToQQReq *)reqWithContent:(QQApiObject *)message;
+
+/**
+ 创建一个支持Ark的SendMessageToQQReq请求实例
+ \param message 具体分享消息实例
+ \return 新创建的SendMessageToQQReq请求实例
+ */
++ (SendMessageToQQReq *)reqWithArkContent:(ArkObject *)message;
+/**
+ * 创建一个支持小程序的消息请求实例
+ * @param miniMessage 小程序实例对象
+ * @return 消息请求实例
+ */
++ (SendMessageToQQReq *)reqWithMiniContent:(QQApiMiniProgramObject *)miniMessage;
+/** 具体分享消息 */
+@property (nonatomic, strong) QQApiObject *apiObject;
+
+/** 支持Ark的具体分享消息 */
+@property (nonatomic, strong) ArkObject *arkObject;
+/** 支持小程序的具体分享消息 */
+@property (nonatomic, strong) QQApiMiniProgramObject *miniProgramObject;
+@end
+
+/**
+ SendMessageToQQResp应答帮助类
+ */
+@interface SendMessageToQQResp : QQBaseResp
+
+/** 其他扩展信息 */
+@property (nonatomic, copy) NSDictionary *otherInfo;
+
+/**
+ 创建一个SendMessageToQQResp应答实例
+ \param result 请求处理结果
+ \param errDesp 具体错误描述信息
+ \param extendInfo 扩展信息
+ \return 新创建的SendMessageToQQResp应答实例
+ */
++ (SendMessageToQQResp *)respWithResult:(NSString *)result errorDescription:(NSString *)errDesp extendInfo:(NSString *)extendInfo;
+
++ (SendMessageToQQResp *) respWithResult:(NSString *)result errorDescription:(NSString *)errDesp extendInfo:(NSString *)extendInfo otherInfo:(NSDictionary *)otherInfo;
+
+@end
+
+/**
+ ShowMessageFromQQReq请求帮助类
+ */
+@interface ShowMessageFromQQReq : QQBaseReq
+
+/**
+ 创建一个ShowMessageFromQQReq请求实例
+ \param message 具体待展现消息实例
+ \return 新创建的ShowMessageFromQQReq请求实例
+ */
++ (ShowMessageFromQQReq *)reqWithContent:(QQApiObject *)message;
+
+/** 具体待展现消息 */
+@property (nonatomic, strong) QQApiObject *message;
+
+@end
+
+#pragma mark --一键加群&建群&解绑群
+// QQApiThirdAppBindGroupObject
+/** \brief 第三方app绑定群
+ */
+@interface QQApiThirdAppBindGroupObject : QQApiObject
+
+@property (nonatomic, copy) NSString *accessToken;
+@property (nonatomic, copy) NSString *payToken;
+@property (nonatomic, copy) NSString *pfkey;
+@property (nonatomic, copy) NSString *unionID;
+@property (nonatomic, copy) NSString *appDisplayName;
+
+- (id)initWithAccessToken:(NSString *)accessToken payToken:(NSString *)payToken pfkey:(NSString *)pfkey unionID:(NSString *)unionID appDisplayName:(NSString *)appDisplayName; ///<初始化方法
++ (id)objectWithAccessToken:(NSString *)accessToken payToken:(NSString *)payToken pfkey:(NSString *)pfkey unionID:(NSString *)unionID appDisplayName:(NSString *)appDisplayName; ///<工厂方法,获取一个QQApiThirdAppBindGroupObject对象.
+
+@end
+
+// QQApiThirdAppJoinGroupObject
+/** \brief 第三方app加入群
+ */
+@interface QQApiThirdAppJoinGroupObject : QQApiObject
+
+@property (nonatomic, copy) NSString *accessToken;
+@property (nonatomic, copy) NSString *payToken;
+@property (nonatomic, copy) NSString *pfkey;
+@property (nonatomic, copy) NSString *unionID;
+
+- (id)initWithAccessToken:(NSString *)accessToken payToken:(NSString *)payToken pfkey:(NSString *)pfkey unionID:(NSString *)unionID; ///<初始化方法
+
++ (id)objectWithAccessToken:(NSString *)accessToken payToken:(NSString *)payToken pfkey:(NSString *)pfkey unionID:(NSString *)unionID; ///<工厂方法,获取一个QQApiThirdAppJoinGroupObject对象.
+
+@end
+
+// QQApiThirdAppUnBindGroupObject
+/** \brief 第三方app解绑群
+ */
+@interface QQApiThirdAppUnBindGroupObject : QQApiObject
+
+@property (nonatomic, copy) NSString *accessToken;
+@property (nonatomic, copy) NSString *openId;
+@property (nonatomic, copy) NSString *payToken;
+@property (nonatomic, copy) NSString *pfkey;
+@property (nonatomic, copy) NSString *unionID;
+
+- (id)initWithAccessToken:(NSString *)accessToken payToken:(NSString *)payToken pfkey:(NSString *)pfkey unionID:(NSString *)unionID openId:(NSString *)openId appId:(NSString *)appId; ///<初始化方法
+
++ (id)objectWithAccessToken:(NSString *)accessToken payToken:(NSString *)payToken pfkey:(NSString *)pfkey unionID:(NSString *)unionID openId:(NSString *)openId appId:(NSString *)appId; ///<工厂方法,获取一个QQApiThirdAppBindGroupObject对象.
+
+@end
+
+
+#endif

+ 420 - 0
创维盒子/双子星云手机/Vendor/TencentOpenAPI.framework/Headers/SDKDef.h

@@ -0,0 +1,420 @@
+///
+/// \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;
+
+/**
+ * \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<NSSecureCoding> {
+    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;
+
+/** 用户未同意授权隐私协议 */
+FOUNDATION_EXPORT NSString * const TCOpenSDKErrorMsgUserNotAgreedAuthorization;
+
+///@}
+
+/**
+ * \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_ALBUM;
+
+/** 上传一张照片到QQ空间相册(<b>需要申请权限</b>) */
+FOUNDATION_EXTERN NSString *const kOPEN_PERMISSION_UPLOAD_PIC;
+
+/** 获取用户QQ空间相册列表(<b>需要申请权限</b>) */
+FOUNDATION_EXTERN NSString *const kOPEN_PERMISSION_LIST_ALBUM;
+
+/** 验证是否认证空间粉丝 */
+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;
+
+/** 移动端获取用户信息 */
+FOUNDATION_EXTERN NSString *const kOPEN_PERMISSION_ALL;
+///@}
+
+
+/**
+ * \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
+

+ 516 - 0
创维盒子/双子星云手机/Vendor/TencentOpenAPI.framework/Headers/TencentOAuth.h

@@ -0,0 +1,516 @@
+///
+/// \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"
+
+@protocol TencentSessionDelegate;
+@protocol TencentLoginDelegate;
+@protocol TencentApiInterfaceDelegate;
+@protocol TencentWebViewDelegate;
+
+@class TencentApiReq;
+@class TencentApiResp;
+
+typedef NS_ENUM(NSUInteger, TencentAuthorizeState) {
+    kTencentNotAuthorizeState,
+    kTencentSSOAuthorizeState,
+    kTencentWebviewAuthorzieState,
+};
+
+typedef NS_ENUM(NSUInteger, TencentAuthMode) {
+    kAuthModeClientSideToken,
+    kAuthModeServerSideCode,
+};
+
+#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, weak) 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;
+
+/** 第三方应用在互联开放平台注册的UniversalLink */
+@property(nonatomic, retain) NSString *universalLink;
+
+/** 主要是互娱的游戏设置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打开web登录页,支持自动填充账号  */
+@property (nonatomic, copy) NSString *defaultUin;
+
+/**
+ * 获取上次登录得到的token
+ *
+ **/
+- (NSString *)getCachedToken;
+
+/**
+ * 获取上次登录得到的openid
+ *
+ **/
+- (NSString *)getCachedOpenID;
+
+/**
+ * 获取上次登录的token过期日期
+ *
+ **/
+- (NSDate *)getCachedExpirationDate;
+
+/**
+ * 上次登录的token是否过期(本地判断)
+ **/
+- (BOOL)isCachedTokenValid;
+
+/**
+ * 删除上次登录登录的token信息
+ *
+ **/
+- (BOOL)deleteCachedToken;
+
+/**
+ * 删除openid
+ *
+ **/
+- (void)deleteOpenId;
+
+/**
+ * 用来获得当前sdk的版本号
+ * \return 返回sdk版本号
+ **/
+
++ (NSString *)sdkVersion;
+
+/**
+ * 用来获得当前sdk的小版本号
+ * \return 返回sdk小版本号
+ **/
+
++ (NSString *)sdkSubVersion;
+
+/**
+ * 用来获得当前sdk的是否精简版
+ * \return 返回YES表示精简版
+ **/
+
++ (BOOL)isLiteSDK;
+
+/** 
+ * 主要是用来帮助判断是否有登陆被发起,但是还没有过返回结果 
+ * \return 
+ *          kTencentNotAuthorizeState:无授权 
+ *          kTencentSSOAuthorizeState:有人发起了sso授权但无返回
+ *          kTencentWebviewAuthorzieState:有人发起了webview授权还未返回
+ **/
+
++ (TencentAuthorizeState *)authorizeState;
+
+/**
+ * 初始化TencentOAuth对象
+ * \param appId 不可为nil,第三方应用在互联开放平台申请的唯一标识
+ * \param delegate 不可为nil,第三方应用用于接收请求返回结果的委托对象
+ * \return 初始化后的授权登录对象
+ */
+- (id)initWithAppId:(NSString *)appId
+        andDelegate:(id<TencentSessionDelegate>)delegate;
+
+/**
+* 初始化TencentOAuth对象(>=3.3.7)
+* \param appId 不可为nil,第三方应用在互联开放平台申请的唯一标识
+* \param universalLink 可以为nil,第三方应用在互联开放平台注册的UniversalLink,和bundleID一一对应(当为nil时,互联平台会按规则生成universallink,详见官网说明)
+* \param delegate 不可为nil,第三方应用用于接收请求返回结果的委托对象
+* \return 初始化后的授权登录对象
+*
+****【使用说明】*****
+* 1、支持BundleId与UniversalLink的一一对应,主要目的“是为了解决应用的iPhone版本和iPad HD版本共用同一个AppId,导致同时安装情况下的跳转问题"。
+* 2 、由于手Q版本在 >=8.1.8 后才支持了这种对应方式,所以一旦使用,“务必做到”及时知会用户升级手Q版本。
+****
+*/
+- (id)initWithAppId:(NSString *)appId
+   andUniversalLink:(NSString *)universalLink
+        andDelegate:(id<TencentSessionDelegate>)delegate;
+
+/**
+* 初始化TencentOAuth对象(>=3.3.8)
+* \param appId 不可为nil,第三方应用在互联开放平台申请的唯一标识
+* \param enabled  默认为NO,第三方应用是否将sdk和手机QQ的交互方式切换为UniversalLink方式,启用后则在iOS9及以上的系统都会生效UniversalLink方式;否则,默认仅在iOS13及以上的系统生效UniversalLink方式。
+* \param universalLink 可以为nil,第三方应用在互联开放平台注册的UniversalLink,和bundleID一一对应(当为nil时,互联平台会按规则生成UniversalLink,详见官网说明)
+* \param delegate 不可为nil,第三方应用用于接收请求返回结果的委托对象
+* \return 初始化后的授权登录对象
+*
+*****【使用说明】*****
+*  1、支持sdk与手Q的交互切换为UniversalLink模式,主要目的"是为了避免手Q的UrlScheme被其他应用抢注后,导致sdk接口功能受到影响"。
+*  2 、由于手Q版本在 >=8.1.3 后才适配了UniversalLink,所以一旦开启了enabled开关,“务必做到”及时知会用户升级手Q版本。
+*****
+*/
+- (id)initWithAppId:(NSString *)appId
+ enableUniveralLink:(BOOL)enabled
+      universalLink:(NSString *)universalLink
+           delegate:(id<TencentSessionDelegate>)delegate;
+
+/**
+ * 设置用户是否已经授权同意授权隐私协议,在主体应用中,用户同意授权隐私协议后再初始化互联SDK,默认未同意授权
+ * 注意:如未同意授权隐私协议,则互联SDK的所有功能都无法使用,包括初始化!!!
+ * 从3.5.7版本开始支持该方法
+ *
+ * @param isAgreedAuthorization 是否已经授权,isAgreedAuthorization=YES, 表示已经同意授权;isAgreedAuthorization=NO,表示未同意授权,互联SDK的所有功能都无法使用
+ */
++ (void)setIsUserAgreedAuthorization:(BOOL)isUserAgreedAuthorization;
+
+/**
+ * 获取当前用户是否已经同意授权隐私协议
+ * 从3.5.7版本开始支持该方法
+ */
++ (BOOL)isUserAgreedAuthorization;
+
+/**
+ * 判断用户手机上是否安装手机QQ
+ * \return YES:安装 NO:没安装
+ *
+ * \note SDK目前已经支持QQ、TIM授权登录及分享功能, 会按照QQ>TIM的顺序进行调用。
+ * 只要用户安装了QQ、TIM中任意一个应用,都可为第三方应用进行授权登录、分享功能。
+ * 第三方应用在接入SDK时不需要判断是否安装QQ、TIM。若有判断安装QQ、TIM的逻辑建议移除。
+ */
++ (BOOL)iphoneQQInstalled;
+
+/**
+ * 判断用户手机上是否安装手机TIM
+ * \return YES:安装 NO:没安装
+ *
+ * \note SDK目前已经支持QQ、TIM授权登录及分享功能, 会按照QQ>TIM的顺序进行调用。
+ * 只要用户安装了QQ、TIM中任意一个应用,都可为第三方应用进行授权登录、分享功能。
+ * 第三方应用在接入SDK时不需要判断是否安装QQ、TIM。若有判断安装QQ、TIM的逻辑建议移除。
+ */
++ (BOOL)iphoneTIMInstalled;
+ 
+/**
+ * 登录授权
+ *
+ * \param permissions 授权信息列
+ */
+- (BOOL)authorize:(NSArray *)permissions;
+
+/**
+ * 登录授权
+ * \param permissions 授权信息列表
+ * \param localAppId 应用APPID
+ */
+- (BOOL)authorize:(NSArray *)permissions
+       localAppId:(NSString *)localAppId;
+
+/**
+ * 登录授权<web为二维码扫码方式>
+ *
+ * \param permissions 授权信息列
+ */
+- (BOOL)authorizeWithQRlogin:(NSArray *)permissions;
+
+/**
+ * 增量授权,因用户没有授予相应接口调用的权限,需要用户确认是否授权
+ * \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;
+
+/**
+ * (静态方法)处理应用的UniversalLink拉起协议
+ * \param url 处理被其他应用呼起时的逻辑
+ * \return 处理结果,YES表示成功,NO表示失败
+ */
++ (BOOL)HandleUniversalLink:(NSURL *)url;
+
+/**
+ * (静态方法)sdk是否可以处理应用的Universallink拉起协议
+ * \param url 处理被其他应用呼起时的逻辑(应用的Universallink链接须满足官网注册时的格式要求)
+ * \return 处理结果,YES表示可以 NO表示不行
+ * 注:在调用其他Universallink相关处理接口之前,均需进行此项判断
+ */
++ (BOOL)CanHandleUniversalLink:(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;
+
+/**
+ * 退出指定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;
+
+/* 获取appSignToken */
++ (NSString *)getAppSignToken;
+
+/* 设置appSignToken,跨进程的应用可以通过该方法手动设置appSignToken */
++ (void)setupAppSignToken:(NSString *)appSignToken;
+
+@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 __attribute__((deprecated("该接口已过期, 建议删除调用")));
+
+/**
+ * unionID获得
+ */
+- (void)didGetUnionID;
+
+/**
+ * 强制网页登录,包括账号密码登录和二维码登录
+ * return YES时,就算本地有手Q也会打开web界面
+ */
+- (BOOL)forceWebLogin;
+
+/* 获得appSignToken回调 */
+- (void)tencentDidGetAppSignToken:(NSString *)appSignToken;
+
+@end
+
+#pragma mark - TencentSessionDelegate(开放接口回调协议)
+
+/**
+ * \brief TencentSessionDelegate iOS Open SDK 1.3 API回调协议
+ *
+ * 第三方应用需要实现每条需要调用的API的回调协议
+ */
+@protocol TencentSessionDelegate<NSObject, TencentLoginDelegate,
+                                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;
+
+/**
+ * 社交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

+ 24 - 0
创维盒子/双子星云手机/Vendor/TencentOpenAPI.framework/Headers/TencentOpenApiUmbrellaHeader.h

@@ -0,0 +1,24 @@
+//
+//  TencentOpenApiUmbrellaHeader.h
+//  TencentOpenApi_IOS
+//
+//  Created by jyukeizhang(张储祺) on 2020/7/27.
+//  Copyright © 2020 Tencent. All rights reserved.
+//
+
+#ifndef TencentOpenApiUmbrellaHeader_h
+#define TencentOpenApiUmbrellaHeader_h
+
+#import <Foundation/Foundation.h>
+
+FOUNDATION_EXPORT double StaticLibraryModuleVersionNumber;
+FOUNDATION_EXPORT const unsigned char StaticLibraryModuleVersionString[];
+
+#import "QQApiInterface.h"
+#import "QQApiInterfaceObject.h"
+#import "SDKDef.h"
+#import "TencentOAuth.h"
+
+
+#endif /* TencentOpenApiUmbrellaHeader_h */
+

二进制
创维盒子/双子星云手机/Vendor/TencentOpenAPI.framework/TencentOpenAPI