[英]Unity3D Push Notifications iOS & Android Vuforia & UrbanAirship
我正在開發一個使用Vuforia SDK的游戲,我希望最好使用UrbanAirship集成推送通知(這是我的客戶要求的)
我一直在嘗試讓Push Notifications在iOS和android上都可以運行,但是沒有運氣,沒有UrbanAirship,也沒有其他任何方式,我也嘗試了Pushwoosh Unity插件。
問題1:是否可以將UrbanAirship與Unity3d集成? 任何鏈接/建議/示例都很好,我已經搜索過但找不到任何相關內容。
問題2 :(如果我理解正確的話)是Vurforia SDK需要在Android Manifest文件中進行MAIN活動,因此阻止我實施諸如Pushwoosh之類的插件或其他類似插件,以使用它們所需的GCM(Google雲消息傳遞)以及主要活動。
問題3:同樣,如果我從閱讀過的所有站點/論壇/帖子中都能正確理解,GCM就是向Android推送通知的方法。 閱讀有關GCM的一些知識,它是一個通用的兩個消息傳遞API,可以在應用未運行時將其用於推送通知嗎? 還是我完全走錯了軌道?
我知道,很抱歉,這個問題很長,但這是第一次處理推送通知,更不用說在iOS和Android上都可以使用的東西了。 對於如何使它正常工作,我將不勝感激。 TIA!
這是我為Urban Airship構建的android插件中的代碼
請注意,我擴展了該應用程序。 您還需要一個意圖接收器類。
package com.yourapp.urbanairship;
import android.app.Application;
import android.util.Log;
import com.urbanairship.AirshipConfigOptions;
import com.urbanairship.Logger;
import com.urbanairship.UAirship;
import com.urbanairship.push.CustomPushNotificationBuilder;
import com.urbanairship.push.PushManager;
public class UrbanAirShipPlugin extends Application {
@Override
public void onCreate() {
super.onCreate();
AirshipConfigOptions options = AirshipConfigOptions.loadDefaultOptions(this);
options.productionAppKey ="XXXXXXXXXXXXXXXXXXXXXXXXXX"; // from urban airship
options.productionAppSecret = "XXXXXXXXXXXXXXXXXXXXXXXXXX"; // from urban airship
options.developmentAppKey ="XXXXXXXXXXXXXXXXXXXXXXXXXX"; // from urban airship
options.developmentAppSecret = "XXXXXXXXXXXXXXXXXXXXXXXXXX";// from urban airship
options.gcmSender = "XXXXXXXXXXXXXX"; // from GOOGLE -> basically your project id
options.inProduction = true;
options.analyticsEnabled =false;
options.minSdkVersion=18;
//determines which app key to use
// Take off initializes the services
UAirship.takeOff(this, options);
PushManager.shared().setIntentReceiver(IntentReceiver.class);
}
}
這是意圖接收器類:
package your.package.name;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.util.Log;
import com.urbanairship.UAirship;
import com.urbanairship.push.GCMMessageHandler;
import com.urbanairship.push.PushManager;
import java.util.Arrays;
import java.util.List;
import java.util.Set;
public class IntentReceiver extends BroadcastReceiver {
private static final String logTag = "PushSample";
public static String APID_UPDATED_ACTION_SUFFIX = ".apid.updated";
@Override
public void onReceive(Context context, Intent intent) {
Log.i(logTag, "Received intent: " + intent.toString());
String action = intent.getAction();
if (action.equals(PushManager.ACTION_PUSH_RECEIVED)) {
int id = intent.getIntExtra(PushManager.EXTRA_NOTIFICATION_ID, 0);
Log.i(logTag, "Received push notification. Alert: "
+ intent.getStringExtra(PushManager.EXTRA_ALERT)
+ " [NotificationID="+id+"]");
logPushExtras(intent);
} else if (action.equals(PushManager.ACTION_NOTIFICATION_OPENED)) {
Log.i(logTag, "User clicked notification. Message: " + intent.getStringExtra(PushManager.EXTRA_ALERT));
logPushExtras(intent);
Intent launch = new Intent(Intent.ACTION_MAIN);
launch.setClassName(UAirship.shared().getApplicationContext(), "your.main.activity" );
launch.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
UAirship.shared().getApplicationContext().startActivity(launch);
} else if (action.equals(PushManager.ACTION_REGISTRATION_FINISHED)) {
Log.i(logTag, "Registration complete. APID:" + intent.getStringExtra(PushManager.EXTRA_APID)
+ ". Valid: " + intent.getBooleanExtra(PushManager.EXTRA_REGISTRATION_VALID, false));
// Notify any app-specific listeners
Intent launch = new Intent(UAirship.getPackageName() + APID_UPDATED_ACTION_SUFFIX);
UAirship.shared().getApplicationContext().sendBroadcast(launch);
} else if (action.equals(GCMMessageHandler.ACTION_GCM_DELETED_MESSAGES)) {
Log.i(logTag, "The GCM service deleted "+intent.getStringExtra(GCMMessageHandler.EXTRA_GCM_TOTAL_DELETED)+" messages.");
}
}
/**
* Log the values sent in the payload's "extra" dictionary.
*
* @param intent A PushManager.ACTION_NOTIFICATION_OPENED or ACTION_PUSH_RECEIVED intent.
*/
private void logPushExtras(Intent intent) {
Set<String> keys = intent.getExtras().keySet();
for (String key : keys) {
//ignore standard C2DM extra keys
List<String> ignoredKeys = (List<String>)Arrays.asList(
"collapse_key",//c2dm collapse key
"from",//c2dm sender
PushManager.EXTRA_NOTIFICATION_ID,//int id of generated notification (ACTION_PUSH_RECEIVED only)
PushManager.EXTRA_PUSH_ID,//internal UA push id
PushManager.EXTRA_ALERT);//ignore alert
if (ignoredKeys.contains(key)) {
continue;
}
Log.i(logTag, "Push Notification Extra: ["+key+" : " + intent.getStringExtra(key) + "]");
}
}
}
另請注意,您需要將應用程序擴展名的插件com.yourapp.urbanairship名稱添加到清單中(在此處需要的所有其他內容旁邊):
<application android:allowClearUserData="true" android:icon="@drawable/app_icon" android:label="@string/app_name" android:name="com.yourapp.urbanairship" android:debuggable="true">
別忘了清單中還有其他城市飛艇需求(另請參見此處 )
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.