最近作った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が動作するようになりました。
もし同様の問題が発生する方は試してみてください。
