Unity项目集成Mob的社会化分享SDK之发布到iOS平台
Mob也属于业界比较流行使用的第三方服务平台。虽然友盟也提供了社会化分享SDK,但是个人感觉没Mob的好使,并且好像友盟后台数据实时更新比较迟缓。另外,值得一提的是,Mob的官网客服咨询确实很给力的,这里给Mob打一下广告
该片博客主要是针对Unity项目集成ShareSDK并且发布到iOS平台的步骤详解。另外针对Android平台的下次奉上。
步骤1:首先,前往Mob官网注册账号(如果没有的话)链接
http://mob.com/#/index 。然后登陆,进入后台,为你的App项目iOS版申请AppKey。
注意:App项目发布的版本不同,需要分别申请AppKey。
步骤2:接着下载ShareSDK For Unity3d
若是打开这个demo工程,目录如下
步骤3:打开你的项目工程,如果你只是要发布到IOS平台的话,
你可以只需把iOS目录下文件、MinijSON以及ShareSDK这些文件复制到你的项目工程中。另外注意的是:在你的项目工程目录结构中,这些导入的文件存放目录结构应与Demo工程一致。
我的项目工程目录结构在导入上述文件后如下截图所示:
步骤4:将ShareSDK.cs挂在到你场景中一致激活的对象身上如MainCamera,又或者自己另外新建一个对象。比如,我在我的项目中新建了一个叫ShareSDK对象,并将ShareSDK.cs脚本挂在它身上(
建议你还是一边参阅Mob关于ShareSDK---Unity3D快速集成指南,一边参考我的这篇博客较好)
另外,你把调用ShareSDK.cs脚本实现我们在项目工程中分享功能的脚本也挂在其身上。比如:我的项目中Demo.cs就是
using UnityEngine;
using System;
using System.Collections;
using System.Collections.Generic;
using cn.sharesdk.unity3d;
public class Demo : MonoBehaviour {
public GUISkin demoSkin;
// Use this for initialization
void Start ()
{
ShareSDK.setCallbackObjectName("ShareSDK");
//appkey for your project(ios version)in Mob
ShareSDK.open ("xxxxxxxx");
//Sina Weibo
Hashtable sinaWeiboConf = new Hashtable();
sinaWeiboConf.Add("app_key", "xxxxxxxxx");
sinaWeiboConf.Add("app_secret", "623cb0668d6f6357bcda5db6e432b40f");
sinaWeiboConf.Add("redirect_uri", "http://cy.kyd2002.com/Picbook/default.aspx");
ShareSDK.setPlatformConfig (PlatformType.SinaWeibo, sinaWeiboConf);
//QZone
Hashtable qzConf = new Hashtable();
qzConf.Add("app_id", "xxxxxxxx");
qzConf.Add("app_key", "XjNXDmguk4KlySZE");
ShareSDK.setPlatformConfig (PlatformType.QZone, qzConf);
//WeChat
Hashtable wcConf = new Hashtable();
wcConf.Add("app_id", "wxxxxxxxx");
ShareSDK.setPlatformConfig (PlatformType.WeChatSession, wcConf);
ShareSDK.setPlatformConfig (PlatformType.WeChatTimeline, wcConf);
ShareSDK.setPlatformConfig (PlatformType.WeChatFav, wcConf);
//QQ
Hashtable qqConf = new Hashtable();
qqConf.Add("app_id", "XXXXXX");
ShareSDK.setPlatformConfig (PlatformType.QQ, qqConf);
}
// Update is called once per frame
void Update ()
{
if (Input.GetKeyDown(KeyCode.Escape)) {
ShareSDK.close();
Application.Quit();
}
}
public void ShareFenX()
{
Hashtable content = new Hashtable();
content["content"] = "本应用以小刺猬的生日愿望 —— 制作生日蛋糕为故事导线,呈现了森林哺乳动物温馨友爱的场景,让孩子在丰富的互动体验中了解森林哺乳动物的特点。创意丰富的互动体验让孩子悦读悦美!http://cy.kyd2002.com/Picbook/default.aspx";
content["image"] = "http://cy.kyd2002.com/Picbook/icon.png";
content["title"] = "小刺猬的生日蛋糕";
content["description"] = "小朋友,一起来看看小刺猬这个特别的生日蛋糕吧!";
content["url"] = "http://cy.kyd2002.com/Picbook/default.aspx";
content["type"] = Convert.ToString((int)ContentType.News);
content["siteUrl"] = "http://cy.kyd2002.com/Picbook/default.aspx";
content["site"] = "互动绘本";
content["musicUrl"] = "";
ShareResultEvent evt = new ShareResultEvent(ShareResultHandler);
ShareSDK.showShareMenu(null, content, 100, 100, MenuArrowDirection.Up, evt);
// ShareSDK.showShareView (PlatformType.Any, content, evt);
}
//void OnGUI ()
//{
// GUI.skin = demoSkin;
// float scale = 1.0f;
// if (Application.platform == RuntimePlatform.IPhonePlayer)
// {
// scale = Screen.width / 320;
// }
// float btnWidth = 200 * scale;
// float btnHeight = 45 * scale;
// float btnTop = 20 * scale;
// GUI.skin.button.fontSize = Convert.ToInt32(16 * scale);
// if (GUI.Button(new Rect((Screen.width - btnWidth) / 2, btnTop, btnWidth, btnHeight), "Authorize"))
// {
// AuthResultEvent evt = new AuthResultEvent(AuthResultHandler);
// ShareSDK.authorize(PlatformType.SinaWeibo, evt);
// }
// btnTop += btnHeight + 20 * scale;
// if (GUI.Button(new Rect((Screen.width - btnWidth) / 2, btnTop, btnWidth, btnHeight), "Get User Info"))
// {
// GetUserInfoResultEvent evt = new GetUserInfoResultEvent(GetUserInfoResultHandler);
// ShareSDK.getUserInfo(PlatformType.SinaWeibo, evt);
// }
// btnTop += btnHeight + 20 * scale;
// if (GUI.Button(new Rect((Screen.width - btnWidth) / 2, btnTop, btnWidth, btnHeight), "Show Share Menu"))
// {
// Hashtable content = new Hashtable();
// content["content"] = "this is a test string.";
// content["image"] = "http://img.baidu.com/img/image/zhenrenmeinv0207.jpg";
// content["title"] = "test title";
// content["description"] = "test description";
// content["url"] = "http://www.mob.com";
// content["type"] = Convert.ToString((int)ContentType.News);
// content["siteUrl"] = "http://www.mob.com";
// content["site"] = "ShareSDK";
// content["musicUrl"] = "http://mp3.mwap8.com/destdir/Music/2009/20090601/ZuiXuanMinZuFeng20090601119.mp3";
// ShareResultEvent evt = new ShareResultEvent(ShareResultHandler);
// ShareSDK.showShareMenu (null, content, 100, 100, MenuArrowDirection.Up, evt);
// }
// btnTop += btnHeight + 20 * scale;
// if (GUI.Button(new Rect((Screen.width - btnWidth) / 2, btnTop, btnWidth, btnHeight), "Show Share View"))
// {
// Hashtable content = new Hashtable();
// content["content"] = "this is a test string.";
// content["image"] = "http://img.baidu.com/img/image/zhenrenmeinv0207.jpg";
// content["title"] = "test title";
// content["description"] = "test description";
// content["url"] = "http://www.mob.com";
// content["type"] = Convert.ToString((int)ContentType.News);
// content["siteUrl"] = "http://www.mob.com";
// content["site"] = "ShareSDK";
// content["musicUrl"] = "http://mp3.mwap8.com/destdir/Music/2009/20090601/ZuiXuanMinZuFeng20090601119.mp3";
// ShareSDK.customSinaWeiboShareContent(content, "sina weibo test string", InheritedValue.VALUE, null);
// ShareResultEvent evt = new ShareResultEvent(ShareResultHandler);
// ShareSDK.showShareView (PlatformType.Any, content, evt);
// }
// btnTop += btnHeight + 20 * scale;
// if (GUI.Button(new Rect((Screen.width - btnWidth) / 2, btnTop, btnWidth, btnHeight), "Share Content"))
// {
// Hashtable content = new Hashtable();
// content["content"] = "this is a test string.";
// content["image"] = "http://img.baidu.com/img/image/zhenrenmeinv0207.jpg";
// content["title"] = "test title";
// content["description"] = "test description";
// content["url"] = "http://www.mob.com";
// content["type"] = Convert.ToString((int)ContentType.News);
// content["siteUrl"] = "http://www.mob.com";
// content["site"] = "ShareSDK";
// content["musicUrl"] = "http://mp3.mwap8.com/destdir/Music/2009/20090601/ZuiXuanMinZuFeng20090601119.mp3";
// ShareResultEvent evt = new ShareResultEvent(ShareResultHandler);
// ShareSDK.shareContent (PlatformType.SinaWeibo, content, evt);
// }
// btnTop += btnHeight + 20 * scale;
// if (GUI.Button(new Rect((Screen.width - btnWidth) / 2, btnTop, btnWidth, btnHeight), "Get Friends SinaWeibo "))
// {
// GetFriendsResultEvent evt = new GetFriendsResultEvent(GetFriendsResultHandler);
// ShareSDK.getFriends (PlatformType.SinaWeibo, null, evt);
// }
// btnTop += btnHeight + 20 * scale;
// if (GUI.Button(new Rect((Screen.width - btnWidth) / 2, btnTop, btnWidth, btnHeight), "Get Token SinaWeibo "))
// {
// GetCredentialResultEvent evt = new GetCredentialResultEvent(GetTokenResultHandler);
// ShareSDK.getCredential (PlatformType.SinaWeibo, evt);
// }
//}
void AuthResultHandler(ResponseState state, PlatformType type, Hashtable error)
{
if (state == ResponseState.Success)
{
print ("success !");
}
else if (state == ResponseState.Fail)
{
print ("fail! error code = " + error["error_code"] + "; error msg = " + error["error_msg"]);
}
else if (state == ResponseState.Cancel)
{
print ("cancel !");
}
}
void GetUserInfoResultHandler (ResponseState state, PlatformType type, Hashtable user, Hashtable error)
{
if (state == ResponseState.Success)
{
print ("get user result :");
print (MiniJSON.jsonEncode(user));
}
else if (state == ResponseState.Fail)
{
print ("fail! error code = " + error["error_code"] + "; error msg = " + error["error_msg"]);
}
else if (state == ResponseState.Cancel)
{
print ("cancel !");
}
}
void ShareResultHandler (ResponseState state, PlatformType type, Hashtable shareInfo, Hashtable error, bool end)
{
if (state == ResponseState.Success)
{
print ("share result :");
print (MiniJSON.jsonEncode(shareInfo));
}
else if (state == ResponseState.Fail)
{
print ("fail! error code = " + error["error_code"] + "; error msg = " + error["error_msg"]);
}
else if (state == ResponseState.Cancel)
{
print ("cancel !");
}
}
void GetFriendsResultHandler (ResponseState state, PlatformType type, ArrayList friends, Hashtable error)
{
if (state == ResponseState.Success)
{
print ("share result :");
print (MiniJSON.jsonEncode(friends));
}
else if (state == ResponseState.Fail)
{
print ("fail! error code = " + error["error_code"] + "; error msg = " + error["error_msg"]);
}
else if (state == ResponseState.Cancel)
{
print ("cancel !");
}
}
void GetTokenResultHandler (ResponseState state, PlatformType type, Hashtable credential, Hashtable error)
{
if (state == ResponseState.Success)
{
print ("share result :");
print (MiniJSON.jsonEncode(credential));
}
else if (state == ResponseState.Fail)
{
print ("fail! error code = " + error["error_code"] + "; error msg = " + error["error_msg"]);
}
else if (state == ResponseState.Cancel)
{
print ("cancel !");
}
}
}
脚本中关于各方法的含义作用,请读者参考Mob官方关于Unity3d快速集成指南的解释说明吧。关于Mob社会化分享在ios平台成功实现的重点是在转换到Xcode项目中,进一步设置修改那块儿。按照官方集成文档步骤设置修改还是有缺陷不够具体的地方。
注意1:关于那些集成的分享渠道的各自的AppKey也需要各位去相应的新浪微博、微信开发平台、腾讯开放平台注册申请的;新浪微博需要设置其回调页,否则可能会在后面导致回调不成功。
注意2:如果在后面iOS真机测试时,发现分享的内容乱码的话,你需要将Demo.cs文件在windows系统记事本打开并保存为utf-8格式。
在我的项目中,主要集成了新浪微博、微信系列以及QQ和空间。因此按照集成文档所说的,可以根据我们需要的分享渠道情况,进行相应的添加或删除!(
值得提醒的是,新浪微博会自动识别,这里无须定义其宏定义和引入其相应的头文件和引用)
我项目中该文件进行修改之后,如下供参考:
//
// ShareSDKUnity3DBridge.m
// Unity-iPhone
//
// Created by 冯 鸿杰 on 14-2-14.
//
//
#import "ShareSDKUnity3DBridge.h"
#import <ShareSDK/ShareSDK.h>
#import <SHareSDK/ShareSDK+Utils.h>
#import <AGCommon/CMRegexKitLite.h>
#import <AGCommon/UIDevice+Common.h>
#define INHERITED_VALUE_STR @"{inherited}"
#define __SHARESDK_WECHAT__
//#define __SHARESDK_YIXIN__
//#define __SHARESDK_PINTEREST__
//#define __SHARESDK_GOOGLEPLUS__
#define __SHARESDK_QQ__
//#define __SHARESDK_RENREN__
//#define __SHARESDK_TENCENT_WEIBO__
#ifdef __SHARESDK_WECHAT__
#import "WXApi.h"
#endif
//#ifdef __SHARESDK_YIXIN__
//#import "YXApi.h"
//#endif
//
//#ifdef __SHARESDK_PINTEREST__
//#import <Pinterest/Pinterest.h>
//#endif
//
//#ifdef __SHARESDK_GOOGLEPLUS__
//#import <GoogleOpenSource/GoogleOpenSource.h>
//#import <GooglePlus/GooglePlus.h>
//#endif
#ifdef __SHARESDK_QQ__
#import <TencentOpenAPI/TencentOAuth.h>
#import <TencentOpenAPI/QQApiInterface.h>
#endif
//#ifdef __SHARESDK_RENREN__
//#import <RennSDK/RennSDK.h>
//#endif
//
//#ifdef __SHARESDK_TENCENT_WEIBO__
//#import "WeiboApi.h"
//#endif
static UIView *_refView = nil;
#if defined (__cplusplus)
extern "C" {
#endif
/**
* @brief 初始化ShareSDK
*
* @param appKey 应用Key
*/
extern void __iosShareSDKOpen(void *appKey);
/**
* @brief 初始化社交平台
*
* @param platType 平台类型
* @param contigInfo 配置信息
*/
extern void __iosShareSDKSetPlatformConfig(int platType, void *configInfo);
/**
* @brief 用户授权
*
* @param platType 平台类型
* @param observer 观察回调对象名称
*/
extern void __iosShareSDKAuthorize (int platType, void *observer);
/**
* @brief 取消用户授权
*
* @param platType 平台类型
*/
extern void __iosShareSDKCancelAuthorize (int platType);
/**
* @brief 判断用户是否授权
*
* @param platType 平台类型
*
* @return YES 表示已经授权,NO 表示尚未授权
*/
extern bool __iosShareSDKHasAuthorized (int platType);
/**
* @brief 检测是否安装客户端
*
* @param platType 平台类型
*
* @return YES 表示已经安装,NO 表示尚未安装
*/
extern bool __iosShareSDKIsClientInstalled (int platType);
/**
* @brief 获取用户信息
*
* @param platType 平台类型
* @param observer 观察回调对象名称
*/
extern void __iosShareSDKGetUserInfo (int platType, void *observer);
/**
* @brief 分享内容
*
* @param platType 平台类型
* @param content 分享内容
* @param observer 观察回调对象名称
*/
extern void __iosShareSDKShare (int platType, void *content, void *observer);
/**
* @brief 一键分享内容
*
* @param platTypes 平台类型列表
* @param content 分享内容
* @param observer 观察回调对象名称
*/
extern void __iosShareSDKOneKeyShare (void *platTypes, void *content, void *observer);
/**
* @brief 显示分享菜单
*
* @param platTypes 平台类型列表
* @param content 分享内容
* @param x 弹出菜单的箭头的横坐标,仅用于iPad
* @param y 弹出菜单的箭头的纵坐标,仅用于iPad
* @param direction 菜单箭头方向,仅用于iPad
* @param observer 观察回调对象名称
*/
extern void __iosShareSDKShowShareMenu (void *platTypes, void *content, int x, int y, int direction, void *observer);
/**
* @brief 显示分享编辑界面
*
* @param platType 平台类型
* @param content 分享内容
* @param observer 观察回调对象名称
*/
extern void __iosShareSDKShowShareView (int platType, void *content, void *observer);
/**
* @brief 获取授权用户好友列表
*
* @param platType 平台类型
* @param observer 观察回调对象名称
*/
extern void __iosShareSDKGetFriendsList (int platType, void *page, void *observer);
/**
* @brief 获取授权信息
*
* @param platType 平台类型
* @param observer 观察回调对象名称
*/
extern void __iosShareSDKGetCredential (int platType, void *observer);
#if defined (__cplusplus)
}
#endif
#if defined (__cplusplus)
extern "C" {
#endif
/**
* 解析字符串字段
*
* @param value 字段值
*
* @return 字符串
*/
NSString* __parseStringField(id value)
{
if ([value isKindOfClass:[NSString class]])
{
if ([value isEqualToString:INHERITED_VALUE_STR])
{
return INHERIT_VALUE;
}
else
{
return value;
}
}
return nil;
}
/**
* 解析数值字段
*
* @param value 字段值
*
* @return 数值
*/
NSNumber* __parseNumberField(id value)
{
if ([value isKindOfClass:[NSString class]])
{
if ([value isEqualToString:INHERITED_VALUE_STR])
{
return INHERIT_VALUE;
}
}
else if ([value isKindOfClass:[NSNumber class]])
{
return value;
}
return nil;
}
/**
* 解析图片字段
*
* @param value 字段值
*
* @return 图片附件
*/
id<ISSCAttachment> __parseImageField(id value)
{
if ([value isKindOfClass:[NSString class]])
{
if ([value isEqualToString:INHERITED_VALUE_STR])
{
return INHERIT_VALUE;
}
if ([value isMatchedByRegex:@"\\w://.*"])
{
return [ShareSDK imageWithUrl:value];
}
else
{
return [ShareSDK imageWithPath:value];
}
}
else if ([value isKindOfClass:[NSDictionary class]])
{
NSString *path = [value objectForKey:@"path"];
NSString *ext = [value objectForKey:@"type"];
NSString *imagePath = [[NSBundle mainBundle] pathForResource:path ofType:ext];
if (imagePath)
{
return [ShareSDK imageWithPath:imagePath];
}
}
return nil;
}
/**
* 解析资源列表数据
*
* @param value 字段值
*
* @return 资源数组
*/
NSArray* __parseResourcesField(id value)
{
if ([value isKindOfClass:[NSString class]])
{
if ([value isEqualToString:INHERITED_VALUE_STR])
{
return INHERIT_VALUE;
}
}
else if ([value isKindOfClass:[NSArray class]])
{
NSMutableArray *resources = [NSMutableArray array];
for (int i = 0; i < [value count]; i++)
{
id<ISSCAttachment> attach = __parseImageField (value [i]);
if (attach)
{
[resources addObject:attach];
}
}
return resources;
}
return nil;
}
/**
* 解析字符串数组
*
* @param value 字段值
*
* @return 字符串数组
*/
NSArray* __parseStringsField(id value)
{
if ([value isKindOfClass:[NSString class]])
{
if ([value isEqualToString:INHERITED_VALUE_STR])
{
return INHERIT_VALUE;
}
}
else if ([value isKindOfClass:[NSArray class]])
{
NSMutableArray *strings = [NSMutableArray array];
for (int i = 0; i < [value count]; i++)
{
NSString *str = __parseStringField (value [i]);
if (str)
{
[strings addObject:str];
}
}
return strings;
}
return nil;
}
/**
* 解析地理位置信息
*
* @param value 字段值
*
* @return 地理位置信息
*/
SSCLocationCoordinate2D* __parseLocationField(id value)
{
if ([value isKindOfClass:[NSString class]])
{
if ([value isEqualToString:INHERITED_VALUE_STR])
{
return INHERIT_VALUE;
}
}
else if ([value isKindOfClass:[NSDictionary class]])
{
double lat = 0;
double lng = 0;
id subValue = [value objectForKey:@"lat"];
if ([subValue isKindOfClass:[NSNumber class]])
{
lat = [subValue floatValue];
}
subValue = [value objectForKey:@"lng"];
if ([subValue isKindOfClass:[NSNumber class]])
{
lng = [subValue floatValue];
}
return [SSCLocationCoordinate2D locationCoordinate2DWithLatitude:lat
longitude:lng];
}
return nil;
}
id<ISSContent> __getContentObjectWithString(NSString *data)
{
NSDictionary *contentDict = [ShareSDK jsonObjectWithString:data];
NSLog(@"contentDict = %@", contentDict);
NSString *message = nil;
id<ISSCAttachment> image = nil;
NSString *title = nil;
NSString *url = nil;
NSString *desc = nil;
SSPublishContentMediaType type = SSPublishContentMediaTypeText;
if (contentDict)
{
if ([[contentDict objectForKey:@"content"] isKindOfClass:[NSString class]])
{
message = [contentDict objectForKey:@"content"];
}
id value = [contentDict objectForKey:@"image"];
if ([value isKindOfClass:[NSString class]])
{
NSString *imagePath = value;
if ([imagePath isMatchedByRegex:@"\\w://.*"])
{
image = [ShareSDK imageWithUrl:value];
}
else
{
image = [ShareSDK imageWithPath:value];
}
}
else if ([value isKindOfClass:[NSDictionary class]])
{
NSString *path = [value objectForKey:@"path"];
NSString *ext = [value objectForKey:@"type"];
NSString *imagePath = [[NSBundle mainBundle] pathForResource:path ofType:ext];
if (imagePath)
{
image = [ShareSDK imageWithPath:imagePath];
}
}
if ([[contentDict objectForKey:@"title"] isKindOfClass:[NSString class]])
{
title = [contentDict objectForKey:@"title"];
}
if ([[contentDict objectForKey:@"url"] isKindOfClass:[NSString class]])
{
url = [contentDict objectForKey:@"url"];
}
if ([[contentDict objectForKey:@"description"] isKindOfClass:[NSString class]])
{
desc = [contentDict objectForKey:@"description"];
}
if ([[contentDict objectForKey:@"type"] isKindOfClass:[NSString class]])
{
type = (SSPublishContentMediaType)[[contentDict objectForKey:@"type"] integerValue];
}
}
id<ISSContent> contentObj = [ShareSDK content:message
defaultContent:nil
image:image
title:title
url:url
description:desc
mediaType:type];
if (contentDict)
{
NSString *site = nil;
NSString *siteUrl = nil;
if ([[contentDict objectForKey:@"site"] isKindOfClass:[NSString class]])
{
site = [contentDict objectForKey:@"site"];
}
if ([[contentDict objectForKey:@"siteUrl"] isKindOfClass:[NSString class]])
{
siteUrl = [contentDict objectForKey:@"siteUrl"];
}
if (site || siteUrl)
{
if ([ShareSDK getClientWithType:ShareTypeQQSpace])
{
[contentObj addQQSpaceUnitWithTitle:INHERIT_VALUE
url:INHERIT_VALUE
site:site
fromUrl:siteUrl
comment:INHERIT_VALUE
summary:INHERIT_VALUE
image:INHERIT_VALUE
type:INHERIT_VALUE
playUrl:INHERIT_VALUE
nswb:INHERIT_VALUE];
}
}
NSString *extInfo = nil;
NSString *musicUrl = nil;
if ([[contentDict objectForKey:@"extInfo"] isKindOfClass:[NSString class]])
{
extInfo = [contentDict objectForKey:@"extInfo"];
}
if ([[contentDict objectForKey:@"musicUrl"] isKindOfClass:[NSString class]])
{
musicUrl = [contentDict objectForKey:@"musicUrl"];
}
if (extInfo || musicUrl)
{
if ([ShareSDK getClientWithType:ShareTypeWeixiSession])
{
[contentObj addWeixinSessionUnitWithType:INHERIT_VALUE
content:INHERIT_VALUE
title:INHERIT_VALUE
url:INHERIT_VALUE
image:INHERIT_VALUE
musicFileUrl:musicUrl
extInfo:extInfo
fileData:INHERIT_VALUE
emoticonData:INHERIT_VALUE];
}
if ([ShareSDK getClientWithType:ShareTypeWeixiTimeline])
{
[contentObj addWeixinTimelineUnitWithType:INHERIT_VALUE
content:INHERIT_VALUE
title:INHERIT_VALUE
url:INHERIT_VALUE
image:INHERIT_VALUE
musicFileUrl:musicUrl
extInfo:extInfo
fileData:INHERIT_VALUE
emoticonData:INHERIT_VALUE];
}
if ([ShareSDK getClientWithType:ShareTypeWeixiFav])
{
[contentObj addWeixinFavUnitWithType:INHERIT_VALUE
content:INHERIT_VALUE
title:INHERIT_VALUE
url:INHERIT_VALUE
thumbImage:INHERIT_VALUE
image:INHERIT_VALUE
musicFileUrl:musicUrl
extInfo:extInfo
fileData:INHERIT_VALUE
emoticonData:INHERIT_VALUE];
}
}
}
//平台自定义内容
if (contentDict)
{
//新浪微博
id value = [contentDict objectForKey:@"SinaWeibo"];
if ([value isKindOfClass:[NSDictionary class]])
{
NSString *message = __parseStringField([value objectForKey:@"message"]);
id<ISSCAttachment> image = __parseImageField ([value objectForKey:@"image"]);
SSCLocationCoordinate2D *location = __parseLocationField([value objectForKey:@"location"]);
if ([ShareSDK getClientWithType:ShareTypeSinaWeibo])
{
[contentObj addSinaWeiboUnitWithContent:message
image:image
locationCoordinate:location];
}
}
//腾讯微博
value = [contentDict objectForKey:@"TencentWeibo"];
if ([value isKindOfClass:[NSDictionary class]])
{
NSString *message = __parseStringField([value objectForKey:@"message"]);
id<ISSCAttachment> image = __parseImageField ([value objectForKey:@"image"]);
SSCLocationCoordinate2D *location = __parseLocationField([value objectForKey:@"location"]);
if ([ShareSDK getClientWithType:ShareTypeTencentWeibo])
{
[contentObj addTencentWeiboUnitWithContent:message
image:image
locationCoordinate:location];
}
}
// //搜狐微博
// value = [contentDict objectForKey:@"SohuWeibo"];
// if ([value isKindOfClass:[NSDictionary class]])
// {
// NSString *message = __parseStringField([value objectForKey:@"message"]);
// id<ISSCAttachment> image = __parseImageField ([value objectForKey:@"image"]);
//
// if ([ShareSDK getClientWithType:ShareTypeSohuWeibo])
// {
// [contentObj addSohuWeiboUnitWithContent:message
// image:image];
// }
// }
//
// //网易微博
// value = [contentDict objectForKey:@"NetEaseWeibo"];
// if ([value isKindOfClass:[NSDictionary class]])
// {
// NSString *message = __parseStringField([value objectForKey:@"message"]);
// id<ISSCAttachment> image = __parseImageField ([value objectForKey:@"image"]);
//
// if ([ShareSDK getClientWithType:ShareType163Weibo])
// {
// [contentObj add163WeiboUnitWithContent:message image:image];
// }
// }
//豆瓣
value = [contentDict objectForKey:@"DouBan"];
if ([value isKindOfClass:[NSDictionary class]])
{
NSString *message = __parseStringField([value objectForKey:@"message"]);
id<ISSCAttachment> image = __parseImageField ([value objectForKey:@"image"]);
if ([ShareSDK getClientWithType:ShareTypeDouBan])
{
[contentObj addDouBanWithContent:message image:image];
}
}
//QQ空间
value = [contentDict objectForKey:@"QZone"];
if ([value isKindOfClass:[NSDictionary class]])
{
NSString *title = __parseStringField([value objectForKey:@"title"]);
NSString *url = __parseStringField([value objectForKey:@"url"]);
NSString *site = __parseStringField([value objectForKey:@"site"]);
NSString *fromUrl = __parseStringField([value objectForKey:@"fromUrl"]);
NSString *comment = __parseStringField([value objectForKey:@"comment"]);
NSString *summary = __parseStringField([value objectForKey:@"summary"]);
id<ISSCAttachment> image = __parseImageField ([value objectForKey:@"image"]);
NSNumber *type = __parseNumberField([value objectForKey:@"type"]);
NSString *playUrl = __parseStringField([value objectForKey:@"playUrl"]);
NSNumber *nswb = __parseNumberField([value objectForKey:@"nswb"]);
if ([ShareSDK getClientWithType:ShareTypeQQSpace])
{
[contentObj addQQSpaceUnitWithTitle:title
url:url
site:site
fromUrl:fromUrl
comment:comment
summary:summary
image:image
type:type
playUrl:playUrl
nswb:nswb];
}
}
//人人网
value = [contentDict objectForKey:@"Renren"];
if ([value isKindOfClass:[NSDictionary class]])
{
NSString *name = __parseStringField([value objectForKey:@"name"]);
NSString *description = __parseStringField([value objectForKey:@"description"]);
NSString *url = __parseStringField([value objectForKey:@"url"]);
NSString *message = __parseStringField([value objectForKey:@"message"]);
id<ISSCAttachment> image = __parseImageField ([value objectForKey:@"image"]);
NSString *caption = __parseStringField([value objectForKey:@"caption"]);
if ([ShareSDK getClientWithType:ShareTypeRenren])
{
[contentObj addRenRenUnitWithName:name
description:description
url:url
message:message
image:image
caption:caption];
}
}
//开心网
value = [contentDict objectForKey:@"Kaixin"];
if ([value isKindOfClass:[NSDictionary class]])
{
NSString *message = __parseStringField([value objectForKey:@"message"]);
id<ISSCAttachment> image = __parseImageField ([value objectForKey:@"image"]);
if ([ShareSDK getClientWithType:ShareTypeKaixin])
{
[contentObj addKaiXinUnitWithContent:message
image:image];
}
}
//Facebook
value = [contentDict objectForKey:@"Facebook"];
if ([value isKindOfClass:[NSDictionary class]])
{
NSString *message = __parseStringField([value objectForKey:@"message"]);
id<ISSCAttachment> image = __parseImageField ([value objectForKey:@"image"]);
if ([ShareSDK getClientWithType:ShareTypeFacebook])
{
[contentObj addFacebookWithContent:message
image:image];
}
}
//Twitter
value = [contentDict objectForKey:@"Twitter"];
if ([value isKindOfClass:[NSDictionary class]])
{
NSString *message = __parseStringField([value objectForKey:@"message"]);
id<ISSCAttachment> image = __parseImageField ([value objectForKey:@"image"]);
SSCLocationCoordinate2D *location = __parseLocationField([value objectForKey:@"location"]);
if ([ShareSDK getClientWithType:ShareTypeTwitter])
{
[contentObj addTwitterWithContent:message
image:image
locationCoordinate:location];
}
}
//Evernote
value = [contentDict objectForKey:@"Evernote"];
if ([value isKindOfClass:[NSDictionary class]])
{
NSString *message = __parseStringField([value objectForKey:@"message"]);
NSString *title = __parseStringField([value objectForKey:@"title"]);
NSArray *resources = __parseResourcesField([value objectForKey:@"resources"]);
NSString *notebookGuid = __parseStringField([value objectForKey:@"notebookGuid"]);
NSString *tagsGuid = __parseStringField([value objectForKey:@"tagsGuid"]);
if ([ShareSDK getClientWithType:ShareTypeEvernote])
{
[contentObj addEvernoteUnitWithContent:message
title:title
resources:resources
notebookGuid:notebookGuid
tagsGuid:tagsGuid];
}
}
//GooglePlus
value = [contentDict objectForKey:@"GooglePlus"];
if ([value isKindOfClass:[NSDictionary class]])
{
NSString *message = __parseStringField([value objectForKey:@"message"]);
id<ISSCAttachment> image = __parseImageField([value objectForKey:@"image"]);
NSString *url = __parseStringField([value objectForKey:@"url"]);
NSString *deepLinkId = __parseStringField([value objectForKey:@"deepLinkId"]);
NSString *title = __parseStringField([value objectForKey:@"title"]);
NSArray *resources = __parseResourcesField([value objectForKey:@"resources"]);
NSString *description = __parseStringField([value objectForKey:@"description"]);
NSString *thumbnail = __parseStringField([value objectForKey:@"thumbnail"]);
if ([ShareSDK getClientWithType:ShareTypeGooglePlus])
{
[contentObj addGooglePlusUnitWithText:message
image:image
url:url
deepLinkId:deepLinkId
title:title
description:description
thumbnail:thumbnail];
}
}
//Instagram
value = [contentDict objectForKey:@"Instagram"];
if ([value isKindOfClass:[NSDictionary class]])
{
NSString *message = __parseStringField([value objectForKey:@"message"]);
id<ISSCAttachment> image = __parseImageField ([value objectForKey:@"image"]);
if ([ShareSDK getClientWithType:ShareTypeInstagram])
{
[contentObj addInstagramUnitWithTitle:message
image:image];
}
}
//LinkedIn
value = [contentDict objectForKey:@"LinkedIn"];
if ([value isKindOfClass:[NSDictionary class]])
{
NSString *comment = __parseStringField([value objectForKey:@"comment"]);
NSString *title = __parseStringField([value objectForKey:@"title"]);
NSString *description = __parseStringField([value objectForKey:@"description"]);
NSString *url = __parseStringField([value objectForKey:@"url"]);
id<ISSCAttachment> image = __parseImageField ([value objectForKey:@"image"]);
NSString *visibility = __parseStringField([value objectForKey:@"visibility"]);
if ([ShareSDK getClientWithType:ShareTypeLinkedIn])
{
[contentObj addLinkedInUnitWithComment:comment
title:title
description:description
url:url
image:image
visibility:visibility];
}
}
//Tumblr
value = [contentDict objectForKey:@"Tumblr"];
if ([value isKindOfClass:[NSDictionary class]])
{
NSString *text = __parseStringField([value objectForKey:@"text"]);
NSString *title = __parseStringField([value objectForKey:@"title"]);
NSString *blogName = __parseStringField([value objectForKey:@"blogName"]);
NSString *url = __parseStringField([value objectForKey:@"url"]);
id<ISSCAttachment> image = __parseImageField ([value objectForKey:@"image"]);
if ([ShareSDK getClientWithType:ShareTypeTumblr])
{
[contentObj addTumblrUnitWithText:text
title:title
image:image
url:url
blogName:blogName];
}
}
//邮件
value = [contentDict objectForKey:@"Mail"];
if ([value isKindOfClass:[NSDictionary class]])
{
NSString *subject = __parseStringField([value objectForKey:@"subject"]);
NSString *message = __parseStringField([value objectForKey:@"message"]);
NSNumber *isHTML = __parseNumberField([value objectForKey:@"isHTML"]);
NSArray *attachments = __parseResourcesField([value objectForKey:@"attachments"]);
NSArray *to = __parseStringsField([value objectForKey:@"to"]);
NSArray *cc = __parseStringsField([value objectForKey:@"cc"]);
NSArray *bcc = __parseStringsField([value objectForKey:@"bcc"]);
if ([ShareSDK getClientWithType:ShareTypeMail])
{
[contentObj addMailUnitWithSubject:subject
content:message
isHTML:isHTML
attachments:attachments
to:to
cc:cc
bcc:bcc];
}
}
//短信
value = [contentDict objectForKey:@"SMS"];
if ([value isKindOfClass:[NSDictionary class]])
{
NSString *message = __parseStringField([value objectForKey:@"message"]);
if ([ShareSDK getClientWithType:ShareTypeSMS])
{
[contentObj addSMSUnitWithContent:message];
}
}
//打印
value = [contentDict objectForKey:@"Print"];
if ([value isKindOfClass:[NSDictionary class]])
{
NSString *message = __parseStringField([value objectForKey:@"message"]);
id<ISSCAttachment> image = __parseImageField ([value objectForKey:@"image"]);
if ([ShareSDK getClientWithType:ShareTypeAirPrint])
{
[contentObj addAirPrintWithContent:message
image:image];
}
}
//拷贝
value = [contentDict objectForKey:@"Copy"];
if ([value isKindOfClass:[NSDictionary class]])
{
NSString *message = __parseStringField([value objectForKey:@"message"]);
id<ISSCAttachment> image = __parseImageField ([value objectForKey:@"image"]);
if ([ShareSDK getClientWithType:ShareTypeCopy])
{
[contentObj addCopyUnitWithContent:message
image:image];
}
}
//微信好友
value = [contentDict objectForKey:@"WeChatSession"];
if ([value isKindOfClass:[NSDictionary class]])
{
NSNumber *type = __parseNumberField([value objectForKey:@"type"]);
NSString *message = __parseStringField([value objectForKey:@"message"]);
NSString *title = __parseStringField([value objectForKey:@"title"]);
NSString *url = __parseStringField([value objectForKey:@"url"]);
id<ISSCAttachment> thumbImage = __parseImageField ([value objectForKey:@"thumbImage"]);
id<ISSCAttachment> image = __parseImageField ([value objectForKey:@"image"]);
NSString *musicFileUrl = __parseStringField([value objectForKey:@"musicFileUrl"]);
NSString *extInfo = __parseStringField([value objectForKey:@"extInfo"]);
NSString *fileDataStr = __parseStringField([value objectForKey:@"fileData"]);
NSData *fileData = nil;
if (fileDataStr)
{
fileData = [NSData dataWithContentsOfFile:fileDataStr];
}
NSString *emoticonDataStr = __parseStringField([value objectForKey:@"emoticonData"]);
NSData *emoticonData = nil;
if (emoticonDataStr)
{
emoticonData = [NSData dataWithContentsOfFile:emoticonDataStr];
}
if ([ShareSDK getClientWithType:ShareTypeWeixiSession])
{
[contentObj addWeixinSessionUnitWithType:type
content:message
title:title
url:url
thumbImage:thumbImage
image:image
musicFileUrl:musicFileUrl
extInfo:extInfo
fileData:fileData
emoticonData:emoticonData];
}
}
//微信朋友圈
value = [contentDict objectForKey:@"WeChatTimeline"];
if ([value isKindOfClass:[NSDictionary class]])
{
NSNumber *type = __parseNumberField([value objectForKey:@"type"]);
NSString *message = __parseStringField([value objectForKey:@"message"]);
NSString *title = __parseStringField([value objectForKey:@"title"]);
NSString *url = __parseStringField([value objectForKey:@"url"]);
id<ISSCAttachment> thumbImage = __parseImageField ([value objectForKey:@"thumbImage"]);
id<ISSCAttachment> image = __parseImageField ([value objectForKey:@"image"]);
NSString *musicFileUrl = __parseStringField([value objectForKey:@"musicFileUrl"]);
NSString *extInfo = __parseStringField([value objectForKey:@"extInfo"]);
NSString *fileDataStr = __parseStringField([value objectForKey:@"fileData"]);
NSData *fileData = nil;
if (fileDataStr)
{
fileData = [NSData dataWithContentsOfFile:fileDataStr];
}
NSString *emoticonDataStr = __parseStringField([value objectForKey:@"emoticonData"]);
NSData *emoticonData = nil;
if (emoticonDataStr)
{
emoticonData = [NSData dataWithContentsOfFile:emoticonDataStr];
}
if ([ShareSDK getClientWithType:ShareTypeWeixiTimeline])
{
[contentObj addWeixinTimelineUnitWithType:type
content:message
title:title
url:url
thumbImage:thumbImage
image:image
musicFileUrl:musicFileUrl
extInfo:extInfo
fileData:fileData
emoticonData:emoticonData];
}
}
//QQ
value = [contentDict objectForKey:@"QQ"];
if ([value isKindOfClass:[NSDictionary class]])
{
NSNumber *type = __parseNumberField([value objectForKey:@"type"]);
NSString *message = __parseStringField([value objectForKey:@"message"]);
NSString *title = __parseStringField([value objectForKey:@"title"]);
NSString *url = __parseStringField([value objectForKey:@"url"]);
id<ISSCAttachment> image = __parseImageField ([value objectForKey:@"image"]);
if ([ShareSDK getClientWithType:ShareTypeQQ])
{
[contentObj addQQUnitWithType:type
content:message
title:title
url:url
image:image];
}
}
//Instapaper
value = [contentDict objectForKey:@"Instapaper"];
if ([value isKindOfClass:[NSDictionary class]])
{
NSString *url = __parseStringField([value objectForKey:@"url"]);
NSString *title = __parseStringField([value objectForKey:@"title"]);
NSString *description = __parseStringField([value objectForKey:@"description"]);
if ([ShareSDK getClientWithType:ShareTypeInstapaper])
{
[contentObj addInstapaperContentWithUrl:url
title:title
description:description];
}
}
//Pocket
value = [contentDict objectForKey:@"Pocket"];
if ([value isKindOfClass:[NSDictionary class]])
{
NSString *url = __parseStringField([value objectForKey:@"url"]);
NSString *title = __parseStringField([value objectForKey:@"title"]);
NSString *tags = __parseStringField([value objectForKey:@"tags"]);
NSString *tweetId = __parseStringField([value objectForKey:@"tweetId"]);
if ([ShareSDK getClientWithType:ShareTypeInstapaper])
{
[contentObj addPocketUnitWithUrl:url
title:title
tags:tags
tweetId:tweetId];
}
}
//有道云笔记
value = [contentDict objectForKey:@"YouDaoNote"];
if ([value isKindOfClass:[NSDictionary class]])
{
NSString *message = __parseStringField([value objectForKey:@"message"]);
NSString *title = __parseStringField([value objectForKey:@"title"]);
NSString *author = __parseStringField([value objectForKey:@"author"]);
NSString *source = __parseStringField([value objectForKey:@"source"]);
NSArray *attachments = __parseResourcesField([value objectForKey:@"attachments"]);
if ([ShareSDK getClientWithType:ShareTypeYouDaoNote])
{
[contentObj addYouDaoNoteUnitWithContent:message
title:title
author:author
source:source
attachments:attachments];
}
}
//搜狐随身看
value = [contentDict objectForKey:@"SohuKan"];
if ([value isKindOfClass:[NSDictionary class]])
{
NSString *url = __parseStringField([value objectForKey:@"url"]);
if ([ShareSDK getClientWithType:ShareTypeSohuKan])
{
[contentObj addSohuKanUnitWithUrl:url];
}
}
//Pinterest
value = [contentDict objectForKey:@"Pinterest"];
if ([value isKindOfClass:[NSDictionary class]])
{
id<ISSCAttachment> image = __parseImageField([value objectForKey:@"image"]);
NSString *url = __parseStringField([value objectForKey:@"url"]);
NSString *description = __parseStringField([value objectForKey:@"description"]);
if ([ShareSDK getClientWithType:ShareTypePinterest])
{
[contentObj addPinterestUnitWithImage:image
url:url
description:description];
}
}
//Flickr
value = [contentDict objectForKey:@"Flickr"];
if ([value isKindOfClass:[NSDictionary class]])
{
id<ISSCAttachment> photo = __parseImageField([value objectForKey:@"photo"]);
NSString *title = __parseStringField([value objectForKey:@"title"]);
NSString *description = __parseStringField([value objectForKey:@"description"]);
NSString *tags = __parseStringField([value objectForKey:@"tags"]);
NSNumber *isPublic = __parseNumberField([value objectForKey:@"isPublic"]);
NSNumber *isFriend = __parseNumberField([value objectForKey:@"isFriend"]);
NSNumber *isFamily = __parseNumberField([value objectForKey:@"isFamily"]);
NSNumber *safetyLevel = __parseNumberField([value objectForKey:@"safetyLevel"]);
NSNumber *contentType = __parseNumberField([value objectForKey:@"contentType"]);
NSNumber *hidden = __parseNumberField([value objectForKey:@"hidden"]);
if ([ShareSDK getClientWithType:ShareTypeFlickr])
{
[contentObj addFlickrUnitWithPhoto:photo
title:title
description:description
tags:tags
isPublic:isPublic
isFriend:isFriend
isFamily:isFamily
safetyLevel:safetyLevel
contentType:contentType
hidden:hidden];
}
}
//Dropbox
value = [contentDict objectForKey:@"Dropbox"];
if ([value isKindOfClass:[NSDictionary class]])
{
id<ISSCAttachment> file = __parseImageField([value objectForKey:@"file"]);
if ([ShareSDK getClientWithType:ShareTypeDropbox])
{
[contentObj addDropboxUnitWithFile:file];
}
}
//VKontakte
value = [contentDict objectForKey:@"VKontakte"];
if ([value isKindOfClass:[NSDictionary class]])
{
NSString *message = __parseStringField([value objectForKey:@"message"]);
NSArray *attachments = __parseResourcesField([value objectForKey:@"attachments"]);
NSString *url = __parseStringField([value objectForKey:@"url"]);
NSString *groupId = __parseStringField([value objectForKey:@"groupId"]);
NSNumber *friendsOnly = __parseNumberField([value objectForKey:@"friendsOnly"]);
SSCLocationCoordinate2D *location = __parseLocationField([value objectForKey:@"location"]);
if ([ShareSDK getClientWithType:ShareTypeVKontakte])
{
[contentObj addVKontakteUnitWithMessage:message
attachments:attachments
url:url
groupId:groupId
friendsOnly:friendsOnly
locationCoordinate:location];
}
}
//微信收藏
value = [contentDict objectForKey:@"WeChatFav"];
if ([value isKindOfClass:[NSDictionary class]])
{
NSNumber *type = __parseNumberField([value objectForKey:@"type"]);
NSString *message = __parseStringField([value objectForKey:@"message"]);
NSString *title = __parseStringField([value objectForKey:@"title"]);
NSString *url = __parseStringField([value objectForKey:@"url"]);
id<ISSCAttachment> thumbImage = __parseImageField ([value objectForKey:@"thumbImage"]);
id<ISSCAttachment> image = __parseImageField ([value objectForKey:@"image"]);
NSString *musicFileUrl = __parseStringField([value objectForKey:@"musicFileUrl"]);
NSString *extInfo = __parseStringField([value objectForKey:@"extInfo"]);
NSString *fileDataStr = __parseStringField([value objectForKey:@"fileData"]);
NSData *fileData = nil;
if (fileDataStr)
{
fileData = [NSData dataWithContentsOfFile:fileDataStr];
}
NSString *emoticonDataStr = __parseStringField([value objectForKey:@"emoticonData"]);
NSData *emoticonData = nil;
if (emoticonDataStr)
{
emoticonData = [NSData dataWithContentsOfFile:emoticonDataStr];
}
if ([ShareSDK getClientWithType:ShareTypeWeixiFav])
{
[contentObj addWeixinFavUnitWithType:type
content:message
title:title
url:url
thumbImage:thumbImage
image:image
musicFileUrl:musicFileUrl
extInfo:extInfo
fileData:fileData
emoticonData:emoticonData];
}
}
//易信好友
value = [contentDict objectForKey:@"YiXinSession"];
if ([value isKindOfClass:[NSDictionary class]])
{
NSNumber *type = __parseNumberField([value objectForKey:@"type"]);
NSString *message = __parseStringField([value objectForKey:@"message"]);
NSString *title = __parseStringField([value objectForKey:@"title"]);
NSString *url = __parseStringField([value objectForKey:@"url"]);
id<ISSCAttachment> thumbImage = __parseImageField ([value objectForKey:@"thumbImage"]);
id<ISSCAttachment> image = __parseImageField ([value objectForKey:@"image"]);
NSString *musicFileUrl = __parseStringField([value objectForKey:@"musicFileUrl"]);
NSString *extInfo = __parseStringField([value objectForKey:@"extInfo"]);
NSString *fileDataStr = __parseStringField([value objectForKey:@"fileData"]);
NSData *fileData = nil;
if (fileDataStr)
{
fileData = [NSData dataWithContentsOfFile:fileDataStr];
}
if ([ShareSDK getClientWithType:ShareTypeYiXinSession])
{
[contentObj addYiXinSessionUnitWithType:type
content:message
title:title
url:url
thumbImage:thumbImage
image:image
musicFileUrl:musicFileUrl
extInfo:extInfo
fileData:fileData];
}
}
//易信朋友圈
value = [contentDict objectForKey:@"YiXinTimeline"];
if ([value isKindOfClass:[NSDictionary class]])
{
NSNumber *type = __parseNumberField([value objectForKey:@"type"]);
NSString *message = __parseStringField([value objectForKey:@"message"]);
NSString *title = __parseStringField([value objectForKey:@"title"]);
NSString *url = __parseStringField([value objectForKey:@"url"]);
id<ISSCAttachment> thumbImage = __parseImageField ([value objectForKey:@"thumbImage"]);
id<ISSCAttachment> image = __parseImageField ([value objectForKey:@"image"]);
NSString *musicFileUrl = __parseStringField([value objectForKey:@"musicFileUrl"]);
NSString *extInfo = __parseStringField([value objectForKey:@"extInfo"]);
NSString *fileDataStr = __parseStringField([value objectForKey:@"fileData"]);
NSData *fileData = nil;
if (fileDataStr)
{
fileData = [NSData dataWithContentsOfFile:fileDataStr];
}
if ([ShareSDK getClientWithType:ShareTypeYiXinTimeline])
{
[contentObj addYiXinTimelineUnitWithType:type
content:message
title:title
url:url
thumbImage:thumbImage
image:image
musicFileUrl:musicFileUrl
extInfo:extInfo
fileData:fileData];
}
}
//明道
value = [contentDict objectForKey:@"MingDao"];
if ([value isKindOfClass:[NSDictionary class]])
{
NSString *message = __parseStringField([value objectForKey:@"message"]);
NSString *title = __parseStringField([value objectForKey:@"title"]);
NSString *url = __parseStringField([value objectForKey:@"url"]);
id<ISSCAttachment> image = __parseImageField ([value objectForKey:@"image"]);
if ([ShareSDK getClientWithType:ShareTypeMingDao])
{
[contentObj addMingDaoUnitWithContent:message
image:image
title:title
url:url];
}
}
//Line
value = [contentDict objectForKey:@"Line"];
if ([value isKindOfClass:[NSDictionary class]])
{
NSString *message = __parseStringField([value objectForKey:@"message"]);
id<ISSCAttachment> image = __parseImageField ([value objectForKey:@"image"]);
if ([ShareSDK getClientWithType:ShareTypeLine])
{
[contentObj addLineUnitWithContent:message
image:image];
}
}
//WhatsApp
value = [contentDict objectForKey:@"WhatsApp"];
if ([value isKindOfClass:[NSDictionary class]])
{
NSString *message = __parseStringField([value objectForKey:@"message"]);
id<ISSCAttachment> image = __parseImageField ([value objectForKey:@"image"]);
id<ISSCAttachment> music = __parseImageField ([value objectForKey:@"music"]);
id<ISSCAttachment> video = __parseImageField ([value objectForKey:@"video"]);
if ([ShareSDK getClientWithType:ShareTypeWhatsApp])
{
[contentObj addWhatsAppUnitWithContent:message
image:image
music:music
video:video];
}
}
}
//平台自定义内容 结束
return contentObj;
}
void __iosShareSDKOpen(void *appKey)
{
NSString *appKeyStr = [NSString stringWithCString:appKey encoding:NSUTF8StringEncoding];
[ShareSDK registerApp:appKeyStr];
#ifdef __SHARESDK_WECHAT__
[ShareSDK importWeChatClass:[WXApi class]];
#endif
//#ifdef __SHARESDK_YIXIN__
// [ShareSDK importYiXinClass:[YXApi class]];
//#endif
//
//#ifdef __SHARESDK_PINTEREST__
// [ShareSDK importPinterestClass:[Pinterest class]];
//#endif
//
//#ifdef __SHARESDK_GOOGLEPLUS__
// [ShareSDK importGooglePlusClass:[GPPSignIn class] shareClass:[GPPShare class]];
//#endif
#ifdef __SHARESDK_QQ__
[ShareSDK importQQClass:[QQApiInterface class] tencentOAuthCls:[TencentOAuth class]];
#endif
//#ifdef __SHARESDK_RENREN__
// [ShareSDK importRenRenClass:[RennClient class]];
//#endif
//
//#ifdef __SHARESDK_TENCENT_WEIBO__
// [ShareSDK importTencentWeiboClass:[WeiboApi class]];
//#endif
}
void __iosShareSDKSetPlatformConfig(int platType, void *configInfo)
{
NSString *configInfoStr = nil;
if (configInfo)
{
configInfoStr = [NSString stringWithCString:configInfo encoding:NSUTF8StringEncoding];
}
NSMutableDictionary *configInfoDict = [NSMutableDictionary dictionaryWithDictionary:[ShareSDK jsonObjectWithString:configInfoStr]];
switch (platType)
{
case ShareTypeWeixiSession:
case ShareTypeYiXinSession:
[configInfoDict setObject:[NSNumber numberWithInt:0] forKey:@"scene"];
break;
case ShareTypeWeixiTimeline:
case ShareTypeYiXinTimeline:
[configInfoDict setObject:[NSNumber numberWithInt:1] forKey:@"scene"];
break;
case ShareTypeWeixiFav:
[configInfoDict setObject:[NSNumber numberWithInt:2] forKey:@"scene"];
break;
default:
break;
}
[ShareSDK connectPlatformWithType:platType
platform:nil
appInfo:configInfoDict];
}
void __iosShareSDKAuthorize (int platType, void *observer)
{
NSString *observerStr = nil;
if (observer)
{
observerStr = [NSString stringWithCString:observer encoding:NSUTF8StringEncoding];
}
[ShareSDK authWithType:platType
options:nil
result:^(SSAuthState state, id<ICMErrorInfo> error) {
NSMutableDictionary *resultDict = [NSMutableDictionary dictionary];
[resultDict setObject:[NSNumber numberWithInteger:1] forKey:@"action"];
[resultDict setObject:[NSNumber numberWithInteger:state] forKey:@"state"];
[resultDict setObject:[NSNumber numberWithInteger:platType] forKey:@"type"];
if (state == SSResponseStateFail && error)
{
NSMutableDictionary *errorDict = [NSMutableDictionary dictionary];
[errorDict setObject:[NSNumber numberWithInteger:[error errorCode]] forKey:@"error_code"];
if ([error errorDescription])
{
[errorDict setObject:[error errorDescription] forKey:@"error_msg"];
}
[resultDict setObject:errorDict forKey:@"error"];
}
NSString *resultStr = [ShareSDK jsonStringWithObject:resultDict];
UnitySendMessage([observerStr UTF8String], "_callback", [resultStr UTF8String]);
}];
}
void __iosShareSDKCancelAuthorize (int platType)
{
[ShareSDK cancelAuthWithType:platType];
}
bool __iosShareSDKHasAuthorized (int platType)
{
return [ShareSDK hasAuthorizedWithType:platType];
}
bool __iosShareSDKIsClientInstalled (int platType)
{
id <ISSPlatformApp> app = [ShareSDK getClientWithType:platType];
return [app isClientInstalled];
}
void __iosShareSDKGetUserInfo (int platType, void *observer)
{
NSString *observerStr = nil;
if (observer)
{
observerStr = [NSString stringWithCString:observer encoding:NSUTF8StringEncoding];
}
[ShareSDK getUserInfoWithType:platType
authOptions:nil
result:^(BOOL result, id<ISSPlatformUser> userInfo, id<ICMErrorInfo> error) {
NSMutableDictionary *resultDict = [NSMutableDictionary dictionary];
[resultDict setObject:[NSNumber numberWithInteger:2] forKey:@"action"];
[resultDict setObject:[NSNumber numberWithInteger:result ? SSResponseStateSuccess : SSResponseStateFail] forKey:@"state"];
[resultDict setObject:[NSNumber numberWithInteger:platType] forKey:@"type"];
if (!result && error)
{
NSMutableDictionary *errorDict = [NSMutableDictionary dictionary];
[errorDict setObject:[NSNumber numberWithInteger:[error errorCode]] forKey:@"error_code"];
if ([error errorDescription])
{
[errorDict setObject:[error errorDescription] forKey:@"error_msg"];
}
[resultDict setObject:errorDict forKey:@"error"];
}
else if ([userInfo sourceData])
{
[resultDict setObject:[userInfo sourceData] forKey:@"user"];
}
NSString *resultStr = [ShareSDK jsonStringWithObject:resultDict];
UnitySendMessage([observerStr UTF8String], "_callback", [resultStr UTF8String]);
}];
}
void __iosShareSDKShare (int platType, void *content, void *observer)
{
NSString *observerStr = nil;
id<ISSContent> contentObj = nil;
observerStr = [NSString stringWithCString:observer encoding:NSUTF8StringEncoding];
if (content)
{
NSString *contentStr = [NSString stringWithCString:content encoding:NSUTF8StringEncoding];
contentObj = __getContentObjectWithString(contentStr);
}
[ShareSDK shareContent:contentObj
type:platType
authOptions:nil
shareOptions:nil
statusBarTips:NO
result:^(ShareType type, SSResponseState state, id<ISSPlatformShareInfo> statusInfo, id<ICMErrorInfo> error, BOOL end) {
NSMutableDictionary *resultDict = [NSMutableDictionary dictionary];
[resultDict setObject:[NSNumber numberWithInteger:3] forKey:@"action"];
[resultDict setObject:[NSNumber numberWithInteger:state] forKey:@"state"];
[resultDict setObject:[NSNumber numberWithInteger:platType] forKey:@"type"];
[resultDict setObject:[NSNumber numberWithBool:end] forKey:@"end"];
if (state == SSResponseStateFail && error)
{
NSMutableDictionary *errorDict = [NSMutableDictionary dictionary];
[errorDict setObject:[NSNumber numberWithInteger:[error errorCode]] forKey:@"error_code"];
if ([error errorDescription])
{
[errorDict setObject:[error errorDescription] forKey:@"error_msg"];
}
[resultDict setObject:errorDict forKey:@"error"];
}
else if ([statusInfo sourceData])
{
if (type == ShareTypeRenren)
{
[resultDict setObject:@{@"postid" : [statusInfo sourceData]}
forKey:@"share_info"];
}
else
{
[resultDict setObject:[statusInfo sourceData]
forKey:@"share_info"];
}
}
NSString *resultStr = [ShareSDK jsonStringWithObject:resultDict];
UnitySendMessage([observerStr UTF8String], "_callback", [resultStr UTF8String]);
}];
}
void __iosShareSDKOneKeyShare (void *platTypes, void *content, void *observer)
{
NSArray *platTypesArr = nil;
NSString *observerStr = nil;
id<ISSContent> contentObj = nil;
observerStr = [NSString stringWithCString:observer encoding:NSUTF8StringEncoding];
if (platTypes)
{
NSString *platTypesStr = [NSString stringWithCString:platTypes encoding:NSUTF8StringEncoding];
platTypesArr = [ShareSDK jsonObjectWithString:platTypesStr];
}
if (content)
{
NSString *contentStr = [NSString stringWithCString:content encoding:NSUTF8StringEncoding];
contentObj = __getContentObjectWithString(contentStr);
}
[ShareSDK oneKeyShareContent:contentObj
shareList:platTypesArr
authOptions:nil
shareOptions:nil
statusBarTips:NO
result:^(ShareType type, SSResponseState state, id<ISSPlatformShareInfo> statusInfo, id<ICMErrorInfo> error, BOOL end) {
NSMutableDictionary *resultDict = [NSMutableDictionary dictionary];
[resultDict setObject:[NSNumber numberWithInteger:3] forKey:@"action"];
[resultDict setObject:[NSNumber numberWithInteger:state] forKey:@"state"];
[resultDict setObject:[NSNumber numberWithInteger:type] forKey:@"type"];
[resultDict setObject:[NSNumber numberWithBool:end] forKey:@"end"];
if (state == SSResponseStateFail && error)
{
NSMutableDictionary *errorDict = [NSMutableDictionary dictionary];
[errorDict setObject:[NSNumber numberWithInteger:[error errorCode]] forKey:@"error_code"];
if ([error errorDescription])
{
[errorDict setObject:[error errorDescription] forKey:@"error_msg"];
}
[resultDict setObject:errorDict forKey:@"error"];
}
else if ([statusInfo sourceData])
{
if (type == ShareTypeRenren)
{
[resultDict setObject:@{@"postid" : [statusInfo sourceData]}
forKey:@"share_info"];
}
else
{
[resultDict setObject:[statusInfo sourceData]
forKey:@"share_info"];
}
}
NSString *resultStr = [ShareSDK jsonStringWithObject:resultDict];
UnitySendMessage([observerStr UTF8String], "_callback", [resultStr UTF8String]);
}];
}
void __iosShareSDKShowShareMenu (void *platTypes, void *content, int x, int y, int direction, void *observer)
{
NSArray *platTypesArr = nil;
NSString *observerStr = nil;
id<ISSContent> contentObj = nil;
observerStr = [NSString stringWithCString:observer encoding:NSUTF8StringEncoding];
if (platTypes)
{
NSString *platTypesStr = [NSString stringWithCString:platTypes encoding:NSUTF8StringEncoding];
platTypesArr = [ShareSDK jsonObjectWithString:platTypesStr];
}
if (content)
{
NSString *contentStr = [NSString stringWithCString:content encoding:NSUTF8StringEncoding];
contentObj = __getContentObjectWithString(contentStr);
}
id<ISSContainer> container = nil;
if ([UIDevice currentDevice].isPad)
{
if (!_refView)
{
_refView = [[UIView alloc] initWithFrame:CGRectMake(x, y, 10, 10)];
}
[[UIApplication sharedApplication].keyWindow.rootViewController.view addSubview:_refView];
container = [ShareSDK container];
[container setIPadContainerWithView:_refView arrowDirect:direction];
}
[ShareSDK showShareActionSheet:container
shareList:platTypesArr
content:contentObj
statusBarTips:NO
authOptions:nil
shareOptions:nil
result:^(ShareType type, SSResponseState state, id<ISSPlatformShareInfo> statusInfo, id<ICMErrorInfo> error, BOOL end) {
NSMutableDictionary *resultDict = [NSMutableDictionary dictionary];
[resultDict setObject:[NSNumber numberWithInteger:3] forKey:@"action"];
[resultDict setObject:[NSNumber numberWithInteger:state] forKey:@"state"];
[resultDict setObject:[NSNumber numberWithInteger:type] forKey:@"type"];
[resultDict setObject:[NSNumber numberWithBool:end] forKey:@"end"];
if (state == SSResponseStateFail && error)
{
NSMutableDictionary *errorDict = [NSMutableDictionary dictionary];
[errorDict setObject:[NSNumber numberWithInteger:[error errorCode]] forKey:@"error_code"];
if ([error errorDescription])
{
[errorDict setObject:[error errorDescription] forKey:@"error_msg"];
}
[resultDict setObject:errorDict forKey:@"error"];
}
else if ([statusInfo sourceData])
{
if (type == ShareTypeRenren)
{
[resultDict setObject:@{@"postid" : [statusInfo sourceData]}
forKey:@"share_info"];
}
else
{
[resultDict setObject:[statusInfo sourceData]
forKey:@"share_info"];
}
}
NSString *resultStr = [ShareSDK jsonStringWithObject:resultDict];
NSLog (@"callback = %@", resultStr);
UnitySendMessage([observerStr UTF8String], "_callback", [resultStr UTF8String]);
if (_refView)
{
//移除视图
[_refView removeFromSuperview];
}
}];
}
void __iosShareSDKShowShareView (int platType, void *content, void *observer)
{
NSString *observerStr = nil;
id<ISSContent> contentObj = nil;
observerStr = [NSString stringWithCString:observer encoding:NSUTF8StringEncoding];
if (content)
{
NSString *contentStr = [NSString stringWithCString:content encoding:NSUTF8StringEncoding];
contentObj = __getContentObjectWithString(contentStr);
}
[ShareSDK showShareViewWithType:platType
container:nil
content:contentObj
statusBarTips:NO
authOptions:nil
shareOptions:nil
result:^(ShareType type, SSResponseState state, id<ISSPlatformShareInfo> statusInfo, id<ICMErrorInfo> error, BOOL end) {
NSMutableDictionary *resultDict = [NSMutableDictionary dictionary];
[resultDict setObject:[NSNumber numberWithInteger:3] forKey:@"action"];
[resultDict setObject:[NSNumber numberWithInteger:state] forKey:@"state"];
[resultDict setObject:[NSNumber numberWithInteger:type] forKey:@"type"];
[resultDict setObject:[NSNumber numberWithBool:end] forKey:@"end"];
if (state == SSResponseStateFail && error)
{
NSMutableDictionary *errorDict = [NSMutableDictionary dictionary];
[errorDict setObject:[NSNumber numberWithInteger:[error errorCode]] forKey:@"error_code"];
if ([error errorDescription])
{
[errorDict setObject:[error errorDescription] forKey:@"error_msg"];
}
[resultDict setObject:errorDict forKey:@"error"];
}
else if ([statusInfo sourceData])
{
if (type == ShareTypeRenren)
{
[resultDict setObject:@{@"postid" : [statusInfo sourceData]}
forKey:@"share_info"];
}
else
{
[resultDict setObject:[statusInfo sourceData]
forKey:@"share_info"];
}
}
NSString *resultStr = [ShareSDK jsonStringWithObject:resultDict];
UnitySendMessage([observerStr UTF8String], "_callback", [resultStr UTF8String]);
}];
}
void __iosShareSDKGetFriendsList (int platType, void *page, void *observer)
{
ShareType shareType = (ShareType)platType;
NSString *observerStr = [NSString stringWithCString:observer encoding:NSUTF8StringEncoding];
id<ISSPage> pageInfo = nil;
if (page)
{
NSString *pageStr = [NSString stringWithCString:page encoding:NSUTF8StringEncoding];
NSDictionary *pageDict = [ShareSDK jsonObjectWithString:pageStr];
if (shareType == ShareTypeTwitter)
{
NSInteger cursor = -1;
id value = [pageDict objectForKey:@"cursor"];
if ([value isKindOfClass:[NSNumber class]])
{
cursor = [value integerValue];
}
pageInfo = [ShareSDK pageWithCursor:cursor];
}
else
{
NSInteger pageNo = 1;
NSInteger pageSize = 0;
id value = [pageDict objectForKey:@"pageNo"];
if ([value isKindOfClass:[NSNumber class]])
{
pageNo = [value integerValue];
}
value = [pageDict objectForKey:@"pageSize"];
if ([value isKindOfClass:[NSNumber class]])
{
pageSize = [value integerValue];
}
pageInfo = [ShareSDK pageWithPageNo:pageNo pageSize:pageSize];
}
}
else
{
if (shareType == ShareTypeTwitter)
{
pageInfo = [ShareSDK pageWithCursor:-1];
}
else
{
pageInfo = [ShareSDK pageWithPageNo:(NSInteger)1 pageSize:0];
}
}
[ShareSDK getFriendsWithType:shareType
page:pageInfo
authOptions:nil
result:^(SSResponseState state, NSArray *users, long long curr, long long prev, long long next, BOOL hasNext, NSDictionary *extInfo, id<ICMErrorInfo> error) {
NSMutableDictionary *resultDict = [NSMutableDictionary dictionary];
[resultDict setObject:[NSNumber numberWithInteger:4] forKey:@"action"];
[resultDict setObject:[NSNumber numberWithInteger:state] forKey:@"state"];
[resultDict setObject:[NSNumber numberWithInteger:shareType] forKey:@"type"];
if (state == SSResponseStateSuccess)
{
NSMutableArray *friends = [NSMutableArray array];
for (int i = 0; i < [users count]; i++)
{
id<ISSPlatformUser> userInfo = [users objectAtIndex:i];
[friends addObject:[userInfo sourceData]];
}
[resultDict setObject:friends forKey:@"users"];
}
else if (state == SSResponseStateFail)
{
if (error)
{
NSMutableDictionary *errorDict = [NSMutableDictionary dictionary];
[errorDict setObject:[NSNumber numberWithInteger:[error errorCode]] forKey:@"error_code"];
if ([error errorDescription])
{
[errorDict setObject:[error errorDescription] forKey:@"error_msg"];
}
[resultDict setObject:errorDict forKey:@"error"];
}
}
NSString *resultStr = [ShareSDK jsonStringWithObject:resultDict];
UnitySendMessage([observerStr UTF8String], "_callback", [resultStr UTF8String]);
}];
}
void __iosShareSDKGetCredential (int platType, void *observer)
{
ShareType shareType = (ShareType)platType;
NSString *observerStr = [NSString stringWithCString:observer encoding:NSUTF8StringEncoding];
id<ISSPlatformCredential> credential = [ShareSDK getCredentialWithType:shareType];
NSMutableDictionary *resultDict = [NSMutableDictionary dictionary];
[resultDict setObject:[NSNumber numberWithInteger:5] forKey:@"action"];
[resultDict setObject:[NSNumber numberWithInteger:SSResponseStateSuccess] forKey:@"state"];
[resultDict setObject:[NSNumber numberWithInteger:shareType] forKey:@"type"];
if (credential)
{
NSMutableDictionary *credDict = [NSMutableDictionary dictionaryWithDictionary:[credential extInfo]];
if ([credential uid])
{
[credDict setObject:[credential uid] forKey:@"uid"];
}
if ([credential token])
{
[credDict setObject:[credential token] forKey:@"token"];
}
if ([credential secret])
{
[credDict setObject:[credential secret] forKey:@"secret"];
}
if ([credential expired])
{
[credDict setObject:@([[credential expired] timeIntervalSince1970]) forKey:@"expired"];
}
[resultDict setObject:credDict forKey:@"credential"];
}
NSString *resultStr = [ShareSDK jsonStringWithObject:resultDict];
UnitySendMessage([observerStr UTF8String], "_callback", [resultStr UTF8String]);
}
#if defined (__cplusplus)
}
#endif
@implementation ShareSDKUnity3DBridge
@end
至此,在Unity项目工程中设置修改完成,接下来需要发布成Xcode项目工程,继续做设置修改!
接下来接着参考Mob官方关于shareSDK For iOS 快速集成指南文档!
步骤5:下载 ShareSDK For iOS 文件
打开刚构建发布出来的Xcode项目工程:按照官方文档快速集成第一步那样将ShareSDK文件拖入工程
如左上方所示,ShareSDK文件已经成功导入。
现在根据集成文档第二步那样,添加相应的依赖库,需要注意的是:那些“必须添加的依赖库”中,其实有一部分已经导入Xcode中,你可以删除进行再添加或者只须将缺少的“必须添加的依赖库”添加进去。
另外,还需要根据需要的分享平台,对照添加对应的依赖库。
如新浪微博还需:
QQ及空间
值得体醒的是:这些必要的库虽全部添加进去,但运行时,还是报出xxxx库没添加的情况,若是这样的情况,那么你就先删除那个库,再重新添加即可。
关于新浪微博,我们还需要进行回调处理设置,否则运行会出现点击新浪微博分享时,先跳转到微博但马上反弹回我们的应用中即调用不成功的现象发生!
我们还需要打开UnityAppController.mm脚本,添加和修改如下代码:
//引入头文件
#import <ShareSDK/ShareSDK.h>
//添加该方法
-(BOOL)application:(UIApplication*)application handleOpenURL:(NSURL*)url
{
return [ShareSDK handleOpenURL:url wxDelegate:nil];
}
//修改该方法
- (BOOL)application:(UIApplication*)application openURL:(NSURL*)url sourceApplication:(NSString*)sourceApplication annotation:(id)annotation
{
// NSMutableArray* keys = [NSMutableArray arrayWithCapacity:3];
// NSMutableArray* values = [NSMutableArray arrayWithCapacity:3];
//
// #define ADD_ITEM(item) do{ if(item) {[keys addObject:@#item]; [values addObject:item];} }while(0)
//
// ADD_ITEM(url);
// ADD_ITEM(sourceApplication);
// ADD_ITEM(annotation);
//
// #undef ADD_ITEM
//
// NSDictionary* notifData = [NSDictionary dictionaryWithObjects:values forKeys:keys];
// AppController_SendNotificationWithArg(kUnityOnOpenURL, notifData);
// return YES;
return [ShareSDK handleOpenURL:url sourceApplication:sourceApplication annotation:annotation wxDelegate:nil];
}
注意的是:这些值的规范必须参考Mob关于iOS快速集成指南中的来设置。
另外,若是现在真机运行还会出现如下错误的话,下面截图中提供了一种解决方法仅供参考:
至此,关于Unity3d集成Mob社会化分享且想发布到iOS平台的全过程已经讲完,希望对读者有帮助!