2018-11-07 18:12:58 weixin_43170404 阅读数 1604

       产品需求:在微信内分享需要手动配置的分享地址、分享图片与内容描述,引导用户分享,并在微信分享成功回调内进行相应的操作。

首先需要在项目中引入微信jsSDk包,然后通过接口获取后台签名。

封装函数获取微信分享必填参数

其中的jsApiList中填的是需要使用的微信分享js接口的列表,参数URL默认是location.href,即分享当前页面的URL。

在需要分享的页面引入封装的函数

然后通过wxShare方法将URL和配置的参数传入,link参数是分享出去的链接,必须与当前页面的对应js安全域名一致;

 

...shareData就是在函数内传对象,进行解构赋值es6写法

但是在测试过程中发现:

1.同一套程序,andriod分享正常,ios分享报签名不正确,主要原因是微信的ios和安卓处理方式不一样,ios不会刷新当前的页面地址,使用的是history的记录地址,所以每次分享出来的链接,都是第一个进入系统页面的链接,当跳转到子页面的时候,系统就会识别打开的url和签名的url不一致导致签名不正确

2.由于单页面的hash模式会自带#号,但是分享的时候会将#号后面的参数变成无效,导致想传参数都传不过去,可以做一个页面没有#号的,然后统一带参数分享到这个页面然后再重定向到指定的vue页面

解决方法:在向后台发送请求获取微信签名的时候将传给后台的URL的#后面的参数截去,后台根据截取完的URL生成签名就能实现安卓和iOS分享回调成功的问题。

2016-05-17 20:08:02 D744784681 阅读数 3720

今天在接入友盟分享sdk的时候,发现了一个奇怪的问题,在iOS8.x上边分享成功后回调正常,但是在iOS9上边回调居然没有回调,检查了一圈没有发现什么错误啊?究竟是怎么回事呢?最后才发现原来是因为这个:

在同时接入talkingdata和友盟分享的时候,连个sdk都会要求我们实现两个系统方法,//这两个方法的作用就是打开其他的应用,但是是有区别的,一个方法是在iOS9中回调,一个方法是在iOS8中回调

-(BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation{
    [TalkingDataAppCpa onReceiveDeepLink:url];
    return  [UMSocialSnsService handleOpenURL:url wxApiDelegate:nil];
}
//iOS9中的回调方法,如果此方法没有定义则在iOS9中也会回调iOS8中的那个重载方法
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<NSString*, id> *)options
{
    [TalkingDataAppCpa onReceiveDeepLink:url];
    return  [UMSocialSnsService handleOpenURL:url wxApiDelegate:nil];
}
如果两个方法我们只实现了第一个的话是没有问题的,而且友盟的demo中实现的也是第一个、但是问题来了,在其他的sdk中可能会要求我们同时实现iOS8和iOS9中的方法。如果我们只在ios8中的方法中调用了 [UMSocialSnsService handleOpenURL:url wxApiDelegate:nil]这个方法,而在iOS9的方法中没有写 [UMSocialSnsService handleOpenURL:url wxApiDelegate:nil]这个方法那个就会出现在iOS8上边回调正常iOS9上边无回调,所以我推荐使用上述方法来解决在iOS8上边回调正常但是在iOS9上边回调不正常的情况。
声明:可能上述文章中存在知识性错误,如果大家有发现尽请指正,不胜感激
2017-01-05 12:20:14 baidu_36500903 阅读数 2956
将appdelegate微信openURL换成如下方法就OK了
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation{
    dispatch_async(dispatch_get_main_queue(), ^{
        [WXApi handleOpenURL:url delegate:self];
    });
    return YES;
    
}
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<NSString *,id> *)options{
    dispatch_async(dispatch_get_main_queue(), ^{
        [WXApi handleOpenURL:url delegate:self];
    });
    return YES;
    
}
- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url{
    dispatch_async(dispatch_get_main_queue(), ^{
        [WXApi handleOpenURL:url delegate:self];
    });
    return YES;
}

2017-11-03 09:17:18 autom_lishun 阅读数 2113
友盟分享成功回调方法不执行[-(void)didFinishGetUMSocialDataInViewController:(UMSocialResponseEntity *)response;]昨天百度弄了一天也没整出来
今天突然发现根本就不用走这个方法也可以判断出分享是否成功,看下面:

