This commit is contained in:
wu736139669
2015-03-31 09:07:10 +08:00
parent e2d565eceb
commit 839ec05135
25 changed files with 3877 additions and 4 deletions
+84
View File
@@ -34,6 +34,19 @@
A97C55061AC933AD0038818A /* UMSnsAccountViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = A97C54FA1AC933AD0038818A /* UMSnsAccountViewController.xib */; }; A97C55061AC933AD0038818A /* UMSnsAccountViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = A97C54FA1AC933AD0038818A /* UMSnsAccountViewController.xib */; };
A97C55071AC933AD0038818A /* UMSShareListController.xib in Resources */ = {isa = PBXBuildFile; fileRef = A97C54FB1AC933AD0038818A /* UMSShareListController.xib */; }; A97C55071AC933AD0038818A /* UMSShareListController.xib in Resources */ = {isa = PBXBuildFile; fileRef = A97C54FB1AC933AD0038818A /* UMSShareListController.xib */; };
A97C55081AC933AD0038818A /* UMSocialSDKResourcesNew.bundle in Resources */ = {isa = PBXBuildFile; fileRef = A97C54FC1AC933AD0038818A /* UMSocialSDKResourcesNew.bundle */; }; A97C55081AC933AD0038818A /* UMSocialSDKResourcesNew.bundle in Resources */ = {isa = PBXBuildFile; fileRef = A97C54FC1AC933AD0038818A /* UMSocialSDKResourcesNew.bundle */; };
A98F98521ACA29B5007C4594 /* libSocialQQ.a in Frameworks */ = {isa = PBXBuildFile; fileRef = A98F98481ACA29B5007C4594 /* libSocialQQ.a */; };
A98F98531ACA29B5007C4594 /* TencentOpenAPI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A98F98491ACA29B5007C4594 /* TencentOpenAPI.framework */; };
A98F98541ACA29B5007C4594 /* TencentOpenApi_IOS_Bundle.bundle in Resources */ = {isa = PBXBuildFile; fileRef = A98F984A1ACA29B5007C4594 /* TencentOpenApi_IOS_Bundle.bundle */; };
A98F98551ACA29B5007C4594 /* libSocialWechat.a in Frameworks */ = {isa = PBXBuildFile; fileRef = A98F984D1ACA29B5007C4594 /* libSocialWechat.a */; };
A98F98561ACA29B5007C4594 /* libWeChatSDK.a in Frameworks */ = {isa = PBXBuildFile; fileRef = A98F984E1ACA29B5007C4594 /* libWeChatSDK.a */; };
A98F98581ACA2A5A007C4594 /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A98F98571ACA2A5A007C4594 /* Security.framework */; };
A98F985A1ACA2A65007C4594 /* libiconv.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = A98F98591ACA2A65007C4594 /* libiconv.dylib */; };
A98F985C1ACA2A6F007C4594 /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A98F985B1ACA2A6F007C4594 /* SystemConfiguration.framework */; };
A98F985E1ACA2A77007C4594 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A98F985D1ACA2A77007C4594 /* CoreGraphics.framework */; };
A98F98601ACA2A86007C4594 /* libsqlite3.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = A98F985F1ACA2A86007C4594 /* libsqlite3.dylib */; };
A98F98621ACA2A8E007C4594 /* CoreTelephony.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A98F98611ACA2A8E007C4594 /* CoreTelephony.framework */; };
A98F98641ACA2A95007C4594 /* libstdc++.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = A98F98631ACA2A95007C4594 /* libstdc++.dylib */; };
A98F98661ACA2A9F007C4594 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = A98F98651ACA2A9F007C4594 /* libz.dylib */; };
A9B4E39F1AC9908E00A1DBDF /* libMobClickLibrary.a in Frameworks */ = {isa = PBXBuildFile; fileRef = A9B4E39C1AC9908E00A1DBDF /* libMobClickLibrary.a */; }; A9B4E39F1AC9908E00A1DBDF /* libMobClickLibrary.a in Frameworks */ = {isa = PBXBuildFile; fileRef = A9B4E39C1AC9908E00A1DBDF /* libMobClickLibrary.a */; };
A9FAD4221AC922A5007ADC10 /* MainViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = A9FAD4201AC922A5007ADC10 /* MainViewController.m */; }; A9FAD4221AC922A5007ADC10 /* MainViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = A9FAD4201AC922A5007ADC10 /* MainViewController.m */; };
A9FAD4231AC922A5007ADC10 /* MainViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = A9FAD4211AC922A5007ADC10 /* MainViewController.xib */; }; A9FAD4231AC922A5007ADC10 /* MainViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = A9FAD4211AC922A5007ADC10 /* MainViewController.xib */; };
@@ -103,6 +116,23 @@
A97C54FB1AC933AD0038818A /* UMSShareListController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = UMSShareListController.xib; sourceTree = "<group>"; }; A97C54FB1AC933AD0038818A /* UMSShareListController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = UMSShareListController.xib; sourceTree = "<group>"; };
A97C54FC1AC933AD0038818A /* UMSocialSDKResourcesNew.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; path = UMSocialSDKResourcesNew.bundle; sourceTree = "<group>"; }; A97C54FC1AC933AD0038818A /* UMSocialSDKResourcesNew.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; path = UMSocialSDKResourcesNew.bundle; sourceTree = "<group>"; };
A97C54FD1AC933AD0038818A /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "zh-Hans.lproj/UMSocialLocalizable.strings"; sourceTree = "<group>"; }; A97C54FD1AC933AD0038818A /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "zh-Hans.lproj/UMSocialLocalizable.strings"; sourceTree = "<group>"; };
A98F98481ACA29B5007C4594 /* libSocialQQ.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libSocialQQ.a; sourceTree = "<group>"; };
A98F98491ACA29B5007C4594 /* TencentOpenAPI.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = TencentOpenAPI.framework; sourceTree = "<group>"; };
A98F984A1ACA29B5007C4594 /* TencentOpenApi_IOS_Bundle.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; path = TencentOpenApi_IOS_Bundle.bundle; sourceTree = "<group>"; };
A98F984B1ACA29B5007C4594 /* UMSocialQQHandler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UMSocialQQHandler.h; sourceTree = "<group>"; };
A98F984D1ACA29B5007C4594 /* libSocialWechat.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libSocialWechat.a; sourceTree = "<group>"; };
A98F984E1ACA29B5007C4594 /* libWeChatSDK.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libWeChatSDK.a; sourceTree = "<group>"; };
A98F984F1ACA29B5007C4594 /* UMSocialWechatHandler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UMSocialWechatHandler.h; sourceTree = "<group>"; };
A98F98501ACA29B5007C4594 /* WXApi.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WXApi.h; sourceTree = "<group>"; };
A98F98511ACA29B5007C4594 /* WXApiObject.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WXApiObject.h; sourceTree = "<group>"; };
A98F98571ACA2A5A007C4594 /* Security.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Security.framework; path = System/Library/Frameworks/Security.framework; sourceTree = SDKROOT; };
A98F98591ACA2A65007C4594 /* libiconv.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libiconv.dylib; path = usr/lib/libiconv.dylib; sourceTree = SDKROOT; };
A98F985B1ACA2A6F007C4594 /* SystemConfiguration.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SystemConfiguration.framework; path = System/Library/Frameworks/SystemConfiguration.framework; sourceTree = SDKROOT; };
A98F985D1ACA2A77007C4594 /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; };
A98F985F1ACA2A86007C4594 /* libsqlite3.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libsqlite3.dylib; path = usr/lib/libsqlite3.dylib; sourceTree = SDKROOT; };
A98F98611ACA2A8E007C4594 /* CoreTelephony.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreTelephony.framework; path = System/Library/Frameworks/CoreTelephony.framework; sourceTree = SDKROOT; };
A98F98631ACA2A95007C4594 /* libstdc++.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = "libstdc++.dylib"; path = "usr/lib/libstdc++.dylib"; sourceTree = SDKROOT; };
A98F98651ACA2A9F007C4594 /* libz.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libz.dylib; path = usr/lib/libz.dylib; sourceTree = SDKROOT; };
A9B4E39C1AC9908E00A1DBDF /* libMobClickLibrary.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libMobClickLibrary.a; sourceTree = "<group>"; }; A9B4E39C1AC9908E00A1DBDF /* libMobClickLibrary.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libMobClickLibrary.a; sourceTree = "<group>"; };
A9B4E39D1AC9908E00A1DBDF /* MobClick.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MobClick.h; sourceTree = "<group>"; }; A9B4E39D1AC9908E00A1DBDF /* MobClick.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MobClick.h; sourceTree = "<group>"; };
A9B4E39E1AC9908E00A1DBDF /* MobClickSocialAnalytics.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MobClickSocialAnalytics.h; sourceTree = "<group>"; }; A9B4E39E1AC9908E00A1DBDF /* MobClickSocialAnalytics.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MobClickSocialAnalytics.h; sourceTree = "<group>"; };
@@ -129,8 +159,20 @@
isa = PBXFrameworksBuildPhase; isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647; buildActionMask = 2147483647;
files = ( files = (
A98F98661ACA2A9F007C4594 /* libz.dylib in Frameworks */,
A98F98641ACA2A95007C4594 /* libstdc++.dylib in Frameworks */,
A98F98621ACA2A8E007C4594 /* CoreTelephony.framework in Frameworks */,
A98F98601ACA2A86007C4594 /* libsqlite3.dylib in Frameworks */,
A98F985E1ACA2A77007C4594 /* CoreGraphics.framework in Frameworks */,
A98F985C1ACA2A6F007C4594 /* SystemConfiguration.framework in Frameworks */,
A98F985A1ACA2A65007C4594 /* libiconv.dylib in Frameworks */,
A98F98581ACA2A5A007C4594 /* Security.framework in Frameworks */,
A98F98561ACA29B5007C4594 /* libWeChatSDK.a in Frameworks */,
A98F98531ACA29B5007C4594 /* TencentOpenAPI.framework in Frameworks */,
A98F98521ACA29B5007C4594 /* libSocialQQ.a in Frameworks */,
018BA697D81ADF73A75A2345 /* libPods.a in Frameworks */, 018BA697D81ADF73A75A2345 /* libPods.a in Frameworks */,
A9B4E39F1AC9908E00A1DBDF /* libMobClickLibrary.a in Frameworks */, A9B4E39F1AC9908E00A1DBDF /* libMobClickLibrary.a in Frameworks */,
A98F98551ACA29B5007C4594 /* libSocialWechat.a in Frameworks */,
A97C54FF1AC933AD0038818A /* libUMSocial_Sdk_4.2.1.a in Frameworks */, A97C54FF1AC933AD0038818A /* libUMSocial_Sdk_4.2.1.a in Frameworks */,
); );
runOnlyForDeploymentPostprocessing = 0; runOnlyForDeploymentPostprocessing = 0;
@@ -279,6 +321,7 @@
A97C54D91AC9014D0038818A /* Vender */ = { A97C54D91AC9014D0038818A /* Vender */ = {
isa = PBXGroup; isa = PBXGroup;
children = ( children = (
A98F98461ACA29B5007C4594 /* UMSocial_Sdk_Extra_Frameworks */,
A9B4E39B1AC9908E00A1DBDF /* UMAnalytics_Sdk_3.4.6 */, A9B4E39B1AC9908E00A1DBDF /* UMAnalytics_Sdk_3.4.6 */,
A97C54E31AC933AD0038818A /* UMSocial_Sdk_4.2.1 */, A97C54E31AC933AD0038818A /* UMSocial_Sdk_4.2.1 */,
A97C54DA1AC901970038818A /* MBProgressHUD */, A97C54DA1AC901970038818A /* MBProgressHUD */,
@@ -356,6 +399,38 @@
path = SocialSDKXib; path = SocialSDKXib;
sourceTree = "<group>"; sourceTree = "<group>";
}; };
A98F98461ACA29B5007C4594 /* UMSocial_Sdk_Extra_Frameworks */ = {
isa = PBXGroup;
children = (
A98F98471ACA29B5007C4594 /* TencentOpenAPI */,
A98F984C1ACA29B5007C4594 /* Wechat */,
);
path = UMSocial_Sdk_Extra_Frameworks;
sourceTree = "<group>";
};
A98F98471ACA29B5007C4594 /* TencentOpenAPI */ = {
isa = PBXGroup;
children = (
A98F98481ACA29B5007C4594 /* libSocialQQ.a */,
A98F98491ACA29B5007C4594 /* TencentOpenAPI.framework */,
A98F984A1ACA29B5007C4594 /* TencentOpenApi_IOS_Bundle.bundle */,
A98F984B1ACA29B5007C4594 /* UMSocialQQHandler.h */,
);
path = TencentOpenAPI;
sourceTree = "<group>";
};
A98F984C1ACA29B5007C4594 /* Wechat */ = {
isa = PBXGroup;
children = (
A98F984D1ACA29B5007C4594 /* libSocialWechat.a */,
A98F984E1ACA29B5007C4594 /* libWeChatSDK.a */,
A98F984F1ACA29B5007C4594 /* UMSocialWechatHandler.h */,
A98F98501ACA29B5007C4594 /* WXApi.h */,
A98F98511ACA29B5007C4594 /* WXApiObject.h */,
);
path = Wechat;
sourceTree = "<group>";
};
A9B4E39B1AC9908E00A1DBDF /* UMAnalytics_Sdk_3.4.6 */ = { A9B4E39B1AC9908E00A1DBDF /* UMAnalytics_Sdk_3.4.6 */ = {
isa = PBXGroup; isa = PBXGroup;
children = ( children = (
@@ -397,6 +472,14 @@
D600413F4BCED5BE80E26E1F /* Frameworks */ = { D600413F4BCED5BE80E26E1F /* Frameworks */ = {
isa = PBXGroup; isa = PBXGroup;
children = ( children = (
A98F98651ACA2A9F007C4594 /* libz.dylib */,
A98F98631ACA2A95007C4594 /* libstdc++.dylib */,
A98F98611ACA2A8E007C4594 /* CoreTelephony.framework */,
A98F985F1ACA2A86007C4594 /* libsqlite3.dylib */,
A98F985D1ACA2A77007C4594 /* CoreGraphics.framework */,
A98F985B1ACA2A6F007C4594 /* SystemConfiguration.framework */,
A98F98591ACA2A65007C4594 /* libiconv.dylib */,
A98F98571ACA2A5A007C4594 /* Security.framework */,
E7B8559E65B4108EA2C3F343 /* libPods.a */, E7B8559E65B4108EA2C3F343 /* libPods.a */,
); );
name = Frameworks; name = Frameworks;
@@ -468,6 +551,7 @@
A97C55071AC933AD0038818A /* UMSShareListController.xib in Resources */, A97C55071AC933AD0038818A /* UMSShareListController.xib in Resources */,
A97C54FE1AC933AD0038818A /* UMSocialLocalizable.strings in Resources */, A97C54FE1AC933AD0038818A /* UMSocialLocalizable.strings in Resources */,
A97C55041AC933AD0038818A /* UMShareEditViewControlleriPad.xib in Resources */, A97C55041AC933AD0038818A /* UMShareEditViewControlleriPad.xib in Resources */,
A98F98541ACA29B5007C4594 /* TencentOpenApi_IOS_Bundle.bundle in Resources */,
A95510A01AC39E6A0006D16F /* LaunchScreen.xib in Resources */, A95510A01AC39E6A0006D16F /* LaunchScreen.xib in Resources */,
A9FAD42D1AC923E2007ADC10 /* MessageViewController.xib in Resources */, A9FAD42D1AC923E2007ADC10 /* MessageViewController.xib in Resources */,
A955109D1AC39E6A0006D16F /* Images.xcassets in Resources */, A955109D1AC39E6A0006D16F /* Images.xcassets in Resources */,
+4 -4
View File
@@ -8,8 +8,8 @@
#import "AppDelegate.h" #import "AppDelegate.h"
#import "UMSocial.h" #import "UMSocial.h"
//#import "UMSocialWechatHandler.h" #import "UMSocialWechatHandler.h"
//#import "UMSocialQQHandler.h" #import "UMSocialQQHandler.h"
#import "MobClick.h" #import "MobClick.h"
@interface AppDelegate () @interface AppDelegate ()
@@ -50,8 +50,8 @@
{ {
// [WXApi registerApp:kWXAppId]; // [WXApi registerApp:kWXAppId];
[UMSocialData setAppKey:kUmengAppkey]; [UMSocialData setAppKey:kUmengAppkey];
// [UMSocialWechatHandler setWXAppId:kWXAppId appSecret:kWXAppSecret url:@"http://www.xiaoyu.com"]; [UMSocialWechatHandler setWXAppId:kWXAppId appSecret:kWXAppSecret url:@"http://www.xiaoyu.com"];
// [UMSocialQQHandler setQQWithAppId:kQQAppId appKey:kQQAppSecret url:@"http://www.xiaoyu.com"]; [UMSocialQQHandler setQQWithAppId:kQQAppId appKey:kQQAppSecret url:@"http://www.xiaoyu.com"];
[MobClick startWithAppkey:kUmengAppkey reportPolicy:REALTIME channelId:@"App Store"]; [MobClick startWithAppkey:kUmengAppkey reportPolicy:REALTIME channelId:@"App Store"];
NSString *version = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleShortVersionString"]; NSString *version = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleShortVersionString"];
@@ -0,0 +1,444 @@
//
// QQApi.h
// QQApi
//
// Created by Tencent on 5/1/12.
// Copyright (c) 2012 Tencent. All rights reserved.
//
/** @file */
#import <Foundation/Foundation.h>
@class QQApiObject;
@class QQApiMessage;
@class QQApiAdItem;
typedef enum
{
EQQAPISENDSUCESS = 0,
EQQAPIQQNOTINSTALLED = 1,
EQQAPIQQNOTSUPPORTAPI = 2,
EQQAPIMESSAGETYPEINVALID = 3,
EQQAPIMESSAGECONTENTNULL = 4,
EQQAPIMESSAGECONTENTINVALID = 5,
EQQAPIAPPNOTREGISTED = 6,
EQQAPIAPPSHAREASYNC = 7,
EQQAPISENDFAILD = -1,
//qzone分享不支持text类型分享
EQQAPIQZONENOTSUPPORTTEXT = 10000,
//qzone分享不支持image类型分享
EQQAPIQZONENOTSUPPORTIMAGE = 10001,
} QQApiSendResultCode;
////////////////////////////////////////////////////////////////////////////////////////////////////////////
// QQApi
////////////////////////////////////////////////////////////////////////////////////////////////////////////
/** \brief QQApi主要接口类。.
可以通过其中的接口注册插件,发送、接收消息,打开QQ,测试QQ是否支持插件等
*/
@interface QQApi : NSObject
/**
向QQ App发送消息
@param message 待发送的消息对象
@return 发送结果错误码
*/
+ (QQApiSendResultCode)sendMessage:(QQApiMessage *)message;
/**
把URL反序列化成<code>QQApiMessage</code>对象,在AppDelegate的handleOpenURL中调用
@return
如果这是来自QQ的调用,一个QQApiMessage实例将被返回,否则返回nil。
@note
App应通过<code>QQApiMessage.type</code>来判断具体消息类型以作出进一步的处理。
*/
+ (QQApiMessage *)handleOpenURL:(NSURL *)url sourceApplication:(NSString *)source annotation:(id)annotation;
/**
@see QQApi#handleOpenURL:sourceApplication:annotation:
*/
+ (QQApiMessage *)handleOpenURL:(NSURL *)url;
/**
获取广告数据列表
@return
<code>QQApiAdItem</code>数组
*/
+ (NSArray*)getAdItemArray;
/**
检测是否已安装QQ
@return
如果QQ已安装则返回TRUE,否则返回FALSE
*/
+ (BOOL)isQQInstalled;
/**
批量检测QQ号码是否在线
*/
+ (void)getQQUinOnlineStatues:(NSArray *)QQUins delegate:(id)target;
/**
检测QQ是否支持API调用
@return
如果当前安装QQ版本支持API调用则返回TRUE,否则返回FALSE
*/
+ (BOOL)isQQSupportApi;
/**
获取QQ下载地址
如果App通过<code>QQApi#isQQInstalled</code>和<code>QQApi#isQQSupportApi</code>检测发现QQ没安装或当前版本QQ不支持API调用,可引导用户通过打开此链接下载最新版QQ。
@return
iPhoneQQ下载地址
*/
+ (NSString*)getQQInstallURL;
/**
启动QQ
@return
成功返回TRUE,否则返回FALSE
*/
+ (BOOL)openQQApp;
@end
////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Message definition
////////////////////////////////////////////////////////////////////////////////////////////////////////////
/**
消息类型定义
*/
enum
{
// Message from QQ to Plugin app. Plugin app is required to display the data object attached in this message
QQApiMessageTypeShowMessageFromQQRequest = 0x01,///< QQ发给插件App的请求
QQApiMessageTypeShowMessageFromQQResponse = 0x02,
// Message from QQ to Plugin app. Plugin app is required to send data to QQ
QQApiMessageTypeGetMessageFromQQRequest = 0x03,
QQApiMessageTypeGetMessageFromQQResponse = 0x04,
// Message from Plugin app to QQ. Plugin app is sharing data with QQ
QQApiMessageTypeSendMessageToQQRequest = 0x05,
// Message from QQ to Plugin app.
QQApiMessageTypeSendMessageToQQResponse = 0x06,
// Message from Plugin app to QZone,
QQApiMessageTypeSendMessageToQQQZoneRequest = 0x07,
QQApiMessageTypeReserved = 0xF0
};
/**
新补充的 用来区分消息是发送给哪个平台(这个多余了 设计的有点问题)
*/
typedef enum
{
//分享到qq
kShareMsgToQQ = 0x0,
//分享到qzone结合版
kShareMsgToQQQZone = 0x1,
}QQShareType;
typedef NSUInteger QQApiMessageType;
// QQApiMessage
/** @brief API MESSAGE对象.
用于在QQ和插件间发送消息、数据等。
*/
@interface QQApiMessage : NSObject<NSCoding>
/**
消息类型.
@note 参见QQApi.h中的 QQApiMessageType 定义
*/
@property (nonatomic) QQApiMessageType type;
/**
*/
@property (nonatomic, retain)QQApiObject* object;
/**
初始化函数
*/
- (id)initWithObject:(QQApiObject*)obj andType:(QQApiMessageType)type;
/**
通过ApiObject获取QQApiMessage对象
@note 通过此接口获取的对象类型为APP发送到QQ的请求
*/
+ (QQApiMessage*) messageWithObject:(QQApiObject*)obj;
/**
通过ApiObject及MessageType获取QQApiMessage对象
*/
+ (QQApiMessage*) messageWithObject:(QQApiObject*)obj andType:(QQApiMessageType)type;
@end
////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Payload object definition
////////////////////////////////////////////////////////////////////////////////////////////////////////////
// QQApiObject control flags
enum
{
kQQAPICtrlFlagQZoneShareOnStart = 0x01,
kQQAPICtrlFlagQZoneShareForbid = 0x02,
};
// QQApiObject
/** \brief 所有在QQ及插件间发送的数据对象的根类。
*/
@interface QQApiObject : NSObject
@property(nonatomic,retain) NSString* title; ///< 标题,最长128个字符
@property(nonatomic,retain) NSString* description; ///<简要描述,最长512个字符
@property (nonatomic, assign) uint64_t cflag;
@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>
*/
@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地址所指向的目标类型及预览图像。
*/
@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字节
/**
初始化方法
@param data 数据内容
@param previewImageData 用于预览的图片
@param title 标题
@param description 此对象,分享的描述
*/
- (id)initWithData:(NSData*)data previewImageData:(NSData*)previewImageData title:(NSString*)title description:(NSString*)description;
/**
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;
@end
// QQApiImageObject
/** @brief 图片对象
用于分享图片内容的对象,是一个指定为图片类型的<code>QQApiExtendObject</code>
*/
@interface QQApiImageObject : QQApiExtendObject
@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的对象
*/
@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
@@ -0,0 +1,101 @@
///
/// \file QQApiInterface.h
/// \brief QQApi接口简化封装
///
/// Created by Tencent on 12-5-15.
/// Copyright (c) 2012年 Tencent. All rights reserved.
///
#import <Foundation/Foundation.h>
#import "QQApi.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发送应答消息
\param resp 应答消息
\return 应答发送结果码
*/
+ (QQApiSendResultCode)sendResp:(QQBaseResp *)resp;
/**
检测是否已安装QQ
\return 如果QQ已安装则返回YES,否则返回NO
*/
+ (BOOL)isQQInstalled;
/**
批量检测QQ号码是否在线
*/
+ (void)getQQUinOnlineStatues:(NSArray *)QQUins delegate:(id<QQApiInterfaceDelegate>)delegate;
/**
检测QQ是否支持API调用
\return 如果当前安装QQ版本支持API调用则返回YES,否则返回NO
*/
+ (BOOL)isQQSupportApi;
/**
启动QQ
\return 成功返回YES,否则返回NO
*/
+ (BOOL)openQQ;
/**
获取QQ下载地址
如果App通过<code>QQApiInterface#isQQInstalled</code>和<code>QQApiInterface#isQQSupportApi</code>检测发现QQ没安装或当前版本QQ不支持API调用,可引导用户通过打开此链接下载最新版QQ。
\return iPhoneQQ下载地址
*/
+ (NSString *)getQQInstallUrl;
@end
@@ -0,0 +1,157 @@
///
/// \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 "QQApi.h"
/**
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
@@ -0,0 +1,99 @@
//
// TencentMessage.h
// TencentOpenApi_IOS
//
// Created by qqconnect on 13-5-29.
// Copyright (c) 2013年 Tencent. All rights reserved.
//
#import <Foundation/Foundation.h>
#import "TencentMessageObject.h"
typedef enum
{
kIphoneQQ,
kIphoneQZONE,
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
@@ -0,0 +1,410 @@
//
// TencentMessageObject.h
// TencentOpenApi_IOS
//
// Created by qqconnect on 13-5-27.
// Copyright (c) 2013年 Tencent. All rights reserved.
//
#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)TCRequiredInt nMessageType;
/** 请求平台 */
@property (readonly, assign)NSInteger nPlatform;
/** 请求的SDK版本号 */
@property (readonly, assign)NSInteger nSdkVersion;
/** 请求序列号 */
@property (readonly, assign)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) 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
@@ -0,0 +1,575 @@
///
/// \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 "WeiBoAPI.h"
#import "WeiyunAPI.h"
@protocol TencentSessionDelegate;
@protocol TencentLoginDelegate;
@protocol TencentApiInterfaceDelegate;
@class TencentApiReq;
@class TencentApiResp;
/**
* \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;
/** 登陆透传的数据 */
@property(nonatomic, copy) NSDictionary* passData;
/**
* 返回sdk的版本号
*/
+ (NSString *)sdkVerison;
/**
* 初始化TencentOAuth对象
* \param appId 第三方应用在互联开放平台申请的唯一标识
* \param delegate 第三方应用用于接收请求返回结果的委托对象
* \return 初始化后的授权登录对象
*/
- (id)initWithAppId:(NSString *)appId
andDelegate:(id<TencentSessionDelegate>)delegate;
/**
* 判断用户手机上是否安装手机QQ
* \return YES:安装 NO:没安装
*/
+ (BOOL)iphoneQQInstalled;
/**
* 判断用户手机上的手机QQ是否支持SSO登录
* \return YES:支持 NO:不支持
*/
+ (BOOL)iphoneQQSupportSSOLogin;
/**
* 判断用户手机上是否安装手机QZone
* \return YES:安装 NO:没安装
*/
+ (BOOL)iphoneQZoneInstalled;
/**
* 判断用户手机上的手机QZone是否支持SSO登录
* \return YES:支持 NO:不支持
*/
+ (BOOL)iphoneQZoneSupportSSOLogin;
/**
* 登录授权 / DAU统计 <b>SDK 1.9版本以后,登录授权接口建议使用该接口,以前接口将会废弃 </b>
*
* if:((openid != nil) && (accesstoken != nil)) ,进行统计DAU操作,并验证token是否有效
* esle: 进行登录授权操作
* 如果统计DAU时,发现token失效,将自动进入登录流程
*
* \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;
/**
* (静态方法)处理应用拉起协议
* \param url 处理被其他应用呼起时的逻辑
* \return 处理结果,YES表示成功,NO表示失败
*/
+ (BOOL)HandleOpenURL:(NSURL *)url;
/**
* (静态方法)sdk是否可以处理应用拉起协议
* \param url 处理被其他应用呼起时的逻辑
* \return 处理结果,YES表示可以 NO表示不行
*/
+ (BOOL)CanHandleOpenURL:(NSURL *)url;
/**
* 退出登录
* \param delegate 第三方应用用于接收请求返回结果的委托对象
*/
- (void)logout:(id<TencentSessionDelegate>)delegate;
/**
* 判断登录态是否有效
* \return 处理结果,YES表示有效,NO表示无效,请用户重新登录授权
*/
- (BOOL)isSessionValid;
/**
* 获取用户个人信息
* \return 处理结果,YES表示API调用成功,NO表示API调用失败,登录态失败,重新登录
*/
- (BOOL)getUserInfo;
/**
* 获取用户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;
/**
* 获取微博好友名称输入提示,即通过字符串查找匹配的微博好友
* \param params 参数字典,字典的关键字参见TencentOAuthObject.h中的\ref TCMatchNickTipsDic
* \return 处理结果,YES表示API调用成功,NO表示API调用失败,登录态失败,重新登录
*/
- (BOOL)matchNickTips:(NSMutableDictionary *)params;
/**
* 获取最近的微博好友
* \param params 参数字典,字典的关键字参见TencentOAuthObject.h中的\ref TCGetIntimateFriendsDic
* \return 处理结果,YES表示API调用成功,NO表示API调用失败,登录态失败,重新登录
*/
- (BOOL)getIntimateFriends:(NSMutableDictionary *)params;
/**
* 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;
@end
/**
* \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;
@end
/**
* \brief TencentSessionDelegate iOS Open SDK 1.3 API回调协议
*
* 第三方应用需要实现每条需要调用的API的回调协议
*/
@protocol TencentSessionDelegate<NSObject, TencentLoginDelegate, TencentApiInterfaceDelegate>
@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;
/**
* 获取微博好友名称输入提示回调
* \param response API返回结果,具体定义参见sdkdef.h文件中\ref APIResponse
* \remarks 正确返回示例: \snippet example/matchNickTipsResponse.exp success
* 错误返回示例: \snippet example/matchNickTipsResponse.exp fail
*/
- (void)matchNickTipsResponse:(APIResponse*) response;
/**
* 获取最近的微博好友回调
* \param response API返回结果,具体定义参见sdkdef.h文件中\ref APIResponse
* \remarks 正确返回示例: \snippet example/getIntimateFriendsResponse.exp success
* 错误返回示例: \snippet example/getIntimateFriendsResponse.exp fail
*/
- (void)getIntimateFriendsResponse:(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
@@ -0,0 +1,504 @@
///
/// \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 = 1GIF = 2PNG = 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_nmlbs_x,lbs_y通常一起使用,来明确标识一个地址。
*/
@property (nonatomic, retain) TCOptionalStr paramLbs_x;
/**
* 纬度。-90.0到+90.0+表示北纬。lbs_nmlbs_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
* \note0:不发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 TCMatchNickTipsDic
/**
* \brief 微博获取好友输入提示的参数字典定义
*
* 可以直接填写相应参数后将对象当作参数传入API中
*/
@interface TCMatchNickTipsDic : TCAPIRequest
/**
* 返回一个对象用来进行API参数的填充
*
* \note 不用释放,返回的对象是自动释放的
*/
+ (TCMatchNickTipsDic *) dictionary;
/**
* 匹配字符串(目前匹配范围为我收听的人)
*/
@property (nonatomic, retain) TCRequiredStr paramMatch;
/**
* 请求个数(1-10
*/
@property (nonatomic, retain) TCRequiredStr paramReqnum;
@end
#pragma mark -
#pragma mark TCGetIntimateFriendsDic
/**
* \brief 微博获取最近联系人列表的参数字典定义
*
* 可以直接填写相应参数后将对象当作参数传入API中
*/
@interface TCGetIntimateFriendsDic : TCAPIRequest
/**
* 返回一个对象用来进行API参数的填充
*
* \note 不用释放,返回的对象是自动释放的
*/
+ (TCGetIntimateFriendsDic *) dictionary;
/**
* 请求个数(1-20
*/
@property (nonatomic, retain) TCRequiredStr paramReqnum;
@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
@@ -0,0 +1,79 @@
//
// WeiBoAPI.h
// TencentOpenApi_IOS
//
// Created by qqconnect on 13-6-25.
// Copyright (c) 2013年 Tencent. All rights reserved.
//
#import <Foundation/Foundation.h>
#import "sdkdef.h"
/** 微博相关接口基类 */
@interface WeiBo_baseRequest : TCAPIRequest
@end
/**
* \brief 发表一条微博信息(纯文本)到腾讯微博平台上。
* \note 注意连续两次发布的微博内容不可以重复。
*/
@interface WeiBo_add_t_POST : WeiBo_baseRequest
/**
* 表示要发表的微博内容。
* \note 必须为UTF-8编码,最长为140个汉字,也就是420字节。
* 如果微博内容中有URL,后台会自动将该URL转换为短URL,每个URL折算成11个字节。
* 若在此处@好友,需正确填写好友的微博账号,而非昵称。
*/
@property (nonatomic, retain) TCRequiredStr param_content;
/**
* 用户ip。
* \note 必须正确填写用户侧真实ip,不能为内网ip及以127或255开头的ip,以分析用户所在地。
*/
@property (nonatomic, retain) TCOptionalStr param_clientip;
/**
* 用户所在地理位置的经度。
* \note 为实数,最多支持10位有效数字。有效范围:-180.0到+180.0,+表示东经,默认为0.0。
*/
@property (nonatomic, retain) TCOptionalStr param_longitude;
/**
* 用户所在地理位置的纬度。
* \note 为实数,最多支持10位有效数字。有效范围:-90.0到+90.0,+表示北纬,默认为0.0。
*/
@property (nonatomic, retain) TCOptionalStr param_latitude;
/**
* 容错标志,支持按位操作,默认为0。
* \note 0×2:图片数据大小错误则报错;
* 0×4:检查图片格式不支持则报错;
* 0×8:上传图片失败则报错;
* 0×20:微博内容长度超过140字则报错;
* 0:以上错误均做容错处理,即发表普通微博;
* 0×2|0×4|0×8|0×20:同旧模式,以上各种情况均报错,不做兼容处理。
* 0x2,0x4,0x8 只对 \ref WeiBo_add_pic_t_POST 有效
*/
@property (nonatomic, retain) TCRequiredStr param_compatibleflag;
@end
/**
* \brief 上传一张图片,并发布一条消息到腾讯微博平台上。
* \note 除了图片参数 其他参数参照 \ref WeiBo_add_t_POST
*/
@interface WeiBo_add_pic_t_POST : WeiBo_add_t_POST
/**
* 要上传的图片的文件名以及图片的内容
* \note 图片仅支持gif、jpeg、jpg、png、bmp及ico格式
* (所有图片都会重新压缩,gif被重新压缩后不会再有动画效果),图片size小于4M
*/
@property (nonatomic, retain) TCRequiredImage param_pic;
@end
@@ -0,0 +1,296 @@
///
/// \file WeiyunAPI.h
/// \brief 提供微云平台相关接口的调用参数封装辅助类
///
/// Created by Tencent on 13-6-20.
/// Copyright (c) 2013年 Tencent. All rights reserved.
///
#import <Foundation/Foundation.h>
#import "sdkdef.h"
/** CGI请求上传数据回调协议 */
@protocol TCAPIRequestUploadDelegate <TCAPIRequestDelegate>
/**
* 询问是否要开始上传数据
* \param uploadRequest 对应的上传请求上下文
* \param storageRequest 用于上传数据的NSURLRequest对象
* \return 是否要开始上传数据,YES表示自动开始上传,NO表示不上传
* \note 目前自动上传逻辑不支持断点续传机制,建议上传的数据不要太大
*/
- (BOOL)cgiUploadRequest:(TCAPIRequest *)uploadRequest shouldBeginUploadingStorageRequest:(NSURLRequest *)storageRequest;
@end
/** CGI请求下载数据回调协议 */
@protocol TCAPIRequestDownloadDelegate <TCAPIRequestDelegate>
/**
* 询问是否要开始下载数据
* \param downloadRequest 对应的下载请求上下文
* \param storageRequest 用于下载数据的NSURLRequest对象
* \return 是否要开始下载数据,YES表示自动开始下载,NO表示不下载
* \note 目前自动下载逻辑不支持断点分块机制,建议下载的数据不要太大
*/
- (BOOL)cgiDownloadRequest:(TCAPIRequest *)downloadRequest shouldBeginDownloadingStorageRequest:(NSURLRequest *)storageRequest;
@end
/** 微云相关接口基类 */
@interface WeiYun_BaseRequest : TCAPIRequest
@end
#pragma mark - 照片相关
/**
* \brief 申请上传照片
*
* 本接口用于申请上传照片;然后app用返回的存储平台url地址、端口等信息上传照片文件自身内容到存储平台
* \note 是否需要APP申请API权限:是\n
* 是否需要用户授权:是
*/
@interface WeiYun_upload_photo_GET : WeiYun_BaseRequest
/** 待上传文件SHA */
@property (nonatomic, retain) TCRequiredStr param_sha;
/** 待上传文件MD5 */
@property (nonatomic, retain) TCRequiredStr param_md5;
/** 待上传文件size字节 */
@property (nonatomic, retain) TCRequiredStr param_size;
/** 待上传文件名 */
@property (nonatomic, retain) TCRequiredStr param_name;
/** control|normal,默认control */
@property (nonatomic, retain) TCOptionalStr param_upload_type;
/** 需要上传的数据 */
@property (nonatomic, retain) TCRequiredData paramUploadData;
@end
/**
* \brief 获取照片下载url地址
*
* 本接口用于获取照片下载信息;然后app用返回的存储平台url地址、端口等信息从存储平台下载文件内容
* \note 是否需要APP申请API权限:是\n
* 是否需要用户授权:是
*/
@interface WeiYun_download_photo_GET : WeiYun_BaseRequest
/** 待下载文件的ID,字符串(68字节) */
@property (nonatomic, retain) TCRequiredStr param_file_id;
@end
/**
* \brief 获取照片列表
*
* 本接口用于获取app目录下照片列表,用分片的方式获取,每分片最多200个文件
* \note 是否需要APP申请API权限:是\n
* 是否需要用户授权:是
*/
@interface WeiYun_get_photo_list_GET : WeiYun_BaseRequest
/** 所有文件数目的偏移,从0开始计数 */
@property (nonatomic, retain) TCRequiredStr param_offset;
/** 请求文件的数量,取值1-200 */
@property (nonatomic, retain) TCRequiredStr param_number;
@end
/**
* \brief 删除照片
*
* 本接口用于删除照片
* \note 是否需要APP申请API权限:是\n
* 是否需要用户授权:是
*/
@interface WeiYun_delete_photo_GET : WeiYun_BaseRequest
/** 待下载文件的ID,字符串(68字节) */
@property (nonatomic, retain) TCRequiredStr param_file_id;
@end
/**
* \brief 获取照片缩略图下载地址
*
* 本接口用于获取照片缩略图下载URL地址;然后app用返回的存储平台url地址、端口等信息上下载照片文件内容
* \note 是否需要APP申请API权限:是\n
* 是否需要用户授权:是
*/
@interface WeiYun_get_photo_thumb_GET : WeiYun_download_photo_GET
/** 缩略图尺寸,目前支持四种类型: 1024*1024640*640128*12864*64 */
@property (nonatomic, retain) TCRequiredStr param_thumb;
@end
#pragma mark - 视频相关
/**
* \brief 申请上传视频
*
* 本接口用于申请上传视频;然后app用返回的存储平台url地址、端口等信息上传视频内容到存储平台
* \note 是否需要APP申请API权限:是\n
* 是否需要用户授权:是
*/
@interface WeiYun_upload_video_GET : WeiYun_upload_photo_GET;
@end
/**
* \brief 获取视频下载url地址
*
* 本接口用于获取视频下载信息;然后app用返回的存储平台url地址、端口等信息从存储平台下载视频内容
* \note 是否需要APP申请API权限:是\n
* 是否需要用户授权:是
*/
@interface WeiYun_download_video_GET : WeiYun_download_photo_GET;
@end
/**
* \brief 获取视频列表
*
* 本接口用于获取本app目录下视频列表,用分片的方式获取,每分片最多200个文件
* \note 是否需要APP申请API权限:是\n
* 是否需要用户授权:是
*/
@interface WeiYun_get_video_list_GET : WeiYun_get_photo_list_GET;
@end
/**
* \brief 删除视频
*
* 本接口用于删除视频文件
* \note 是否需要APP申请API权限:是\n
* 是否需要用户授权:是
*/
@interface WeiYun_delete_video_GET : WeiYun_delete_photo_GET;
@end
#pragma mark - 音频相关
/**
* \brief 申请上传音频
*
* 本接口用于申请上传音频;然后app用返回的存储平台url地址、端口等信息上传音频内容到存储平台
* \note 是否需要APP申请API权限:是\n
* 是否需要用户授权:是
*/
@interface WeiYun_upload_music_GET : WeiYun_upload_photo_GET;
@end
/**
* \brief 获取音频下载url地址
*
* 本接口用于获取音频下载信息;然后app用返回的存储平台url地址、端口等信息从存储平台下载音频内容
* \note 是否需要APP申请API权限:是\n
* 是否需要用户授权:是
*/
@interface WeiYun_download_music_GET : WeiYun_download_photo_GET;
@end
/**
* \brief 获取音频列表
*
* 本接口用于获取本app目录下视频列表,用分片的方式获取,每分片最多200个文件
* \note 是否需要APP申请API权限:是\n
* 是否需要用户授权:是
*/
@interface WeiYun_get_music_list_GET : WeiYun_get_photo_list_GET;
@end
/**
* \brief 删除音频
*
* 本接口用于删除音频文件
* \note 是否需要APP申请API权限:是\n
* 是否需要用户授权:是
*/
@interface WeiYun_delete_music_GET : WeiYun_delete_photo_GET;
@end
#pragma mark - 结构化数据
/**
* \brief 查询key所对应的键值对是否存在
*/
@interface WeiYun_check_record_GET : WeiYun_BaseRequest
/** KV键值对的key,十六进制编码,字符串(对应的二进制字符串不超过100字节)*/
@property (nonatomic, retain) TCRequiredStr param_key;
@end
/**
* \brief 查询key所对应的键值对是否存在
* \note 参数参照 \ref WeiYun_check_record_GET
*/
@interface WeiYun_delete_record_GET : WeiYun_check_record_GET
@end
/**
* \brief 查询key所对应的键值对的value
* \note 参数参照 \ref WeiYun_check_record_GET
*/
@interface WeiYun_get_record_GET : WeiYun_check_record_GET
@end
/**
* \brief 创建key-value键值对
*/
@interface WeiYun_create_record_POST : WeiYun_BaseRequest
/** KV键值对的key,十六进制编码,字符串(对应的二进制串不超过100字节)*/
@property (nonatomic, retain)TCRequiredStr param_key;
/** KV键值对的value,十六进制编码,字符串(对应的二进制串不超过1M字节)*/
@property (nonatomic, retain)NSData *param_value;
@end
/**
* \brief 修改key-value键值对的value为新值
* \note 参数参照 \ref WeiYun_create_record_POST
*/
@interface WeiYun_modify_record_POST : WeiYun_create_record_POST
@end
/**
* \brief 查询登录用户的全部key列表
* \note 没有参数
*/
@interface WeiYun_query_all_record_GET : WeiYun_BaseRequest
@end
@@ -0,0 +1,502 @@
///
/// \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 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_ADD_PIC_T;
/** 删除一条微博信息 */
FOUNDATION_EXTERN NSString *const kOPEN_PERMISSION_DEL_T;
/** 获取一条微博的转播或评论信息列表 */
FOUNDATION_EXTERN NSString *const kOPEN_PERMISSION_GET_REPOST_LIST;
/** 获取登录用户自己的详细信息 */
FOUNDATION_EXTERN NSString *const kOPEN_PERMISSION_GET_INFO;
/** 获取其他用户的详细信息 */
FOUNDATION_EXTERN NSString *const kOPEN_PERMISSION_GET_OTHER_INFO;
/** 获取登录用户的听众列表 */
FOUNDATION_EXTERN NSString *const kOPEN_PERMISSION_GET_FANSLIST;
/** 获取登录用户的收听列表 */
FOUNDATION_EXTERN NSString *const kOPEN_PERMISSION_GET_IDOLLIST;
/** 收听腾讯微博上的用户 */
FOUNDATION_EXTERN NSString *const kOPEN_PERMISSION_ADD_IDOL;
/** 取消收听腾讯微博上的用户 */
FOUNDATION_EXTERN NSString *const kOPEN_PERMISSION_DEL_IDOL;
/** 获取微博中最近at的好友 */
FOUNDATION_EXTERN NSString *const kOPEN_PERMISSION_GET_INTIMATE_FRIENDS_WEIBO;
/** 获取微博中匹配昵称的好友 */
FOUNDATION_EXTERN NSString *const kOPEN_PERMISSION_MATCH_NICK_TIPS_WEIBO;
/** 获取会员用户基本信息 */
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_WEIYUN_UPLOAD_PIC;
/** 微云下载图片 */
FOUNDATION_EXTERN NSString *const kOPEN_PERMISSION_WEIYUN_DOWNLOAD_PIC;
/** 微云获得图片列表 */
FOUNDATION_EXTERN NSString *const kOPEN_PERMISSION_WEIYUN_GET_PIC_LIST;
/** 微云删除图片 */
FOUNDATION_EXTERN NSString *const kOPEN_PERMISSION_WEIYUN_DELETE_PIC;
/** 微云获取缩略图 */
FOUNDATION_EXTERN NSString *const kOPEN_PERMISSION_WEIYUN_GET_PIC_THUMB;
/** 微云上传音乐 */
FOUNDATION_EXTERN NSString *const kOPEN_PERMISSION_WEIYUN_UPLOAD_MUSIC;
/** 微云下载音乐 */
FOUNDATION_EXTERN NSString *const kOPEN_PERMISSION_WEIYUN_DOWNLOAD_MUSIC;
/** 微云获取音乐列表 */
FOUNDATION_EXTERN NSString *const kOPEN_PERMISSION_WEIYUN_GET_MUSIC_LIST;
/** 微云删除音乐 */
FOUNDATION_EXTERN NSString *const kOPEN_PERMISSION_WEIYUN_DELETE_MUSIC;
/** 微云上传视频 */
FOUNDATION_EXTERN NSString *const kOPEN_PERMISSION_WEIYUN_UPLOAD_VIDEO;
/** 微云下载视频 */
FOUNDATION_EXTERN NSString *const kOPEN_PERMISSION_WEIYUN_DOWNLOAD_VIDEO;
/** 微云获取视频列表 */
FOUNDATION_EXTERN NSString *const kOPEN_PERMISSION_WEIYUN_GET_VIDEO_LIST;
/** 微云删除视频 */
FOUNDATION_EXTERN NSString *const kOPEN_PERMISSION_WEIYUN_DELETE_VIDEO;
/** 微云上传照片 */
FOUNDATION_EXTERN NSString *const kOPEN_PERMISSION_WEIYUN_UPLOAD_PHOTO;
/** 微云下载照片 */
FOUNDATION_EXTERN NSString *const kOPEN_PERMISSION_WEIYUN_DOWNLOAD_PHOTO;
/** 微云获得照片列表 */
FOUNDATION_EXTERN NSString *const kOPEN_PERMISSION_WEIYUN_GET_PHOTO_LIST;
/** 微云删除照片 */
FOUNDATION_EXTERN NSString *const kOPEN_PERMISSION_WEIYUN_DELETE_PHOTO;
/** 微云获取图片缩略图 */
FOUNDATION_EXTERN NSString *const kOPEN_PERMISSION_WEIYUN_GET_PHOTO_THUMB;
/** 微云检查记录 */
FOUNDATION_EXTERN NSString *const kOPEN_PERMISSION_WEIYUN_CHECK_RECORD;
/** 微云创建记录 */
FOUNDATION_EXTERN NSString *const kOPEN_PERMISSION_WEIYUN_CREATE_RECORD;
/** 微云删除记录 */
FOUNDATION_EXTERN NSString *const kOPEN_PERMISSION_WEIYUN_DELETE_RECORD;
/** 微云获取记录 */
FOUNDATION_EXTERN NSString *const kOPEN_PERMISSION_WEIYUN_GET_RECORD;
/** 微云修改记录 */
FOUNDATION_EXTERN NSString *const kOPEN_PERMISSION_WEIYUN_MODIFY_RECORD;
/** 微云获取所有记录列表 */
FOUNDATION_EXTERN NSString *const kOPEN_PERMISSION_WEIYUN_QUERY_ALL_RECORD;
///@}
/**
* \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
Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

@@ -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="http://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>
Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

@@ -0,0 +1,40 @@
//
// UMSocialQQHandler.h
// SocialSDK
//
// Created by yeahugo on 13-8-5.
// Copyright (c) 2013年 Umeng. All rights reserved.
//
#import <Foundation/Foundation.h>
#import <TencentOpenAPI/QQApiInterface.h> //QQ互联 SDK
#import <TencentOpenAPI/TencentOAuth.h>
@interface UMSocialQQHandler : NSObject
/**
设置分享到手机QQ和QQ空间的应用ID
@param appId QQ互联应用Id
@param appKey QQ互联应用Key
@param url 分享URL链接
*/
+(void)setQQWithAppId:(NSString *)appId appKey:(NSString *)appKey url:(NSString *)url;
/**
设置在没有安装QQ客户端的情况下,是否支持单独授权到QQ互联
@param supportWebView 是否支持没有安装QQ客户端的情况下,是否支持单独授权
*/
+(void)setSupportWebView:(BOOL)supportWebView;
/**
deprecated API,默认使用Qzone SSO授权
设置QQ空间是否用手机QQ客户端进行SSO授权,默认使用webview授权
@param supportQzoneSSO 是否用手机QQ授权
*/
//+ (void)setSupportQzoneSSO:(BOOL)supportQzoneSSO;
@end
@@ -0,0 +1,22 @@
//
// ;
// SocialSDK
//
// Created by yeahugo on 13-8-6.
// Copyright (c) 2013年 Umeng. All rights reserved.
//
#import <Foundation/Foundation.h>
@interface UMSocialWechatHandler : NSObject
/**
设置微信AppId和url地址
@param app_Id 微信应用Id
@param url 微信消息url地址
*/
+ (void)setWXAppId:(NSString *)app_Id appSecret:(NSString *)appSecret url:(NSString *)url;
@end
@@ -0,0 +1,126 @@
//
// WXApi.h
// ApiClient
//
// Created by Tencent on 12-2-28.
// Copyright (c) 2012年 Tencent. All rights reserved.
//
#import <Foundation/Foundation.h>
#import "WXApiObject.h"
#pragma mark -
/*! @brief 接收并处理来自微信终端程序的事件消息
*
* 接收并处理来自微信终端程序的事件消息,期间微信界面会切换到第三方应用程序。
* WXApiDelegate 会在handleOpenURL:delegate:中使用并触发。
*/
@protocol WXApiDelegate <NSObject>
@optional
/*! @brief 收到一个来自微信的请求,第三方应用程序处理完后调用sendResp向微信发送结果
*
* 收到一个来自微信的请求,异步处理完成后必须调用sendResp发送处理结果给微信。
* 可能收到的请求有GetMessageFromWXReq、ShowMessageFromWXReq等。
* @param req 具体请求内容,是自动释放的
*/
-(void) onReq:(BaseReq*)req;
/*! @brief 发送一个sendReq后,收到微信的回应
*
* 收到一个来自微信的处理结果。调用一次sendReq后会收到onResp。
* 可能收到的处理结果有SendMessageToWXResp、SendAuthResp等。
* @param resp具体的回应内容,是自动释放的
*/
-(void) onResp:(BaseResp*)resp;
@end
#pragma mark -
/*! @brief 微信Api接口函数类
*
* 该类封装了微信终端SDK的所有接口
*/
@interface WXApi : NSObject
/*! @brief WXApi的成员函数,向微信终端程序注册第三方应用。
*
* 需要在每次启动第三方应用程序时调用。第一次调用后,会在微信的可用应用列表中出现。
* iOS7及以上系统需要调起一次微信才会出现在微信的可用应用列表中。
* @attention 请保证在主线程中调用此函数
* @param appid 微信开发者ID
* @return 成功返回YES,失败返回NO。
*/
+(BOOL) registerApp:(NSString *)appid;
/*! @brief WXApi的成员函数,向微信终端程序注册第三方应用。
*
* 需要在每次启动第三方应用程序时调用。第一次调用后,会在微信的可用应用列表中出现。
* @see registerApp
* @param appid 微信开发者ID
* @param appdesc 应用附加信息,长度不超过1024字节
* @return 成功返回YES,失败返回NO。
*/
+(BOOL) registerApp:(NSString *)appid withDescription:(NSString *)appdesc;
/*! @brief 处理微信通过URL启动App时传递的数据
*
* 需要在 application:openURL:sourceApplication:annotation:或者application:handleOpenURL中调用。
* @param url 微信启动第三方应用时传递过来的URL
* @param delegate WXApiDelegate对象,用来接收微信触发的消息。
* @return 成功返回YES,失败返回NO。
*/
+(BOOL) handleOpenURL:(NSURL *) url delegate:(id<WXApiDelegate>) delegate;
/*! @brief 检查微信是否已被用户安装
*
* @return 微信已安装返回YES,未安装返回NO。
*/
+(BOOL) isWXAppInstalled;
/*! @brief 判断当前微信的版本是否支持OpenApi
*
* @return 支持返回YES,不支持返回NO。
*/
+(BOOL) isWXAppSupportApi;
/*! @brief 获取微信的itunes安装地址
*
* @return 微信的安装地址字符串。
*/
+(NSString *) getWXAppInstallUrl;
/*! @brief 获取当前微信SDK的版本号
*
* @return 返回当前微信SDK的版本号
*/
+(NSString *) getApiVersion;
/*! @brief 打开微信
*
* @return 成功返回YES,失败返回NO。
*/
+(BOOL) openWXApp;
/*! @brief 发送请求到微信,等待微信返回onResp
*
* 函数调用后,会切换到微信的界面。第三方应用程序等待微信返回onResp。微信在异步处理完成后一定会调用onResp。支持以下类型
* SendAuthReq、SendMessageToWXReq等。
* @param req 具体的发送请求,在调用函数后,请自己释放。
* @return 成功返回YES,失败返回NO。
*/
+(BOOL) sendReq:(BaseReq*)req;
/*! @brief 收到微信onReq的请求,发送对应的应答给微信,并切换到微信界面
*
* 函数调用后,会切换到微信的界面。第三方应用程序收到微信onReq的请求,异步处理该请求,完成后必须调用该函数。可能发送的相应有
* GetMessageFromWXResp、ShowMessageFromWXResp等。
* @param resp 具体的应答内容,调用函数后,请自己释放
* @return 成功返回YES,失败返回NO。
*/
+(BOOL) sendResp:(BaseResp*)resp;
@end
@@ -0,0 +1,361 @@
//
// MMApiObject.h
// ApiClient
//
// Created by Tencent on 12-2-28.
// Copyright (c) 2012年 Tencent. All rights reserved.
//
#import <Foundation/Foundation.h>
/*! @brief 错误码
*
*/
enum WXErrCode {
WXSuccess = 0, /**< 成功 */
WXErrCodeCommon = -1, /**< 普通错误类型 */
WXErrCodeUserCancel = -2, /**< 用户点击取消并返回 */
WXErrCodeSentFail = -3, /**< 发送失败 */
WXErrCodeAuthDeny = -4, /**< 授权失败 */
WXErrCodeUnsupport = -5, /**< 微信不支持 */
};
/*! @brief 请求发送场景
*
*/
enum WXScene {
WXSceneSession = 0, /**< 聊天界面 */
WXSceneTimeline = 1, /**< 朋友圈 */
WXSceneFavorite = 2, /**< 收藏 */
};
/*! @brief 该类为微信终端SDK所有请求类的基类
*
*/
@interface BaseReq : NSObject
/** 请求类型 */
@property (nonatomic, assign) int type;
@end
/*! @brief 该类为微信终端SDK所有响应类的基类
*
*/
@interface BaseResp : NSObject
/** 错误码 */
@property (nonatomic, assign) int errCode;
/** 错误提示字符串 */
@property (nonatomic, retain) NSString *errStr;
/** 响应类型 */
@property (nonatomic, assign) int type;
@end
@class WXMediaMessage;
/*! @brief 第三方程序发送消息至微信终端程序的接口
*
* 第三方程序向微信发送信息需要调用此接口,并传入具体请求类型作为参数。请求的信息内容包括文本消息和多媒体消息,
* 分别对应于text和message成员。调用该方法后,微信处理完信息会向第三方程序发送一个处理结果。
* @see SendMessageToWXResp
*/
@interface SendMessageToWXReq : BaseReq
/** 发送消息的文本内容
* @attention 文本长度必须大于0且小于10K
*/
@property (nonatomic, retain) NSString* text;
/** 发送消息的多媒体内容
* @see WXMediaMessage
*/
@property (nonatomic, retain) WXMediaMessage* message;
/** 发送消息的类型,包括文本消息和多媒体消息两种
* @attention 两者只能选择其一,不能同时发送文本和多媒体消息
*/
@property (nonatomic, assign) BOOL bText;
/** 发送的目标场景,可以选择发送到聊天界面(WXSceneSession)、朋友圈(WXSceneTimeline)或收藏(WXSceneFavorite)。
* @note 默认发送到聊天界面。
* @see WXScene
*/
@property (nonatomic, assign) int scene;
@end
/*! @brief 第三方程序发送SendMessageToWXReq至微信,微信处理完成后返回的处理结果类型。
*
* 第三方程序向微信终端发送SendMessageToWXReq后,微信发送回来的处理结果,该结果用SendMessageToWXResp表示。
*/
@interface SendMessageToWXResp : BaseResp
@end
/*! @brief 微信终端向第三方程序请求提供内容请求类型。
*
* 微信终端向第三方程序请求提供内容,微信终端会向第三方程序发送GetMessageFromWXReq请求类型,
* 需要第三方程序调用sendResp返回一个GetMessageFromWXResp消息结构体。
*/
@interface GetMessageFromWXReq : BaseReq
@end
/*! @brief 微信终端向第三方程序请求提供内容,第三方程序向微信终端返回处理结果类型。
*
* 微信终端向第三方程序请求提供内容,第三方程序调用sendResp向微信终端返回一个GetMessageFromWXResp消息结构体。
*/
@interface GetMessageFromWXResp : BaseResp
/** 向微信终端提供的文本内容
* @attention 文本长度必须大于0且小于10K
*/
@property (nonatomic, retain) NSString* text;
/** 向微信终端提供的多媒体内容。
* @see WXMediaMessage
*/
@property (nonatomic, retain) WXMediaMessage* message;
/** 向微信终端提供内容的消息类型,包括文本消息和多媒体消息两种
* @attention 两者只能选择其一,不能同时发送文本和多媒体消息
*/
@property (nonatomic, assign) BOOL bText;
@end
/*! @brief 微信通知第三方程序,要求第三方程序显示的消息结构体。
*
* 微信需要通知第三方程序显示或处理某些内容时,会向第三方程序发送ShowMessageFromWXReq消息结构体。
* 第三方程序处理完内容后调用sendResp向微信终端发送ShowMessageFromWXResp。
*/
@interface ShowMessageFromWXReq : BaseReq
/** 微信终端向第三方程序发送的要求第三方程序处理的多媒体内容
* @see WXMediaMessage
*/
@property (nonatomic, retain) WXMediaMessage* message;
@end
/*! @brief 微信通知第三方程序,要求第三方程序显示或处理某些消息,第三方程序处理完后向微信终端发送的处理结果。
*
* 微信需要通知第三方程序显示或处理某些内容时,会向第三方程序发送ShowMessageFromWXReq消息结构体。
* 第三方程序处理完内容后调用sendResp向微信终端发送ShowMessageFromWXResp。
*/
@interface ShowMessageFromWXResp : BaseResp
@end
/*! @brief 微信终端打开第三方程序请求类型
*
* 微信向第三方发送的结构体,第三方不需要返回
*/
@interface LaunchFromWXReq : BaseReq
@end
#pragma mark - WXMediaMessage
/*! @brief 多媒体消息结构体
*
* 用于微信终端和第三方程序之间传递消息的多媒体消息内容
*/
@interface WXMediaMessage : NSObject
+(WXMediaMessage *) message;
/** 标题
* @attention 长度不能超过512字节
*/
@property (nonatomic, retain) NSString *title;
/** 描述内容
* @attention 长度不能超过1K
*/
@property (nonatomic, retain) NSString *description;
/** 缩略图数据
* @attention 内存大小不能超过32K
*/
@property (nonatomic, retain) NSData *thumbData;
/** 多媒体消息标签,第三方程序可选填此字段,用于数据运营统计等
* @attention 长度不能超过64字节
*/
@property (nonatomic, retain) NSString *mediaTagName;
/** 多媒体数据对象,可以为WXImageObjectWXMusicObjectWXVideoObjectWXWebpageObject等。 */
@property (nonatomic, retain) id mediaObject;
/*! @brief 设置消息缩略图的方法
*
* @param image 缩略图
* @attention 内存大小不能超过32K
*/
- (void) setThumbImage:(UIImage *)image;
@end
#pragma mark -
/*! @brief 多媒体消息中包含的图片数据对象
*
* 微信终端和第三方程序之间传递消息中包含的图片数据对象。
* @attention imageData和imageUrl成员不能同时为空
* @see WXMediaMessage
*/
@interface WXImageObject : NSObject
/*! @brief 返回一个WXImageObject对象
*
* @note 返回的WXImageObject对象是自动释放的
*/
+(WXImageObject *) object;
/** 图片真实数据内容
* @attention 大小不能超过10M
*/
@property (nonatomic, retain) NSData *imageData;
/** 图片url
* @attention 长度不能超过10K
*/
@property (nonatomic, retain) NSString *imageUrl;
@end
/*! @brief 多媒体消息中包含的音乐数据对象
*
* 微信终端和第三方程序之间传递消息中包含的音乐数据对象。
* @attention musicUrl和musicLowBandUrl成员不能同时为空。
* @see WXMediaMessage
*/
@interface WXMusicObject : NSObject
/*! @brief 返回一个WXMusicObject对象
*
* @note 返回的WXMusicObject对象是自动释放的
*/
+(WXMusicObject *) object;
/** 音乐网页的url地址
* @attention 长度不能超过10K
*/
@property (nonatomic, retain) NSString *musicUrl;
/** 音乐lowband网页的url地址
* @attention 长度不能超过10K
*/
@property (nonatomic, retain) NSString *musicLowBandUrl;
/** 音乐数据url地址
* @attention 长度不能超过10K
*/
@property (nonatomic, retain) NSString *musicDataUrl;
/**音乐lowband数据url地址
* @attention 长度不能超过10K
*/
@property (nonatomic, retain) NSString *musicLowBandDataUrl;
@end
/*! @brief 多媒体消息中包含的视频数据对象
*
* 微信终端和第三方程序之间传递消息中包含的视频数据对象。
* @attention videoUrl和videoLowBandUrl不能同时为空。
* @see WXMediaMessage
*/
@interface WXVideoObject : NSObject
/*! @brief 返回一个WXVideoObject对象
*
* @note 返回的WXVideoObject对象是自动释放的
*/
+(WXVideoObject *) object;
/** 视频网页的url地址
* @attention 长度不能超过10K
*/
@property (nonatomic, retain) NSString *videoUrl;
/** 视频lowband网页的url地址
* @attention 长度不能超过10K
*/
@property (nonatomic, retain) NSString *videoLowBandUrl;
@end
/*! @brief 多媒体消息中包含的网页数据对象
*
* 微信终端和第三方程序之间传递消息中包含的网页数据对象。
* @see WXMediaMessage
*/
@interface WXWebpageObject : NSObject
/*! @brief 返回一个WXWebpageObject对象
*
* @note 返回的WXWebpageObject对象是自动释放的
*/
+(WXWebpageObject *) object;
/** 网页的url地址
* @attention 不能为空且长度不能超过10K
*/
@property (nonatomic, retain) NSString *webpageUrl;
@end
/*! @brief 多媒体消息中包含的App扩展数据对象
*
* 第三方程序向微信终端发送包含WXAppExtendObject的多媒体消息,
* 微信需要处理该消息时,会调用该第三方程序来处理多媒体消息内容。
* @note extInfo和fileData不能同时为空
* @see WXMediaMessage
*/
@interface WXAppExtendObject : NSObject
/*! @brief 返回一个WXAppExtendObject对象
*
* @note 返回的WXAppExtendObject对象是自动释放的
*/
+(WXAppExtendObject *) object;
/** App文件数据,该数据发送给微信好友,微信好友需要点击后下载数据,微信终端会回传给第三方程序处理
* @attention 大小不能超过10M
*/
@property (nonatomic, retain) NSData *fileData;
/** 第三方程序自定义简单数据,微信终端会回传给第三方程序处理
* @attention 长度不能超过2K
*/
@property (nonatomic, retain) NSString *extInfo;
/**
* @attention Deprecated
*/
@property (nonatomic, retain) NSString *url;
@end
/*! @brief 多媒体消息中包含的表情数据对象
*
* 微信终端和第三方程序之间传递消息中包含的表情数据对象。
* @see WXMediaMessage
*/
@interface WXEmoticonObject : NSObject
/*! @brief 返回一个WXEmoticonObject对象
*
* @note 返回的WXEmoticonObject对象是自动释放的
*/
+(WXEmoticonObject *) object;
/** 表情真实数据内容
* @attention 大小不能超过10M
*/
@property (nonatomic, retain) NSData *emoticonData;
@end
/*! @brief 多媒体消息中包含的文件数据对象
*
* @see WXMediaMessage
*/
@interface WXFileObject : NSObject
/*! @brief 返回一个WXFileObject对象
*
* @note 返回的WXFileObject对象是自动释放的
*/
+(WXFileObject *) object;
/** 文件后缀名
* @attention 长度不超过64字节
*/
@property (nonatomic, retain) NSString *fileExtension;
/** 文件真实数据内容
* @attention 大小不能超过10M
*/
@property (nonatomic, retain) NSData *fileData;
@end