最近项目要接友盟的ios端推送,所以记录下坑点
1.参考的一些博主的步骤
1.玩 iOS 友盟推送
2.iOS集成友盟消息推送
2.坑点先说明
1.SDK下载 选消息推送 ios文档
2.有四个文件夹
3.这个四个文件夹加入xcode的frameworks 这个怎么加看上面的链接 里面写的很清楚,还有一些.tbd文件也要加,这些步骤按文档即可
4.坑点.由于我们是jenkins自动化出包,所以我一般习惯windows上提交这些文件,但是!!!!需要记住的是这四个一定在ios端提交svn,如果在windows下,里面headers文件中 link会掉,就会导致在import的时候 not found各种.h文件
5.打ipa的时候报了个错"bulk_unityengine.vrmodule_o.cpp"not found.这就是个vr模块,我们项目中没用过,但是不知道为什么要报这个错,友盟sdk中引用了,经查是代码裁剪导致没有引用
XR:VRModule可能在使用启用了“Strip Engine Code”的IL2CPP时被剥离,导致构建不进入VR模式。有关如何解决此问题的详细信息,请参阅https://forum.unity.com/threads/2018-1-il2cpp-vrmodule-stripping-issue.528799/。将在2018.1发布后解决
解决方案
6.在unityPlugins中加入需要的桥接文件下载地址 ,只需要UMPushSDK.h UMPushSDK.mm文件即可,其他的xcode里面设置即可
7.也是狙击点..导出xcode后 在preprocessor.h文件中 UNITY_USES_REMOTE_NOTIFICATIONS 一定把0改为1,不然didRegisterForRemoteNotificationsWithDeviceToken 这个函数进入不了.
3.xcode代码
官方出了demo的github,找到对应.h .mm文件修正增加即可
完成
7月1日更新:
由于推送后面传的app:目前上传app后会报2个错
1.ERROR ITMS-90771: “Missing Info.plist value. The Info.plist key ‘BGTaskSchedulerPermittedIdentifiers’ must contain a list of identifiers used to submit and handle tasks when ‘UIBackgroundModes’ has a value of ‘processing’. For more information, refer to the Information Property List Key Reference at https://developer.apple.com/library/ios/documentation/General/Reference/InfoPlistKeyReference/Introduction/Introduction.html.”
这个错误是因为推送要增加UIBackgroundModes和processing选项,需要在plist中增加"BGTaskSchedulerPermittedIdentifiers" 相关,由于我们是unity自动化,所以c#代码为
private static void ModifyPush(XcodeProjSet setting, PlistDocument plist)
{
var urlArray = plist.root.CreateArray("BGTaskSchedulerPermittedIdentifiers");
urlArray.AddString(setting.boundleId);
}
非自动化手动在info.plist中增加
BGTaskSchedulerPermittedIdentifiers
com.yourCompanyName.appName
2.ERROR ITMS-90339: "This bundle is invalid. The Info.plist contains an invalid key 'UIApplicationExitsOnSuspend......
解决办法 删掉info.plist 中UIApplicationExitsOnSuspend即可
一些自动化的问题 :链接
友盟后台token获得 在代码里面加上对应语句即可
和服务器交互的时候我们会给服务器发送设备ID,友盟提供了此接口的,就是
static extern void GetTag_iOS(TagHandler callback); //TagHandler为string类型的delegate
但是这方法会有个问题,il2cpp下会报一个 MonoPInvokeCallback 的特性错误
解决办法就是将TagHandler 加入此特性
友盟这个坑货其实没有提供返回设备ID的方法 哎, 自己加了个
c#声明个方法调用oc的,原理怎么就不讨论,给结果
[DllImport("__Internal")]
static extern string GetCId();
OC:那边实现