就是直接在点击分享图标分享的时候判断
//朋友圈分享
if ([shareString isEqualToString:@"weixin_circle"])
    {                
        [UMSocialData defaultData].extConfig.title = @"***的分享";
        [UMSocialData defaultData].extConfig.wechatTimelineData.url = @"分享的链接";
        UMSocialUrlResource *urlResource = [[UMSocialUrlResource alloc] initWithSnsResourceType:UMSocialUrlResourceTypeImage url:@"share_imageUrl"];
        [[UMSocialDataService defaultDataService]  postSNSWithTypes:@[UMShareToWechatTimeline] content:@"share_content" image:nil location:nil urlResource:urlResource presentedController:self completion:^(UMSocialResponseEntity *shareResponse)
         {

      /*
    UMSResponseCodeSuccess            = 200,        //成功
    UMSREsponseCodeTokenInvalid       = 400,        //授权用户token错误
    UMSResponseCodeBaned              = 505,        //用户被封禁
    UMSResponseCodeFaild              = 510,        //发送失败(由于内容不符合要求或者其他原因)
    UMSResponseCodeArgumentsError     = 522,        //参数错误,提供的参数不符合要求
    UMSResponseCodeEmptyContent       = 5007,       //发送内容为空
    UMSResponseCodeShareRepeated      = 5016,       //分享内容重复
    UMSResponseCodeGetNoUidFromOauth  = 5020,       //授权之后没有得到用户uid
    UMSResponseCodeAccessTokenExpired = 5027,       //token过期
    UMSResponseCodeNetworkError       = 5050,       //网络错误
    UMSResponseCodeGetProfileFailed   = 5051,       //获取账户失败
    UMSResponseCodeCancel             = 5052,        //用户取消授权
    UMSResponseCodeNotLogin           = 5053,       //用户没有登录
    UMSResponseCodeNoApiAuthority     = 100031      //QQ空间应用没有在QQ互联平台上申请上传图片到相册的权限

*/

             if (shareResponse.responseCode == UMSResponseCodeSuccess)
             {

                 NSLog(@"分享成功!");
       
                //需要的数据在shareResponse中都有
               //平台名
              NSString *platformName = [[shareResponse.data allKeys] objectAtIndex:0];
            
              //继续写你的代码。。。。。。。。。。。。。。。。。
            
             }else{
                            
                NSLog(@"%d",response.responseCode);
                              
            }
         }];
2017-03-10 11:20:45 czis912 阅读数 10468

此问题最近困扰了我三天,检查项目代码与网上方法对照,并没有发现不对的地方,跟断点调试,只发现微信分享后微信端并没有给应用反馈,onResp()没有触发。


问题描述:

线上iOS用户在第三方应用点击微信分享,无法执行分享后的操作。
用iPhone 5c(iOS 7)测试,跳转微信端分享完成后闪退到系统菜单界面,并没有返回第三方应用。微信分享实际已经完成,onResp()方法并没有回调。


原因:

查资料发现,由于微信SDK对iOS7支持性的问题所致。微信早期就发生过在iOS7平台上无法进行微信分享的问题。按照iOS微信SDK接入指南所说的,将所有参数语句配置完成后,依然无法调用onResp()方法。

解决办法:

由于问题是出现在线上的,极大多数iOS用户系统版本都在9以上,依然不回调onResp()。分析原因,微信SDK升级后对iOS 9以上平台放弃了两个旧的接口导致无法得到app的url路径。
(旧方法建议保留,老版本iOS还是会调用就方法)

//被废弃的方法如下

-(BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url;

-(BOOL)application:(UIApplication *)application openURL:(NSURL *)url

sourceApplication:(NSString *)sourceApplication annotation:(id)annotation;

//替换的新方法

改用方法为- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary*)options;

在新方法中加入

[WXApi handleOpenURL:url delegate:self] //向微信注册app的url

需要在Xcode项目属性的Info面板中设置URL Types。

3月17日补充:
后来发现iOS 7 微信分享后闪退的原因了

微信分享后回调到了主干版本客户端,导致大陆分支没收到微信的反馈。(这问题实在是太傻逼了。。。)

iOS接口回调模式

阅读数 710

没有更多推荐了,返回首页