最近作ったUnityアプリでSocialConnector(TwitterやLineなどのSNS共有用プラグイン )を使用しているのですが、
iPhone(iOS13.3)では正常に動作するものの、iPad(iPadOS13.3)では共有アクティビティ(UIActivityViewController)が開かない現象が発生しました。
今回はSocialConnectorがiPadで動作しない場合の対処法に関するメモです。
【Unity】 Social ConnectorがiPadで動作しない場合の対処法
SocialConnector.mm(元のソース)
void SocialConnector_Share(const char *text, const char *url, const char *textureURL) { NSString *_text = [NSString stringWithUTF8String:text ? text : ""]; NSString *_url = [NSString stringWithUTF8String:url ? url : ""]; NSString *_textureURL = [NSString stringWithUTF8String:textureURL ? textureURL : ""]; UIImage *image = nil; if ([_textureURL length] != 0) { image = [UIImage imageWithContentsOfFile:_textureURL]; } NSArray *actItems = [NSArray arrayWithObjects:_text, _url, image, nil]; UIActivityViewController *activityView = [[[UIActivityViewController alloc] initWithActivityItems:actItems applicationActivities: nil] autorelease]; if(floorf(NSFoundationVersionNumber) > NSFoundationVersionNumber_iOS_7_1) activityView.popoverPresentationController.sourceView = UnityGetGLViewController().view; [UnityGetGLViewController() presentViewController:activityView animated:YES completion:nil]; }
Social Connectorのソースをみると、iOSではUIActivityViewControllerを開いているっぽいです。
上記の記事によると、iPadでUIActivityViewControllerを開く場合はsourceViewとsourceRectを指定する必要があるようなので、SocialConnector.mmを以下のように変更しました。
SocialConnector.mm(変更後)
void SocialConnector_Share(const char *text, const char *url, const char *textureURL) { NSString *_text = [NSString stringWithUTF8String:text ? text : ""]; NSString *_url = [NSString stringWithUTF8String:url ? url : ""]; NSString *_textureURL = [NSString stringWithUTF8String:textureURL ? textureURL : ""]; UIImage *image = nil; if ([_textureURL length] != 0) { image = [UIImage imageWithContentsOfFile:_textureURL]; } NSArray *actItems = [NSArray arrayWithObjects:_text, _url, image, nil]; UIActivityViewController *activityView = [[[UIActivityViewController alloc] initWithActivityItems:actItems applicationActivities: nil] autorelease]; if(floorf(NSFoundationVersionNumber) > NSFoundationVersionNumber_iOS_7_1){ activityView.popoverPresentationController.sourceView = UnityGetGLViewController().view; if([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad){ activityView.popoverPresentationController.sourceRect = CGRectMake(UnityGetGLViewController().view.bounds.size.width / 2.0, UnityGetGLViewController().view.bounds.size.height / 2.0, 1.0, 1.0); } } [UnityGetGLViewController() presentViewController:activityView animated:YES completion:nil]; }
内容的には、iPadの場合に限り、sourceRectを指定する感じです。(sourceViewは既に指定しているので)
これでiPadでもSocial Connectorが動作するようになりました。
もし同様の問題が発生する方は試してみてください。