记录下接友盟ios的推送

最近项目要接友盟的ios端推送,所以记录下坑点


1.参考的一些博主的步骤

1.玩 iOS 友盟推送

2.iOS集成友盟消息推送

2.坑点先说明

1.SDK下载 选消息推送  ios文档

2.有四个文件夹

一定要再mac端解压!!!!!!

3.这个四个文件夹加入xcode的frameworks 这个怎么加看上面的链接 里面写的很清楚,还有一些.tbd文件也要加,这些步骤按文档即可

4.坑点.由于我们是jenkins自动化出包,所以我一般习惯windows上提交这些文件,但是!!!!需要记住的是这四个一定在ios端提交svn,如果在windows下,里面headers文件中 link会掉,就会导致在import的时候 not found各种.h文件


windows下提交link会掉,不要问我为什么,我也不知道,被这个问题耽误一天

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发布后解决

解决方案


代码裁剪解决方案,加个link文件即可

6.在unityPlugins中加入需要的桥接文件下载地址 ,只需要UMPushSDK.h  UMPushSDK.mm文件即可,其他的xcode里面设置即可

7.也是狙击点..导出xcode后 在preprocessor.h文件中  UNITY_USES_REMOTE_NOTIFICATIONS 一定把0改为1,不然didRegisterForRemoteNotificationsWithDeviceToken 这个函数进入不了.


修改为1

3.xcode代码

官方出了demo的github,找到对应.h .mm文件修正增加即可


这个函数下增加这个代码


import


.h文件增加即可

完成




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:那边实现

找个全局的NS存下 ,unity 调用下就好

你可能感兴趣的:(记录下接友盟ios的推送)