笔记本电脑经常蓝屏蓝屏咋办 能出一个详细教程吗?

iOS9 对ShareSDK的影响(适配iOS 9必读) - 博客频道 - CSDN.NET
小羊的博客
专注iOS开发经验分享与传播,欢迎加iOS开发经验交流群学习、交流。
分类:iOS开发
1、大部分社交平台接口不支持https协议。
问题描述:在iOS9下,系统默认会拦截对http协议接口的访问,因此无法获取http协议接口的数据。对ShareSDK来说,具体表现可能是,无法授权、分享、获取用户信息等。
还可能造成我们的编辑界面里传http之类的网络图片的时候,我们的编辑界面不会显示图片截图,解决的办法或者全面关闭https,允许使用http请求;或者把图片的域添加;又或者选择使用https的图片
解决方案:
(1)、暂时退回到http协议。
具体方法:
在项目的info.plist中添加一个Key:NSAppTransportSecurity,类型为字典类型。
然后给它添加一个Key:NSAllowsArbitraryLoads,类型为Boolean类型,值为YES;
(2)、设置域。可以简单理解成,把不支持https协议的接口设置成http的接口。
具体方法:
1)、在项目的info.plist中添加一个Key:NSAppTransportSecurity,类型为字典类型。
2)、然后给它添加一个NSExceptionDomains,类型为字典类型;
3)、把需要的支持的域添加給NSExceptionDomains。其中域作为Key,类型为字典类型。
4)、每个域下面需要设置3个属性:NSIncludesSubdomains、NSExceptionRequiresForwardSecrecy、NSExceptionAllowsInsecureHTTPLoads。
均为Boolean类型,值分别为YES、NO、YES。
细节提示:在iOS9中如果使用到网络图片,也要注意网络图片是否是HTTP的哦,如果是,也要把图片的域设置哦!
各平台设置域
akamaihd.net
Google+
,instagramstatic-a.akamaihd.net
Instapaper
Evernote印象笔记
2、大部分社交平台SDK不支持bitcode。
问题描述:iOS 9新建项目默认需要支持bitcode,而不支持bitcode的SDK会导致无法编译运行。
解决方案:
(1)、暂时关闭对bitcode的支持(建议),方法如下图
(2)、移除不支持bitcode的平台SDK。
3、添加Scheme白名单。
问题描述:在iOS 9下涉及到平台客户端跳转,系统会自动到项目info.plist下检测是否设置平台Scheme。对于需要配置的平台,如果没有配置,就无法正常跳转平台客户端。因此要支持客户端的分享和授权等,需要配置Scheme名单。
具体方法:
1)、在项目的info.plist中添加一LSApplicationQueriesSchemes,类型为Array。
2)、然后给它添加一个需要支持的项目,类型为字符串类型;
各平台OpenURL白名单说明
sinaweibo,sinaweibohd,sinaweibosso,sinaweibohdsso,weibosdk,weibosdk2.5[后两个若导入新浪SDK则需要]
TencentWeibo,tencentweiboSdkv2[控制台会提示这两个,但是腾讯微博SDK已经弃用,可以忽略不配置]
wechat,weixin
yixin,yixinopenapi
alipay,alipayshare
mqqOpensdkSSoLogin,&mqqopensdkapiV2,mqqopensdkapiV3,wtloginmqq2,mqq,mqqapi
mqzoneopensdk,&mqzoneopensdkapi,mqzoneopensdkapi19,mqzoneopensdkapiV2,mqqOpensdkSSoLogin,mqqopensdkapiV2,mqqopensdkapiV3,wtloginmqq2,mqqapi,mqqwpa,mqzone,mqq
[注:若同时使用QQ和QZONE,则直接添加本格即可]
Google+
googlechrome,&googlechrome-x-callback,hasgplus4,com.google.gppconsent,com.google.gppconsent.2.2.0,com.google.gppconsent.2.3.0,com.google.gppconsent.2.4.0,com.google.gppconsent.2.4.1
renrenapi,renrenios,renreniphone,renren,以及在使用人人SDK时所需配置的URL
Scheme,例如:rm226427com.mob.demoShareSDK
pocket-oauth-v1
KaokaoStory
非平台类,如短信,复制,邮件等
1.在iOS9中,如果没有添加上述白名单,系统会打印类似如下提示:&
.-canOpenURL: failed for URL: “sinaweibohdsso://xxx” – error: “This app is not allowed to query for scheme sinaweibohdsso”(如下图)
如没有添加相关白名单,有可能导致分享失败,例如不会跳转微信,不会跳转QQ等。
2.添加完上述所需的名单,系统依然会打印类似信息:&
.-canOpenURL: failed for URL: “sinaweibohdsso://xxx” – error: “null”
这是系统打印的信息,目前是无法阻止其打印,即无法消除的
3.上述白名单,是技术人员通过不断的测试收集整理所得,如果各位开发者朋友发现上表格有所遗漏,请根据系统信息添加相关白名单即可。
如果没有设置白名单的话,系统的打印信息如图所示:
添加完后,系统是依然会打印的,不过error会变成null:
在iOS9下,新浪微博SDK里面使用的JSONKit在部分机型可能导致崩溃。崩溃信息如下图。
解决:暂时移除新浪微博SDK,等待新浪微博SDK的更新。
影响:移除新浪微博SDK后,除了依赖SDK实现的跳到客户端的分享和关注官网微博等失效。其他主要功能如分享、SSO、获取用户资料等不受影响。
本文转自:http://blog.csdn.net/weixiaodahuaidan/article/details/
排名:千里之外
姓名:小羊
生日:1990.10
学历:本科
爱好:编程、篮球、乒乓球
(79)(1)(1)(1)(4)(1)(5)(2)(2)(6)(1)(6)(9)(0)(34)(2)(28)ShareSDK造成App崩溃的一个BUG原因分析以及Fix方法
字体:[ ] 类型:转载 时间:
这篇文章主要介绍了ShareSDK造成App崩溃的一个BUG原因分析以及Fix方法,使用的是Cocos2d-x专用ShareSDK组件,需要的朋友可以参考下
近期研究了一下Game App做社交分享,最后选择了ShareSDK来集成,不仅是因为ShareSDK支持国内外主流社交平台,更重要的是ShareSDK提供了专门的 cocos2d-x集成方案,有专门的文档和代码Demo供开发者参考。
文档中提到了三种集成方式:纯Java方式、plugin-x方式以及Cocos2d-x专用组件方式,这里选择了ShareSDK Cocos2d-x专用组件(v2.3.7版本)的方式。按照文档中描述的步骤进行的相对顺利,在各个社交平台的appkey生效后,我们对demo app进行了测试,居然发现app经常随机性的崩溃,有时甚至是每次都崩溃,经过深入分析,发现这是ShareSDK Cocos2d-x专用组件的一个严重Bug,下面详细说明一下Bug的产生原因以及Fix方法。
一、App崩溃的场景和代码位置
发生崩溃的场景如下:&&& App Demo中有一个"Share"按钮,点击该按钮,App Demo向已经授权的社交平台分享一些Test Content,而App Demo就在收到分享结果应答时发生了崩溃。
代码位置大致如下: 代码如下:void AppDemo::onShareClick(CCObject* sender){&&& … …&&& C2DXShareSDK::showShareMenu(NULL, content,&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& CCPointMake(100, 100),&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& C2DXMenuArrowDirectionLeft,&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& shareResultHandler);}
void shareResultHandler(C2DXResponseState state, C2DXPlatType platType,&&&&&&&&&&&&&&&&&&&&&&& CCDictionary *shareInfo, CCDictionary *error){&&& switch (state) {&&&&&&& case C2DXResponseStateSuccess:&&&&&&&&&&& CCLog("Share Ok");&&&&&&&&&&&&&&&&&& case C2DXResponseStateFail:&&&&&&&&&&& CCLog("Share Failed");&&&&&&&&&&&&&&&&&& default:&&&&&&&&&&&&&& }}崩溃的位置大致就在回调shareResultHandler前后的某个位 置,比较随机。
二、现象分析
通过查看Eclipse logcat窗口的调试日志,我们发现一些规律,一些在“Share Ok后的崩溃打印出如下日志: 代码如下:04-16 01:28:33.890: D/cocos2d-x debug info(1748): Share Ok04-16 01:28:34.090: D/cocos2d-x debug info(1748): Assert failed: reference count should greater than 004-16 01:28:34.090: E/cocos2d-x assert(1748): /home1/tonybai/android-dev/cocos2d-x-2.2.2/samples/Cpp/temp/AppDemo/proj.android/../../../../../cocos2dx/cocoa/CCObject.cpp function:release line:8104-16 01:28:34.130: A/libc(1748): Fatal signal 11 (SIGSEGV) at 0× (code=1), thread 1829 (Thread-122)
猜测一下,似乎是某个CCObject在真正Release前已经被释放了,然后后续被引用时触发内存非法访问。Cocos2d-x采用的是内存 计数的内存管理机制,在我的《Cocos2d-x内存管理-绕不过去的坎》一文中有描述。了解Cocos2d-x的内存管理机制是理解这个Bug 的前提条件。
三、原因分析
看来不得不挖掘一下ShareSDK组件的代码了。AppDemo中ShareSDK组件的代码分为两个部分:AppDemo/Classes /C2DXShareSDK和AppDemo/proj.android/src/cn/sharesdk。前者是C++代码,后面则是Java 代码,两者通过jni调用联系在一起。我们重点来找出分享应答返回来时的关键联系。
集成ShareSDK的Cocos2d-x程序会在主Activity的onCreate方法中调用ShareSDKUtils.prepare();
我们来看看prepare方法的实现: 代码如下://AppDemo/proj.android/src/cn/sharesdk/ShareSDKUtils.java
public class ShareSDKUtils {&&& private static boolean DEBUG =&&& private static C&&& private static PlatformActionListener paL&&& private static H&&& … …&&& public static void prepare() {&&&&&&& UIHandler.prepare();&&&&&&& context = Cocos2dxActivity.getContext().getApplicationContext();&&&&&&& hashon = new Hashon();&&&&&&& final Callback cb = new Callback() {&&&&&&&&&&& public boolean handleMessage(Message msg) {&&&&&&&&&&&&&&& onJavaCallback((String) msg.obj);&&&&&&&&&&&&&&&&&&&&&&&&&& }&&&&&&& };
&&&&&&& paListaner = new PlatformActionListener() {&&&&&&&&&&& public void onComplete(Platform platform, int action, HashMap&String, Object& res) {&&&&&&&&&&&&&&& if (DEBUG) {&&&&&&&&&&&&&&&&&&& System.out.println("onComplete");&&&&&&&&&&&&&&&&&&& System.out.println(res == null ? "" : res.toString());&&&&&&&&&&&&&&& }&&&&&&&&&&&&&&& HashMap&String, Object& map = new HashMap&String, Object&();&&&&&&&&&&&&&&& map.put("platform", ShareSDK.platformNameToId(platform.getName()));&&&&&&&&&&&&&&& map.put("action", action);&&&&&&&&&&&&&&& map.put("status", 1); // Success = 1, Fail = 2, Cancel = 3&&&&&&&&&&&&&&& map.put("res", res);&&&&&&&&&&&&&&& Message msg = new Message();&&&&&&&&&&&&&&& msg.obj = hashon.fromHashMap(map);&&&&&&&&&&&&&&& UIHandler.sendMessage(msg, cb);&&&&&&&&&&& }
&&& … …}
可以看出监听Complete事件的listener将message的处理都交给了cb,而cb调用了onJavaCallback方法。
onJavaCallback方法是jni导出的方法,它的实现在 AppDemo/Classes/C2DXShareSDK/Android/ShareSDKUtils.cpp里面。 代码如下:JNIEXPORT void JNICALL Java_cn_sharesdk_ShareSDKUtils_onJavaCallback& (JNIEnv * env, jclass thiz, jstring resp) {&&& CCJSONConverter* json = CCJSONConverter::sharedConverter();&&& const char* ccResp = env-&GetStringUTFChars(resp, JNI_FALSE);&&& CCLog("ccResp = %s", ccResp);&&& CCDictionary* dic = json-&dictionaryFrom(ccResp);&&& env-&ReleaseStringUTFChars(resp, ccResp);&&& CCNumber* status = (CCNumber*) dic-&objectForKey("status"); // Success = 1, Fail = 2, Cancel = 3&&& CCNumber* action = (CCNumber*) dic-&objectForKey("action"); //& 1 = ACTION_AUTHORIZING,& 8 = ACTION_USER_INFOR,9 = ACTION_SHARE&&& CCNumber* platform = (CCNumber*) dic-&objectForKey("platform");&&& CCDictionary* res = (CCDictionary*) dic-&objectForKey("res");&&& // TODO add codes here&&& if(1 == status-&getIntValue()){&&&&&&& callBackComplete(action-&getIntValue(), platform-&getIntValue(), res);&&& }else if(2 == status-&getIntValue()){&&&&&&& callBackError(action-&getIntValue(), platform-&getIntValue(), res);&&& }else{&&&&&&& callBackCancel(action-&getIntValue(), platform-&getIntValue(), res);&&& }
&&& dic-&autorelease();}
这就是两块代码的关键联系。而问题似乎就出在onJavaCallback方 法里,因为我们看到了该方法中使用了Cocos2d-x的数据结构类。
我们来看一下onJavaCallback方法是在哪个线程里执行的。Cocos2d-x App至少有两个线程,一个UI Thread(Activity),一个Render Thread。显然onJavaCallback是在UI Thread中被执行的。但是我们知道Cocos2d-x的AutoreleasePool是在Render Thread中管理的,并在帧切换时进行释放操作的。
我们似乎闻到了问题的味道。Cocos2d-x基本上算是一个"单线程"游戏架构,所有的渲染操作、渲染树节点逻辑管理、绝大多数游戏逻辑都在 Render Thread中进行,UI Thread更多的是接收系统事件,并传递给Render Thread处理。Cocos2d-x的内存管理在这样的“单线程”背景下是没有大问题的,都是串行操作,不存在thread racing的情况。但一旦另外一个线程也调用内存管理接口进行对象内存操作时,问题就出现了,Cocos2d-x的内存池管理不是线程安全的。
我们回到上面代码,重点看一下json转dic的方法,该方法将分享应答字符串转换为内部的dictionary结构: 代码如下://AppDemo/Classes/C2DXShareSDK/Android/JSON/CCJSONConverter.cpp
CCDictionary * CCJSONConverter::dictionaryFrom(const char *str){&&& cJSON * json = cJSON_Parse(str);&&& if (!json || json-&type!=cJSON_Object) {&&&&&&& if (json) {&&&&&&&&&&& cJSON_Delete(json);&&&&&&& }&&&&&&& return NULL;&&& }&&& CCAssert(json && json-&type==cJSON_Object, "CCJSONConverter:wrong json format");&&& CCDictionary * dictionary = CCDictionary::create();&&& convertJsonToDictionary(json, dictionary);&&& cJSON_Delete(json);&&&}
void CCJSONConverter::convertJsonToDictionary(cJSON *json, CCDictionary *dictionary){&&& dictionary-&removeAllObjects();&&& cJSON * j = json-&&&& while (j) {&&&&&&& CCObject * obj = getJsonObj(j);&&&&&&& dictionary-&setObject(obj, j-&string);&&&&&&& j = j-&&&& }}
CCObject * CCJSONConverter::getJsonObj(cJSON * json){&&& switch (json-&type) {&&&&&&& case cJSON_Object:&&&&&&& {&&&&&&&&&&& CCDictionary * dictionary = CCDictionary::create();&&&&&&&&&& &&&&&&&&&&& convertJsonToDictionary(json, dictionary);&&&&&&&&&&&&&&&&&& }&&&&&&& case cJSON_Array:&&&&&&& {&&&&&&&&&&& CCArray * array = CCArray::create();&&&&&&&&&&& convertJsonToArray(json, array);&&&&&&&&&&&&&&&&&& }&&&&&&& case cJSON_String:&&&&&&& {&&&&&&&&&&& CCString * string = CCString::create(json-&valuestring);&&&&&&&&&&&&&&&&&& }&&&&&&& case cJSON_Number:&&&&&&& {&&&&&&&&&&& CCNumber * number = CCNumber::create(json-&valuedouble);&&&&&&&&&&&&&&&&&& }&&&&&&& case cJSON_True:&&&&&&& {&&&&&&&&&&& CCNumber * boolean = CCNumber::create(1);&&&&&&&&&&&&&&&&&& }&&&&&&& case cJSON_False:&&&&&& {&&&&&&&&&&& CCNumber * boolean = CCNumber::create(0);&&&&&&&&&&&&&&&&&& }&&&&&&& case cJSON_NULL:&&&&&&& {&&&&&&&&&&& CCNull * null = CCNull::create();&&&&&&&&&&&&&&&&&& }&&&&&&& default:&&&&&&& {&&&&&&&&&&& CCLog("CCJSONConverter encountered an unrecognized type");&&&&&&&&&&& return NULL;&&&&&&& }&&& }}可以看出整个解析过程,都直接用的是传统的Cocos2d-x对象构造方法:create。在每个对象的create中,代码都会调用该对象的 autorelease方法。而这个方法本身就是线程不安全的,且即便autorelease调用ok,在下一帧切换时,这些对象将都会被release 掉,如果在UI Thread中再引用这些对象的地址,那势必造成内存的非法访问,而引发程序崩溃。
四、Fix方法
可能有朋友会问,create后,我retain一下可否?答案是否。因此create的创建不是线程安全的,create和retain两个调 用之间存在时间差,而在这段时间内,该对象就有可能被render thread释放掉。
Fix方法很简单,就是在UI Thread中不使用Cocos2d-x的内存管理机制,我们用传统的new来替代create,并将 Java_cn_sharesdk_ShareSDKUtils_onJavaCallback最后的autorelease改为release,这样就 不用劳烦Render Thread来帮我们释放内存了。CCDictionary的destructor调用时还会将Dictionarny内部所有Element自动释放掉。
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具iphone分享功能使用sharesdk分享信息到微信
最近接到一个项目要求分享到微信和facebook,查找网上后,推荐使用sharesdk。
1.首先到官网下载对应的sharesdk。
2.根据官网的开发文档把开发包加入到自己的工程中。
3.注意拷贝选项:
4.链接一些库文件。
6.在appdelegate类中加入重写两个方法:
&-(BOOL)application:(UIApplication&*)application&handleOpenURL:(NSURL&*)url
&&&&return&[ShareSDK&handleOpenURL:url&wxDelegate:self];
-(BOOL)application:(UIApplication&*)application&openURL:(NSURL&*)url&sourceApplication:(NSString&*)sourceApplication&annotation:(id)annotation
&&&&return&[ShareSDK&handleOpenURL:url&sourceApplication:sourceApplication&annotation:annotation&wxDelegate:self];
&#import&&WXApi.h&&
接下来注册sharesdk和微信share:
&-&(BOOL)application:(UIApplication&*)application&didFinishLaunchingWithOptions:(NSDictionary&*)launchOptions
&[ShareSDK&registerApp:@&
16b016b8d2b1&];
&[ShareSDK&connectWeChatWithAppId:@&
wxc467b1f584ded6c6&&wechatCls:[WXApi&class]];
&[ShareSDK&importWeChatClass:[WXApi&class]];&
粉色需要到
添加引用得到的appkey。
红色需要到添加微信的应用,得到appkey。
在需要share的地方加入如下代码:
&NSString&*imagePath&=&[[NSBundle&mainBundle]&pathForResource:@&app_logo&&&ofType:@&png&];
& & & & //app_logo是图片名,png是图片格式
&&&&&&&&//构造分享内容
&&&&&&&&id&ISSContent&&publishContent&=&[ShareSDK&content:@&分享内容&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&defaultContent:@&默认分享内容,没内容时显示&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&image:[ShareSDK&imageWithPath:imagePath]
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&title:@&ShareSDK&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&url:@& &
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&description:@&这是一条测试信息&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&mediaType:SSPublishContentMediaTypeNews];
&&&&&&&&id&ISSShareActionSheetItem&&wxsItem&=&[ShareSDK&shareActionSheetItemWithTitle:[ShareSDK&getClientNameWithType:ShareTypeWeixiSession]
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&icon:[ShareSDK&getClientIconWithType:ShareTypeWeixiSession]
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&clickHandler:^{
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&[ShareSDK&clientShareContent:publishContent
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&type:ShareTypeWeixiSession
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&statusBarTips:YES
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&result:^(ShareType&type,&SSResponseState&state,&id&ISSPlatformShareInfo&&statusInfo,&id&ICMErrorInfo&&error,&BOOL&end)&{
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&if&(state&==&SSPublishContentStateSuccess)
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&{
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&NSLog(NSLocalizedString(@&TEXt_SHARE_SUC&,&@&分享成功&));
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&}
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&else&if&(state&==&SSPublishContentStateFail)
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&{
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&NSLog(NSLocalizedString(@&TEXT_SHARE_FAI&,&@&分享失败,错误码:%d,错误描述:%@&),&[error&errorCode],&[error&errorDescription]);
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&}
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&}];
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&}];
&&&&&&&&//创建自定义分享列表
&&&&&&&&NSArray&*shareList&=&[ShareSDK&customShareListWithType:
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&wxsItem,
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&nil];
&&&&&&&&[ShareSDK&showShareActionSheet:nil
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&shareList:shareList
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&content:publishContent
&&&&&&&&&&&&&&&&&&&&&&&&&statusBarTips:YES
&&&&&&&&&&&&&&&&&&&&&&&&&&&authOptions:nil
&&&&&&&&&&&&&&&&&&&&&&&&&&shareOptions:&nil
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&result:^(ShareType&type,&SSResponseState&state,&id&ISSPlatformShareInfo&&statusInfo,&id&ICMErrorInfo&&error,&BOOL&end)&{
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&if&(state&==&SSResponseStateSuccess)
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&{
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&NSLog(@&分享成功&);
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&}
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&else&if&(state&==&SSResponseStateFail)
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&{
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&NSLog(@&分享失败,错误码:%d,错误描述:%@&,&[error&errorCode],&[error&errorDescription]);
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&}
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&}];&
接下来,需要到app-info.plist文件中加入一个URL types项(已有则不需再加),如下图
注意URL Schemes,如不添加,会提示URL Schemes的错误。
好了,运行一下,效果如图:
点击微信按钮就会跳转到微信app。
东西不错,不过应该把代码部分弄得规范一些,方便浏览阅读代码
--- 共有 1 条评论 ---
谢谢,项目有点赶,没有排得很好。
在分享里面点击publish后貌似不能显示到微博上
--- 共有 2 条评论 ---
嗯,知道原因了,sdk的key的原因,因为是网上找的跟自己的app不匹配,换了就好了
官方给的demo,可以分享到微博,我没做分享到微博那块。

我要回帖

更多关于 联想笔记本电脑蓝屏 的文章

 

随机推荐