Code Monkey home page Code Monkey logo

jpush-unity3d-plugin's Introduction

JPush Unity Plugin

Gitter release platforms weibo

这是极光官方支持的 JPush Unity 插件(Android & iOS)。

集成

运行插件目录下的 JPushUnityPlugin_vX.X.X.unitypackage。

Android

  • 替换 AndroidManifest.xml 里的包名。
  • 将 AndroidManifest.xml 中的 JPUSH_APPKEY 值替换成极光控制台应用详情中的 AppKey 值。
  • 配置项目里的包名:在 Unity 中选择 File---Build Settings---Player Settings,将 Identification 选项下的 Bundle Idenifier 设置为应用的包名。
  • 配置项目的图标。

iOS

  • 在 Unity 游戏场景中,新建一个空的 Gameobject,将其名称修改为 JPushBinding,挂载 JPushBinding.cs。

  • 生成 iOS 工程,并打开该工程。

  • 添加必要的框架。

      CoreFoundation.framework
      CFNetwork.framework
      SystemConfiguration.framework
      CoreTelephony.framework
      CoreGraphics.framework
      Foundation.framework
      UIKit.framework
      Security.framework
      libz.tbd            // Xcode7 之前为 libz.dylib 之后为 libz.tbd。
      AdSupport.framework // 如需使用广告标识符 IDFA 则添加该库,否则不添加。
      libresolv.tbd
      UserNotifications.framework
    
  • 在 UnityAppController.mm 中添加头文件 JPUSHService.h。

      #import "JPUSHService.h"
      #import <UserNotifications/UserNotifications.h>
      
      // 如需使用广告标识符 IDFA 则添加该头文件,否则不添加。
      #import <AdSupport/AdSupport.h>
    
  • 在 UnityAppController.mm 的下列方法中添加以下代码:

      - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
      {
         
      	if ([[UIDevice currentDevice].systemVersion floatValue] >= 10.0) {
      #ifdef NSFoundationVersionNumber_iOS_9_x_Max
          JPUSHRegisterEntity * entity = [[JPUSHRegisterEntity alloc] init];
      	     entity.types = UNAuthorizationOptionAlert | UNAuthorizationOptionBadge | UNAuthorizationOptionSound;
          [JPUSHService registerForRemoteNotificationConfig:entity delegate:self];
      #endif
      }
      
      #if __IPHONE_OS_VERSION_MAX_ALLOWED > __IPHONE_7_1
          if ([[UIDevice currentDevice].systemVersion floatValue] >= 8.0) {
     	 	//可以添加自定义categories
      		[JPUSHService registerForRemoteNotificationTypes:(UIUserNotificationTypeBadge | UIUserNotificationTypeSound | UIUserNotificationTypeAlert) categories:nil];
          } else {
          //categories 必须为nil
      		[JPUSHService registerForRemoteNotificationTypes:(UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound |  UIRemoteNotificationTypeAlert) categories:nil];
          }
      #else
    	 	 //categories 必须为nil
      		 [JPUSHService registerForRemoteNotificationTypes:(UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound |UIRemoteNotificationTypeAlert) categories:nil];
      #endif
    
    
      	/*
             不使用 IDFA 启动 SDK。
             参数说明:
                 appKey: 极光官网控制台应用标识。
                 channel: 频道,暂无可填任意。
                 apsForProduction: YES: 发布环境;NO: 开发环境。
           */
          [JPUSHService setupWithOption:launchOptions appKey:@"abcacdf406411fa656ee11c3" channel:@"" apsForProduction:NO];
    
          /*
              使用 IDFA 启动 SDK(不能与上述方法同时使用)。
              参数说明:
                  appKey: 极光官网控制台应用标识。
                  channel: 频道,暂无可填任意。
                  apsForProduction: YES: 发布环境;NO: 开发环境。
                  advertisingIdentifier: IDFA广告标识符。
           */
          NSString *advertisingId = [[[ASIdentifierManager sharedManager] advertisingIdentifier] UUIDString];
          [JPUSHService setupWithOption:launchOptions appKey:@"abcacdf406411fa656ee11c3" channel:@"" apsForProduction:NO advertisingIdentifier:advertisingId];
    
      	return YES;
      }
    

在 [JPUSHService setupWithOption:appKey:channel:apsForProduction:advertisingIdentifier:] 方法中:

  • appkey: 填写自己应用的 AppKey。

  • apsForProduction: 根据所用 Apple 证书的不同填写。

    • YES: 发布环境。
    • NO: 开发环境。
  • advertisingIdentifier: 根据自身情况选择是否带有 IDFA 的启动方法,并注释另外一个启动方法。

  • (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken { // Required. [JPUSHService registerDeviceToken:deviceToken]; }

  • (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo { // Required. [JPUSHService handleRemoteNotification:userInfo]; }

// iOS 10 Support

  • (void)jpushNotificationCenter:(UNUserNotificationCenter *)center willPresentNotification:(UNNotification *)notification withCompletionHandler:(void (^)(NSInteger))completionHandler { // Required NSDictionary * userInfo = notification.request.content.userInfo; if([notification.request.trigger isKindOfClass:[UNPushNotificationTrigger class]]) { [JPUSHService handleRemoteNotification:userInfo]; } [[NSNotificationCenter defaultCenter] postNotificationName:@"JPushPluginReceiveNotification" object:userInfo]; completionHandler(UNNotificationPresentationOptionAlert | UNNotificationPresentationOptionBadge | UNNotificationPresentationOptionSound); // 需要执行这个方法,选择是否提醒用户,有Badge、Sound、Alert三种类型可以选择设置 }

// iOS 10 Support

  • (void)jpushNotificationCenter:(UNUserNotificationCenter *)center didReceiveNotificationResponse:(UNNotificationResponse *)response withCompletionHandler:(void (^)())completionHandler { // Required NSDictionary * userInfo = response.notification.request.content.userInfo; if([response.notification.request.trigger isKindOfClass:[UNPushNotificationTrigger class]]) { [JPUSHService handleRemoteNotification:userInfo]; } completionHandler(); // 系统要求执行这个方法 }

API 说明

Android

在 Plugins\Android\src 目录下是一些 Java 文件,可以将其引入到 Android 工程中对其进行扩展,重新生成 Jar 包替换掉工程中 Assets\Plugins\Android 目录下的 JPush_Bridge.jar 文件。

Android SDK API

iOS

iOS API 在文件 /Plugins/JPushBinding.cs 中,代码 #if UNITY_IPHONE 后面的即为可调用的 iOS API。

iOS SDK API

亦可参照以下文档中与 JPushBinding.cs 中相同方法名的方法说明:

JPush Phonegap Plugin Common API doc

JPush Phonegap Plugin iOS API doc

更多

jpush-unity3d-plugin's People

Contributors

logiczhang avatar pikacode avatar zhangqinghe avatar pkjueying avatar lhw5123 avatar javenfang avatar

Watchers

James Cloos avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.